openaigpt-oss: 実行ガイド

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

OpenAIがリリースした「gpt-oss-120b」 と「gpt-oss-20b」、Apache 2.0ライセンスの下で公開された2つの最先端オープン言語モデルです。どちらの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 GGUF:

circle-check

📜gpt-ossに対するUnslothの修正

circle-info

当社の一部の修正は、OpenAIの公式モデルのHugging Face上のリポジトリに上流へプッシュされました。 print(completion.choices[0].message.content)arrow-up-right

OpenAIは単体のパーシングとトークナイゼーションのライブラリを公開しました: Harmonyarrow-up-right は、会話をgpt-ossの推奨フォーマットにトークン化することを可能にします。

推論エンジンは一般的に代わりにjinjaチャットテンプレートを使用し、Harmonyパッケージは使わないことが多く、私たちはHarmonyと直接比較した際にいくつか問題を発見しました。以下に示す通り、上がHarmonyによる正しいレンダリング形式で、下が現在のjinjaチャットテンプレートによるレンダリングです。かなりの違いがあります!

また、希望する場合にjinjaチャットテンプレートを使わずにOpenAIのHarmonyライブラリを直接使用できるようにする関数も作成しました — 単に以下のように通常の会話をパースするだけで使えます:

その後、 encode_conversations_with_harmony 関数をUnslothから使用します:

harmonyフォーマットにはいくつか興味深い要素が含まれます:

  1. reasoning_effort = "medium" low、medium、highを選択でき、これはgpt-ossの推論(reasoning)バジェットを変えます — 一般に高いほどモデルの精度が向上します。

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

  3. model_identity はそのままにしておくのが最良です — 編集は可能ですが、カスタムにして正常に機能するかは不明です。

私たちは現在のjinjaチャットテンプレートに複数の問題を見つけました(エコシステム上に複数の実装があります):

  1. 関数やツール呼び出しは tojsonでレンダリングされます。これは辞書なら問題ありませんが、文字列の場合は引用符などの 記号がバックスラッシュでエスケープされます。.

  2. jinjaテンプレートのいくつかの境界に 余分な改行 が存在します。

  3. モデルのツール呼び出しに関する思考は analysis タグであるべきであり、 final タグではありません。.

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

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の実行

以下はモデルの 20B120B モデルのバリアント。

circle-info

F16より小さい任意の量子化、2ビットを含めほとんど精度低下がありません。なぜなら一部(例えばアテンション層)が低ビット化されるだけで、ほとんどはフル精度のままだからです。だからサイズはF16モデルに近く、例えば2ビット(11.5GB)版はフル16ビット(14GB)版とほぼ同等の性能を示します。llama.cppがこれらのモデルのより良い量子化をサポートしたら、できるだけ早くアップロードします。

最新の gpt-oss OpenAIのモデルには、モデルの「reasoning effort(推論努力)」を調整する機能が含まれます。これはモデルの性能と応答速度(レイテンシー)のトレードオフを制御するもので、モデルが思考に使うトークン量によって変わります。

最新の gpt-oss モデルは選べる3つの異なる推論努力レベルを提供します:

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

  • Medium(中): 性能と速度のバランスです。

  • High(高): 必要なタスクに対して最も高い推論性能を提供しますが、その分レイテンシーが高くなります。

⚙️ 推奨設定

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でモデルを実行できます。以下を参照してください:

gpt-oss-20bを当社の Google Colabノートブックで無料で実行できます。arrow-up-right

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

既にDocker Desktopをお持ちの場合、下のコマンドを実行するだけで完了です:

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

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

  1. Hugging Face から直接プルできます:

  2. モデルをダウンロードするには(をインストールした後) モデルをダウンロードするには( )。ダウンロードが止まる場合は、次を参照してください 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モデルと同じです。

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

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

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

  2. モデルを直接llama.cppでダウンロードできますが、通常は huggingface_hub の使用をお勧めします。

  3. --top-k 0.0 \ モデルをダウンロードするには( )UD-Q2_K_XLやその他の量子化バージョンを選択できます。

  4. local_dir = "unsloth/gpt-oss-120b-GGUF",

  5. 編集 --threads -1 --threads 32 会話モードでモデルを実行し、任意のプロンプトを試してください。 --ctx-size --n-gpu-layers 99 --n-gpu-layers 2

