gpt-oss:実行ガイド
OpenAI の新しいオープンソースモデルを実行&ファインチューニング!
OpenAIが公開した『gpt-oss-120b』 と『gpt-oss-20b』、Apache 2.0ライセンスの下で公開された2つの最先端オープン言語モデルです。どちらの128kコンテキストモデルも、同等のサイズのオープンモデルを推論、ツール使用、エージェンティックなタスクで上回ります。Unslothを使えば、これらをローカルで実行・ファインチューニングできます!
gpt-oss-20bを実行gpt-oss-120bを実行gpt-oss をファインチューン
8月28日更新: QLoRA でファインチューニングした gpt-oss モデルを llama.cpp、vLLM、HF などにエクスポート/保存できるようになりました。
また、私たちは Unsloth Flex Attention を導入しました。これにより 8倍以上の文脈長, VRAM 使用量を50%以上削減 および トレーニングが1.5倍以上高速化 といった利点が、すべての実装に対して得られます。 詳細はこちらを参照してください
ファインチューニング gpt-oss-20bを当社のサービスで無料でファインチューニング Colab ノートブック
で訓練済み 強化学習(RL), gpt-oss-120b はo4-miniや gpt-oss-20b はo3-miniに匹敵します。どちらも関数呼び出しとCoT推論に優れており、o1やGPT-4oを上回ります。
gpt-oss - Unsloth GGUFs:
Unslothの チャットテンプレートの修正が含まれます。最良の結果を得るには、当社のアップロード機能を使ってUnslothでトレーニングしてください!
20B: gpt-oss-20B
120B: gpt-oss-120B
📜gpt-oss向けUnslothの修正点
当社の一部の修正は上流にプッシュされ、Hugging Face上のOpenAI公式モデルに取り込まれました。 詳細については
OpenAIは単独のパースとトークナイズ用ライブラリを公開しました: Harmony は、会話をgpt-ossのためのOpenAIの推奨フォーマットにトークナイズすることを可能にします。
推論エンジンは一般にjinjaチャットテンプレートを使用することが多く、Harmonyパッケージは使用しませんが、直接Harmonyと比較するといくつかの問題を見つけました。以下を見ると、上がHarmonyによる正しいレンダリング形式で、下が現在のjinjaチャットテンプレートによるレンダリングです。かなり多くの違いがあります!

また、希望する場合にjinjaチャットテンプレートを使わずにOpenAIのHarmonyライブラリを直接使用できるようにする関数も作成しました — 以下のような通常の会話をそのままパースできます:
それからUnslothの encode_conversations_with_harmony 関数を使用します:
harmonyフォーマットにはいくつか興味深い要素が含まれます:
reasoning_effort = "medium"low、medium、highのいずれかを選択でき、これはgpt-ossの推論バジェットを変えます — 一般に高いほどモデルの精度が向上します。developer_instructionsは追加できるシステムプロンプトのようなものです。model_identityはそのままにしておくのがベストです — 編集は可能ですが、カスタムにすると機能するか不確かです。
我々は現在のjinjaチャットテンプレートに複数の問題を発見しました(エコシステム全体で複数の実装が存在します):
関数やツール呼び出しは
tojsonでレンダリングされますが、辞書なら問題ありません。しかし文字列の場合、引用符などの 記号がバックスラッシュでエスケープされます.いくつかの 余分な改行 がjinjaテンプレートの一部境界で入っています。
モデルのツール呼び出しに関する思考は
analysisタグであるべきで、finalタグではありません.他のチャットテンプレートは
<|channel|>finalをまったく利用していないようです — これは最終のアシスタントメッセージに使うべきです。思考のトレースやツール呼び出しには使用してはいけません。
当社のGGUF用チャットテンプレート、BnBおよびBF16アップロード版、すべてのバージョンは修正済みです!例えば、当社の形式とHarmonyの形式を比較すると、文字の違いはありません:

🔢 精度の問題
モデルがBF16で訓練されているため、主にTesla T4やfloat16マシンで複数の精度問題(外れ値やオーバーフロー)が見つかりました。MXFP4はAmpereや古いGPUで実際にはサポートされていないため、Tritonは tl.dot_scaled をMXFP4の行列乗算に使用します。内部で行列を動的にBF16にアップキャストします。
私たちは MXFP4推論ノートブック もTesla T4のColabで作成しました!
ソフトウェアエミュレーションは ネイティブのマイクロスケーリング演算をサポートしないハードウェアアーキテクチャを対象にできます。現状ではそのような場合、マイクロスケール化されたlhs/rhsは事前に bf16 要素型にアップキャストされてからドット計算が行われます、
混合精度の自動キャストデータ型にfloat16を使用すると、しばらくして無限大が発生することがわかりました。これを回避するため、MoE部分はbfloat16で処理し、その後はbfloat16かfloat32のどちらかの精度のままにすることが有効でした。古いGPU(例えばT4)の場合bfloat16サポートがないときはfloat32が使われます。
また、float16マシンではルーターなどの演算の精度をすべてfloat32に変更しています。
🖥️ gpt-ossの実行
以下はモデルの 20B および 120B モデルのバリアント。
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-GGUF
注意: モデルは総サイズより少ないメモリでも動作できますが、この場合推論が遅くなります。最大メモリは最速速度のためだけに必要です。
上記の ベストプラクティスに従ってください。これらは120Bモデルと同じです。
現在はGoogle Colab、Docker、LM Studio、あるいはllama.cppでモデルを実行できます。以下を参照してください:
🐋 Docker:gpt-oss-20b実行チュートリアル
もしすでにDocker Desktopをお使いなら、以下のコマンドを実行するだけで完了します:
✨ Llama.cpp:gpt-oss-20b実行チュートリアル
最新の
llama.cppを GitHub で入手できます。下のビルド手順に従うこともできます。変更してください-DGGML_CUDA=ONから-DGGML_CUDA=OFFGPU がない場合や CPU 推論のみを行いたい場合は。
Hugging Faceから直接プルできます:
(以下をインストールした後に)モデルをダウンロードします
pip install huggingface_hub hf_transfer).
gpt-oss-120bを実行:
当社の1-bit量子化で6+トークン/秒の推論速度を達成するには、少なくとも 66GBの統一メモリ (VRAMとRAMの合計)または 66GBのシステムRAM が必要です。目安として、利用可能なメモリは使用するモデルのサイズに一致するかそれ以上であるべきです。GGUFリンク: unsloth/gpt-oss-120b-GGUF
注意: モデルは総サイズより少ないメモリでも動作できますが、この場合推論が遅くなります。最大メモリは最速速度のためだけに必要です。
上記の ベストプラクティスに従ってください。これらは20Bモデルと同じです。
📖 Llama.cpp:gpt-oss-120b実行チュートリアル
gpt-oss-120bに関しては、最適化された推論のために特にLlama.cppを使用します。
もし フル精度の非量子化バージョンが必要なら、当社の F16 バージョンを使用してください!
最新の
llama.cppを GitHub で入手できます。下のビルド手順に従うこともできます。変更してください-DGGML_CUDA=ONから-DGGML_CUDA=OFFGPU がない場合や CPU 推論のみを行いたい場合は。モデルを直接llama.cppでダウンロードすることもできますが、通常は
huggingface_hubの使用を推奨します。llama.cppを直接使うには、次を実行してください:
--top-k 0.0 \
{% endcode %}
pip install huggingface_hub hf_transfer)UD-Q2_K_XLやその他の量子化バージョンを選択できます。。local_dir = "unsloth/gpt-oss-120b-GGUF",
編集
--threads -1でCPUスレッド数を編集できます、会話モードでモデルを実行し、任意のプロンプトを試してください。--ctx-size--n-gpu-layers 99で何層をGPUにオフロードするかを指定します。GPUがメモリ不足になる場合は調整してみてください。CPUのみの推論の場合はこれを削除してください。
使用する -ot ".ffn_.*_exps.=CPU" コンテキスト長のために262114、 ここ.
🛠️ 生成速度の改善
もし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" は6層目以降のgate、up、downのMoE層をオフロードすることを意味します。
その 最新のllama.cppリリースは 高スループットモードも導入します。使用すると、 llama-parallelです。詳細は ここを参照してください。さらに、 KVキャッシュを4ビットに量子化することもできます 例えばVRAM / RAMの移動を減らすことで、生成プロセスを高速化することができます。
--model unsloth/gpt-oss-120b-GGUF/gpt-oss-120b-F16.gguf \
🦥 Unslothでのgpt-ossファインチューニング
QLoRA の要件: gpt-oss-20b = 14GB VRAM • gpt-oss-120b = 65GB VRAM。
BF16 LoRA の要件: gpt-oss-20b = 44GB VRAM • gpt-oss-120b = 210GB VRAM。
Unslothのgpt-ossファインチューニングは1.5倍速く、VRAMを70%削減し、コンテキスト長を10倍までサポートします。gpt-oss-20bのQLoRAトレーニングは14GB VRAMで収まり、gpt-oss-120bは65GB VRAMで動作します。
⚡チュートリアル:gpt-oss をファインチューニングする方法QLoRA でファインチューニングした gpt-oss モデルを llama.cpp、vLLM、HF などにエクスポート/保存できるようになりました。
gpt-ossファインチューニングのステップバイステップチュートリアルをお読みください:
gpt-oss-20b 無料のUnslothノートブックでgpt-ossをファインチューニング:
推論+会話ノートブック
強化学習(GRPO) gpt-oss RL
2048 ノートブック (公式の OpenAI 例)
Unslothは現在gpt-ossのRLをサポートしています!我々は2つのノートブックを作成しました。詳細はgpt-oss RL用の特定のブログをご覧ください:💾
新機能:gpt-ossトレーニング後のGGUF、vLLMへの保存 llama.cpp, vLLM、または QLoRAでgpt-ossをファインチューニングした後、直接モデルを保存、エクスポート、またはマージして HF
に保存できます — Unslothだけでなく。他にも無料ノートブックを近日公開予定です。 ファインチューニング済みモデルを保存するには、bf16 形式でエクスポートすることもできます、 ベースモデル(gpt-oss のような)を LoRA マージプロセス中に扱います。これにより、 ファインチューニング済みモデルを bf16 形式でエクスポートすることが可能になります.
以前はQLoRAでファインチューニングしたgpt-ossモデルはUnsloth内でのみ実行可能でした。我々はこれを の導入により制限を取り除きました。:
gpt-ossモデルをファインチューニングした後、単一のコマンドでモデルを16ビット形式にマージできます:
もしモデルをマージして直接Hugging Faceハブへプッシュすることを好むなら、次のように実行できます:
model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token=hf_token) 💡効率的なgpt-ossファインチューニングを実現するために 我々はMXFP4が非常に効率的である一方で、gpt-ossのトレーニングをネイティブにサポートしていないことを発見しました。この制限を克服するため、MXFP4レイヤー向けにカスタムトレーニング関数を実装し、これを模倣することで対応しました:
Bitsandbytes NF4量子化。 MXFP4推論を可能にするためにOpenAIのTriton Kernelsライブラリを直接利用しました。ただしファインチューニング/トレーニングに関しては、MXFP4カーネルはバックワードパスをまだサポートしていないためトレーニングは未対応です。我々はTritonへの実装を積極的に進めています!以下のようなフラグがあります: ここW_TRANSPOSE
が前述のようにあり、実装されるべきものです。導関数は重み行列の転置によって計算できるため、転置操作を実装する必要があります。 もしUnsloth以外のライブラリでgpt-ossを訓練したい場合、訓練前に重みをbf16にアップキャストする必要があります。しかしこの方法は、 大幅に増加させます VRAM使用量と訓練時間を最大で! 300%のメモリ使用増加
ALL他のすべての訓練方法では20bモデルの訓練に最低65GBのVRAMが必要ですが、Unslothはわずか14GB VRAMで済みます(-80%)。 両モデルはMoEアーキテクチャを使用しており、20Bモデルはトークンごとに32中4人のエキスパートを選択し、120Bモデルは128中4人を選択します。訓練とリリース時には重みはMXFP4形式で nn.Parameter オブジェクトとして保存され、 nn.Linear
レイヤーとしてではありません。これが量子化を複雑にします。特にMoE/MLPエキスパートは20Bパラメータのうち約19Bを占めます。 を有効にするために、 BitsandBytes オブジェクトとして保存され、 量子化とメモリ効率の良いファインチューニングを可能にするため、これらのパラメータを
レイヤーに変換しました。これにより操作はわずかに遅くなりますが、メモリの限られたGPUでもファインチューニングが可能になるため、有益なトレードオフです。
データセットによるファインチューニングガイド データセットを使いますgpt-ossは推論のみをサポートしていますが、推論でない 75%の推論(reasoning) および 25%の非推論(non-reasoning) を含めて、モデルが推論能力を保持するようにしてください。
データセットでもファインチューニングは可能です。ただしこれは推論能力に影響を与える可能性があります。推論能力を維持したい場合(任意)、直接回答とチェーン・オブ・ソート(思考の連鎖)例の混合を使用できます。少なくともを使用してください、

最終更新
役に立ちましたか?

