openaigpt-oss: 実行方法ガイド

OpenAI の新しいオープンソースモデルを実行・ファインチューニングしましょう!

OpenAI が「gpt-oss-120b」 と「gpt-oss-20b」」をリリースしました。これは Apache 2.0 ライセンスのもとで提供される、2 つの SOTA オープン言語モデルです。どちらの 128k コンテキストモデルも、推論、ツール利用、エージェント的タスクにおいて、同規模のオープンモデルを上回ります。Unsloth を使えば、ローカルで実行およびファインチューニングできるようになりました!

gpt-oss-20b を実行gpt-oss-120b を実行gpt-oss をファインチューニング

ファインチューニング gpt-oss-20b を無料で Colab ノートブックarrow-up-right

でトレーニング済み RL, gpt-oss-120b は o4-mini に匹敵し、 gpt-oss-20b は o3-mini に匹敵します。どちらも関数呼び出しと CoT 推論に優れており、o1 と GPT-4o を上回ります。

最高のパフォーマンスを得るには、利用可能な合計メモリ(ユニファイドメモリ + VRAM + システム RAM)が、ダウンロードする量子化モデルファイルのサイズを上回っていることを確認してください。そうでない場合でも、llama.cpp は SSD/HDD オフロード経由で実行できますが、推論は遅くなります。

gpt-oss - Unsloth GGUFs:

circle-check

📜gpt-oss 向け Unsloth の修正

circle-info

私たちの修正の一部は、Hugging Face 上の OpenAI 公式モデルに upstream として反映されました。 参照arrow-up-right

OpenAI は、gpt-oss 向けに会話を OpenAI 推奨形式へトークナイズできる、スタンドアロンの解析およびトークナイズライブラリ Harmonyarrow-up-right を公開しました。

推論エンジンは通常、Harmony パッケージではなく jinja チャットテンプレートを使いますが、Harmony と直接比較したところ、いくつかの問題が見つかりました。以下を見ると、上側が Harmony による正しいレンダリング形式です。下側は現在の jinja チャットテンプレートでレンダリングされたものです。かなり多くの違いがあります!

また、必要であれば OpenAI の Harmony ライブラリを jinja チャットテンプレートなしで直接使えるようにする関数も用意しました。以下のように通常の会話をそのまま解析できます:

次に、 encode_conversations_with_harmony 関数を Unsloth から使います:

harmony 形式には、いくつか興味深い要素が含まれています:

  1. reasoning_effort = "medium" low、medium、high を選択でき、これによって gpt-oss の推論予算が変わります。一般的に高いほどモデルの精度は良くなります。

  2. developer_instructions は、追加できるシステムプロンプトのようなものです。

  3. model_identity はそのままにしておくのが最善です。編集はできますが、カスタムのものが機能するかは不明です。

現在の jinja チャットテンプレートには複数の問題があると分かりました(エコシステム内に複数実装があります):

  1. 関数およびツール呼び出しは tojsonでレンダリングされます。dict であれば問題ありませんが、文字列の場合は引用符やその他の 記号がバックスラッシュ付きになります.

  2. いくつかの 余分な改行 が、jinja テンプレート内の一部の境界にあります。

  3. モデルからのツール呼び出しの思考は、 analysis タグを使うべきで、 final タグではありません.

  4. 他のチャットテンプレートは <|channel|>final をまったく利用していないようです。最終的な assistant メッセージにはこれを使うべきです。思考トレースやツール呼び出しには使うべきではありません。

GGUF、BnB、BF16 の各アップロード版、およびすべてのバージョン向けの私たちのチャットテンプレートは修正済みです! たとえば、私たちの形式と Harmony の形式を比較しても、異なる文字は一切ありません:

🔢 精度の問題

モデルは BF16 で学習されているため、主に Tesla T4 と float16 マシンで複数の精度問題を発見しました。その結果、外れ値やオーバーフローが存在しました。MXFP4 は実際には Ampere 以前の GPU ではサポートされていないため、Triton は MXFP4 行列積のために tl.dot_scaled を提供します。これは内部で行列をその場で BF16 にアップキャストします。