circle-check

🛠️ GLM 4.7で生成されたPythonコードを実行するためのツール呼び出し

より多くのVRAMがある場合、より多くのMoE層をオフロードするか、層全体をオフロードすることを試せます。

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

もし少し多くのGPUメモリがあるなら、次を試してください -ot ".ffn_(up|down)_exps.=CPU" これは up と down の投影 MoE 層をオフロードします。

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

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

最新の llama.cpp リリースarrow-up-right 高スループットモードも導入しています。使用するには llama-parallel。詳細は こちらarrow-up-right。また、 KVキャッシュを4ビットに量子化することができます こちら

--model unsloth/gpt-oss-120b-GGUF/gpt-oss-120b-F16.gguf \

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。

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

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

Reasoning + Conversationalノートブック

強化学習(GRPO) gpt-oss RL

カーネル生成ノートブック💾

新:gpt-ossトレーニング後のGGUF、vLLMへの保存 llama.cpp, QLoRAでgpt-ossをファインチューニングし、モデルを直接保存、エクスポート、またはマージしてvLLM 、または HF

に出力できるようになりました — 単にUnslothだけでなく。近日中に無料ノートブックをリリースする予定です。 以前はQLoRAでファインチューニングされたgpt-ossモデルはUnslothでのみ実行可能でした。私たちはMXFP4ベースモデル(gpt-ossのような)のLoRAマージプロセス中にオンデマンドでのデクォンタイズを導入することでこの制限を解除しました。これにより、 ファインチューニングしたモデルをbf16形式でエクスポートすることが可能になります。 ファインチューニング後のgpt-ossモデルは、.

単一のコマンドで model.save_pretrained_merged(save_directory, tokenizer):

もしモデルをマージしてhugging-faceハブへ直接プッシュすることを好むなら、次のように実行できます:

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

MXFP4は非常に効率的ですが、gpt-ossでのトレーニングをネイティブにサポートしていないことがわかりました。この制限を克服するために、私たちはMXFP4レイヤーを模倣するカスタムトレーニング関数を実装しました(BitsandbytesのNF4量子化を通じて)。 Bitsandbytes NF4量子化。

私たちはMXFP4推論を可能にするためにOpenAIのTriton Kernelsライブラリを直接利用しました。しかし、ファインチューニング/トレーニングに関しては、MXFP4カーネルはまだトレーニングをサポートしていません。逆伝播がまだ実装されていないためです。我々はTritonでの実装に積極的に取り組んでいます! W_TRANSPOSE というフラグがあり、 こちらarrow-up-rightで述べられているように実装されるべきです。導関数は重み行列の転置によって計算できるため、転置操作を実装する必要があります。

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

両モデルはMoEアーキテクチャを使用しているため、20Bモデルはトークンごとに32の中から4人のエキスパートを選択し、120Bモデルは128の中から4人を選択します。トレーニングとリリース時に重みはMXFP4形式で nn.Parameter オブジェクトとして保存され、 nn.Linear レイヤーとしてではありません。これは量子化を複雑にします。特にMoE/MLPのエキスパートが20Bパラメータの約190億を占めるためです。

BitsandBytesによる 量子化とメモリ効率の良いファインチューニングを可能にするために、これらのパラメータを レイヤーに変換しました。これにより動作はやや遅くなりますが、限られたメモリのGPUでのファインチューニングを可能にし、価値あるトレードオフとなります。 nn.Linear データセットのファインチューニングガイド

gpt-ossは推論(reasoning)のみをサポートしますが、推論を含まない

データセット でファインチューニングすることは可能です。ただしこれは推論能力に影響する可能性があります。推論能力を維持したい場合(任意)、直接回答とチェイン・オブ・ソート(思考の連鎖)の例を混ぜて使用できます。少なくともを使用してください。 75%の推論例25%の非推論例 を含めて、モデルの推論能力を保持してください。

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

最終更新

役に立ちましたか?