私たちは MXFP4 推論ノートブックarrow-up-right も Tesla T4 Colab 向けに作成しました!

circle-info

ソフトウェアエミュレーションarrow-up-right により、ネイティブなマイクロスケーリング演算をサポートしないハードウェアアーキテクチャも対象にできます。現時点では、そのような場合、マイクロスケーリングされた lhs/rhs はドット計算の前に bf16 要素型へアップキャストされます。

mixed precision autocast のデータ型として float16 を使うと、しばらくすると無限大が発生することが分かりました。これに対処するため、MoE を bfloat16 で処理し、その後も bfloat16 または float32 精度のままにする方法が有効でした。古い GPU が bfloat16 をまったくサポートしていない場合(T4 など)は、float32 が使われます。

また、float16 マシンでは、すべての演算(ルーターなど)の精度を float32 に変更しています。

🖥️ gpt-oss の実行

以下は、 20B および 120B モデルバリアント向けのガイドです。

circle-info

F16 より小さいあらゆる量子化(2 ビットを含む)でも精度低下はごくわずかです。これは、一部の部分(例: attention 層)だけが低ビットで、ほとんどはフル精度のままだからです。そのためサイズは F16 モデルに近く、たとえば 2 ビット版(11.5 GB)はフル 16 ビット版(14 GB)とほぼ同じ性能です。llama.cpp がこれらのモデル向けにより良い量子化をサポートしたら、できるだけ早くアップロードします。

OpenAI の gpt-oss モデルには、ユーザーがモデルの「推論努力」を調整できる機能があります。これにより、モデルが思考に使うトークン量を通じて、性能と応答速度(レイテンシ)のトレードオフを制御できます。

OpenAI の gpt-oss モデルでは、選択可能な推論努力レベルが 3 段階あります:

  • :非常に高速な応答が必要で、複雑な多段階推論を必要としないタスク向けに最適化されています。

  • :性能と速度のバランス。

  • :必要なタスクに対して最も強力な推論性能を提供しますが、そのぶんレイテンシは高くなります。

⚙️ 推奨設定

OpenAI は両モデルに対して、以下の推論設定を推奨しています:

temperature=1.0, top_p=1.0, top_k=0

  • Temperature は 1.0

  • Top_K = 0(または、より良い結果の可能性のために 100 も試してください)

  • Top_P = 1.0

  • 推奨最小コンテキスト長: 16,384

  • 最大コンテキスト長ウィンドウ: 131,072

チャットテンプレート:

文末/生成終了トークン: EOS は <|return|>

gpt-oss-20B を実行

当社の Dynamic 4-bit 量子化で毎秒 6 トークン以上の推論速度を達成するには、少なくとも 14GB のユニファイドメモリ (VRAM と RAM の合計)または 14GB のシステム RAM 単体が必要です。目安として、利用可能メモリは使用するモデルのサイズ以上であるべきです。GGUF リンク: unsloth/gpt-oss-20b-GGUFarrow-up-right

注: モデルは総サイズより少ないメモリでも実行できますが、その場合は推論が遅くなります。最大メモリが必要なのは最速で動かす場合のみです。

circle-info

以下の ベストプラクティスに従ってください。120B モデルと同じです。

現時点では Google Colab、Docker、LM Studio、または llama.cpp でモデルを実行できます。以下を参照してください:

当社の Google Colab ノートブックarrow-up-right

🦥 Unsloth Studio ガイド

このチュートリアルでは、 Unsloth Studioを使用します。これは LLM の実行と学習のための新しい Web UI です。Unsloth Studio を使えば、ローカルで Mac、Windows、および Linux 上でモデルを実行でき、さらに:

1

Unsloth をインストール

MacOS、Linux、WSL:

Windows PowerShell:

2

Unsloth Studio をセットアップ(初回のみ)

セットアップでは、Node.js(nvm 経由)のインストール、フロントエンドのビルド、すべての Python 依存関係のインストール、CUDA 対応 llama.cpp のビルドが自動で行われます。

circle-exclamation
circle-info

WSL ユーザーへ: 以下のインストールのために sudo パスワードの入力を求められます(ビルド依存関係のインストール用: cmake, git, libcurl4-openssl-dev).

3

Unsloth を起動

MacOS、Linux、WSL、Windows:

その後、 http://localhost:8888 をブラウザで開いてください。

4

gpt-oss-20b を検索してダウンロード

初回起動時には、アカウントを保護するためのパスワードを作成し、後でもう一度サインインする必要があります。その後、モデル、データセット、基本設定を選ぶ短いオンボーディングウィザードが表示されます。いつでもスキップできます。

次に、 Studio Chat タブに移動し、検索バーで gpt-oss を検索して、希望のモデルと量子化版をダウンロードしてください。

5

gpt-oss-20b を実行

Unsloth Studio を使う場合、推論パラメータは自動設定されるはずですが、手動で変更することもできます。コンテキスト長、チャットテンプレート、その他の設定も編集可能です。

詳細については、当社の Unsloth Studio 推論ガイド.

🐋 Docker: gpt-oss-20b 実行チュートリアル

すでに Docker Desktop を持っている場合は、以下のコマンドを実行するだけで完了です:

Llama.cpp: gpt-oss-20b 実行チュートリアル

  1. 最新の llama.cppGitHub こちらarrow-up-rightで入手してください。以下のビルド手順に従うこともできます。GPU がない、または CPU 推論のみを行いたい場合は、 -DGGML_CUDA=ON-DGGML_CUDA=OFF に変更してください。 Apple Mac / Metal デバイス向けでは、 -DGGML_CUDA=OFF を設定してから通常どおり続けてください。Metal サポートはデフォルトで有効です。

  1. 以下のように Hugging Face から直接取得できます:

  2. 以下でモデルをダウンロードしてください(事前に pip install huggingface_hub hf_transfer をインストール後)。ダウンロードが止まる場合は、 Hugging Face Hub、XET デバッグ

gpt-oss-120b を実行:

当社の 1-bit 量子化で毎秒 6 トークン以上の推論速度を達成するには、少なくとも 66GB のユニファイドメモリ (VRAM と RAM の合計)または 66GB のシステム RAM 単体が必要です。目安として、利用可能メモリは使用するモデルのサイズ以上であるべきです。GGUF リンク: unsloth/gpt-oss-120b-GGUFarrow-up-right

注: モデルは総サイズより少ないメモリでも実行できますが、その場合は推論が遅くなります。最大メモリが必要なのは最速で動かす場合のみです。

circle-info

以下の ベストプラクティスに従ってください。20B モデルと同じです。

🦥 Unsloth Studio ガイド

このチュートリアルでは、 Unsloth Studioを使用します。これは LLM の実行と学習のための新しい Web UI です。Unsloth Studio を使えば、ローカルで Mac、Windows、および Linux 上でモデルを実行でき、さらに:

1

Unsloth をインストール

MacOS、Linux、WSL:

Windows PowerShell:

2

Unsloth Studio をセットアップ(初回のみ)

セットアップでは、Node.js(nvm 経由)のインストール、フロントエンドのビルド、すべての Python 依存関係のインストール、CUDA 対応 llama.cpp のビルドが自動で行われます。

circle-exclamation
circle-info

WSL ユーザーへ: 以下のインストールのために sudo パスワードの入力を求められます(ビルド依存関係のインストール用: cmake, git, libcurl4-openssl-dev).

3

Unsloth を起動

MacOS、Linux、WSL:

Windows PowerShell:

その後、 http://localhost:8888 をブラウザで開いてください。

4

gpt-oss-120b を検索してダウンロード

初回起動時には、アカウントを保護するためのパスワードを作成し、後でもう一度サインインする必要があります。その後、モデル、データセット、基本設定を選ぶ短いオンボーディングウィザードが表示されます。いつでもスキップできます。

次に、 Studio Chat タブに移動し、検索バーで gpt-oss を検索して、希望のモデルと量子化版をダウンロードしてください。

5

gpt-oss-120b を実行

Unsloth Studio を使う場合、推論パラメータは自動設定されるはずですが、手動で変更することもできます。コンテキスト長、チャットテンプレート、その他の設定も編集可能です。

詳細については、当社の Unsloth Studio 推論ガイド.

📖 Llama.cpp: gpt-oss-120b 実行チュートリアル

gpt-oss-120b では、最適化された推論のために特に Llama.cpp を使用します。

circle-check
  1. 最新の llama.cppGitHub こちらarrow-up-rightで入手してください。以下のビルド手順に従うこともできます。GPU がない、または CPU 推論のみを行いたい場合は、 -DGGML_CUDA=ON-DGGML_CUDA=OFF に変更してください。

  2. llama.cpp を直接使ってモデルをダウンロードすることもできますが、通常は huggingface_hub を使うことをお勧めします。llama.cpp を直接使うには、次のようにします:

  3. または、以下でモデルをダウンロードしてください(事前にインストール後 pip install huggingface_hub hf_transfer )。UD-Q2_K_XL や他の量子化版を選べます。

  4. 会話モードでモデルを実行し、任意のプロンプトを試してください。

  5. 編集 --threads -1 は CPU スレッド数用、 --ctx-size 262114 はコンテキスト長用、 --n-gpu-layers 99 は何層を GPU オフロードするか用です。GPU メモリ不足になる場合は調整してみてください。CPU のみで推論する場合は削除してください。

circle-check

🛠️ 生成速度の改善

VRAM に余裕がある場合は、より多くの MoE 層、または層全体そのものをオフロードしてみてください。

通常、 -ot ".ffn_.*_exps.=CPU" はすべての MoE 層を CPU にオフロードします! これにより、非 MoE 層を 1 枚の GPU に収めやすくなり、生成速度が向上します。GPU 容量に余裕があれば、より多くの層に合わせて正規表現をカスタマイズできます。

GPU メモリにもう少し余裕がある場合は、 -ot ".ffn_(up|down)_exps.=CPU" を試してください。これは up および down projection の MoE 層をオフロードします。

さらに GPU メモリに余裕がある場合は、 -ot ".ffn_(up)_exps.=CPU" を試してください。これは up projection の MoE 層のみをオフロードします。

正規表現をカスタマイズすることもできます。たとえば、 -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" は、6 層目以降の gate、up、down の MoE 層のみをオフロードすることを意味します。

OpenAI の 最新の llama.cpp リリースarrow-up-right では高スループットモードも導入されています。 llama-parallelを使用してください。詳しくは こちらarrow-up-right。また、 KV キャッシュを 4 ビットに量子化 して、VRAM / RAM の移動を減らし、生成プロセスを高速化することもできます。

🦥 Unsloth で gpt-oss をファインチューニング

circle-check

Unsloth の gpt-oss ファインチューニングは 1.5 倍高速で、VRAM 使用量は 70% 少なく、10 倍長いコンテキスト長をサポートします。gpt-oss-20b の QLoRA 学習は 14GB VRAM に収まり、gpt-oss-120b は 65GB VRAM で動作します。

  • QLoRA の要件: gpt-oss-20b = 14GB VRAM • gpt-oss-120b = 65GB VRAM。

  • BF16 LoRA の要件: gpt-oss-20b = 44GB VRAM • gpt-oss-120b = 210GB VRAM。

gpt-oss をファインチューニングするためのステップごとのチュートリアルをお読みください:

openaiチュートリアル:gpt-oss のファインチューニング方法chevron-right
circle-check

gpt-oss をファインチューニングするための無料 Unsloth ノートブック:

強化学習(GRPO)

Unsloth は gpt-oss 向け RL をサポートしました! 私たちは 2 つのノートブックを作成しました。詳細は、gpt-oss RL 専用ブログをご覧ください: gpt-oss RL

💾新機能: gpt-oss 学習後に GGUF、vLLM へ保存

QLoRA で gpt-oss をファインチューニングし、モデルを直接保存、エクスポート、または llama.cpp, vLLM、または HF へマージできるようになりました。Unsloth 限定ではありません。無料ノートブックも近日公開予定です。

以前は、QLoRA でファインチューニングされた gpt-oss モデルは Unsloth 上でしか実行できませんでした。LoRA マージ処理中に MXFP4 ベースモデルのオンデマンド逆量子化 を導入することで、この制限を取り除きました。これにより、 ファインチューニング済みモデルを bf16 形式でエクスポート.

できるようになりました。gpt-oss モデルをファインチューニングした後、 単一コマンド:

で 16 ビット形式にマージできます。代わりにモデルをマージして hugging-face hub に直接プッシュしたい場合は、以下を使用できます:

💡効率的な gpt-oss ファインチューニングを実現する

MXFP4 は非常に効率的である一方で、gpt-oss の学習をネイティブにはサポートしていないことが分かりました。この制限を克服するため、 Bitsandbytes の NF4 量子化でこれを模倣することで、MXFP4 層専用のカスタム学習関数を実装しました。

MXFP4 推論を可能にするために、OpenAI の Triton Kernels ライブラリを直接利用しました。ただし、ファインチューニング / 学習については、MXFP4 カーネルはまだ学習をサポートしていません。なぜなら backward pass がまだ実装されていないためです。現在 Triton で実装を進めています! W_TRANSPOSE というフラグがあり、これは こちらarrow-up-rightで言及されているように実装されるべきです。微分は重み行列の転置によって計算できるため、転置演算を実装する必要があります。

Unsloth 以外のライブラリで gpt-oss を学習したい場合は、学習前に重みを bf16 にアップキャストする必要があります。しかしこの方法では、 大幅に増加し VRAM 使用量と学習時間の両方が最大で メモリ使用量 300% 増! になります。他のすべての学習方法では 20b モデルの学習に最低 65GB VRAM が必要ですが、Unsloth では 14GB VRAM のみで済みます(-80%)。

どちらのモデルも MoE アーキテクチャを使用しており、20B モデルは 32 個中 4 個の専門家を、120B モデルはトークンごとに 128 個中 4 個を選択します。学習時および公開時、重みは MXFP4 形式で nn.Parameter オブジェクトとして保存され、 nn.Linear 層としては保存されません。これは量子化を複雑にし、とくに MoE/MLP の専門家部分が 20B パラメータのうち約 19B を占めるためです。

これを有効にするため、 BitsandBytes 量子化とメモリ効率の高いファインチューニングのために、これらのパラメータを nn.Linear 層に変換しました。これにより演算はわずかに遅くなりますが、限られたメモリの GPU でもファインチューニングが可能になるため、十分に価値のあるトレードオフです。

データセットのファインチューニングガイド

gpt-oss は推論のみをサポートしますが、それでも非推論の データセットでファインチューニングできます。ただし、これは推論能力に影響する可能性があります。推論能力を維持したい場合(任意)は、直接回答と chain-of-thought の例を混ぜて使用できます。少なくとも 75% を推論 および 25% を非推論 としてデータセットに含めると、モデルが推論能力を維持しやすくなります。

私たちの gpt-oss-20b 会話ノートブックでは、OpenAI の例である Hugging Face の Multilingual-Thinking データセットを使用しています。このデータセットを使う目的は、モデルがこれら 4 つの異なる言語において推論能力を学習し発達させられるようにすることです。

最終更新

役に立ちましたか?