24GB RTX 3090 で GPT-OSS-20B を実行する
Posted by MktFeed.ai | 作成日時: | 更新日時:
24GB RTX 3090 で GPT-OSS-20B を実行する
- MXFP4 と Triton を使用して GPT-OSS-20B を実行する
- LangChain エージェントツールチェーンと RAG を使用してローカルシステムと対話する
- 24GB RTX 3090 で大規模モデルを実行する方法について説明する ```
24GB RTX 3090 で GPT-OSS-20B を実行する — MXFP4、Triton、そして RAG を備えた LangChain エージェントツールチェーン
最近、GPT-OSS-20B のチェックポイントがオープンモデルエコシステムに登場し、皆さんと同じように私も疑問に思いました。「20B モデルを単一のコンシューマGPUで実行できるだろうか?」と。簡潔に答えると、「はい」です — MXFP4 + Triton + 慎重なエンジニアリングによって可能です。
RTX 3090 での MXFP4
この記事では、NVIDIA RTX 3090 (24GB) で GPT-OSS-20B をローカルで実行する方法、BF16 では大きすぎる理由、そしてモデルを LangChain エージェントにラップして RAG を実行し、Python を実行し、シェルコマンドを実行する方法(すべてローカルで)を説明します。
なぜ BF16 だけでは 3090 では動作しないのか
FP16/BF16 の大規模モデルは、通常、20B のチェックポイント(ウェイト + アクティベーションバッファ + KV キャッシュ)に 40GB 以上のメモリを必要とします。24GB の RTX 3090 では、それを快適に保持することはできません。そこで、MXFP4(推論向けに最適化された混合 4 ビット形式)が重要になります。モデルサイズを劇的に削減することで、大規模モデルをコンシューマ GPU にロードできるようになります。ただし、MXFP4 は効率的な実行のために特殊なカーネルを必要とするため、Triton が必要です。
スタック
- モデル:GPT-OSS-20B(MXFP4 量子化済みチェックポイント)
- GPU:NVIDIA RTX 3090 (24 GB)
- ライブラリ:PyTorch、Hugging Face Transformers、Triton
- エージェントオーケストレーション:LangChain(カスタム LLM ラッパー + ツール)
- RAG:FAISS ベクトルストア + SentenceTransformers エンベディング
インストール
- リポジトリのクローン:
git clone ...(具体的なコマンドは省略) - Hugging Face からモデルファイルのダウンロード(
openai/gpt-oss-20bから、originalとmetalフォルダを除くすべてのファイル)をローカルに配置 - Triton カーネルのインストール(MXFP4 に必要):
pip install triton - 最新の Transformers のインストール(MXFP4 サポートのため dev ブランチ):
pip install git+https://github.com/huggingface/transformers.git - 互換性のある PyTorch のアップグレードまたはインストール:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118(CUDA バージョンに合わせて適宜変更) - その他の依存関係のインストール(FAISS、LangChain、sentence-transformers など):
pip install faiss sentence-transformers langchain
注:MXFP4 は、パフォーマンスのために Triton 対応カーネルを必要とする形式です。Triton がないと、エラーが発生します。
コードの動作
以下は、セットアップの中核と、各主要ブロックの機能です。
- モデルの読み込みとメモリチューニング:ローカルの MXFP4 チェックポイントからモデル/トークナイザーを読み込みます。
PYTORCH_CUDA_ALLOC_CONFは、PyTorch が GPU メモリの断片化と割り当てを管理するのに役立ちます(大規模モデルに有用)。 - LangChain 用のカスタム LLM ラッパー:
CustomLLMGptOssクラスは LangChain の LLM インターフェースを継承します。システム/ユーザーメッセージを使用してシンプルなチャットスタイルのプロンプトを用意します。トークナイザーのチャットテンプレートを使用してプロンプトをエンコードします。OOM を回避するためにループ内でトークンを生成します(max_new_tokensを小さく設定)。トークンを収集してデコードして最終的な文字列を生成します。このラッパーは、生成動作(貪欲サンプリング、メモリフットプリントを削減するための小さな生成ステップ)を調整しながら、LangChain にモデルを公開します。 - LangChain エージェントに統合されたツール
ExecutePythonCode:モデルの出力から Python コードを抽出し、サンドボックス化された方法で実行し、stdout/stderr をキャプチャします。単純なフォールバックとして、不足している pip モジュールを自動インストールすることもできます。ExecuteLinuxShellCommand:シェルコマンドを実行し、出力を返します。これらのツールにより、エージェントはマシン上で動作し、コードを実行したり、ファイルを検査したり、シェルコマンドを呼び出したりできます。その後、結果を次の推論ステップで使用します。
- RAG(Retrieval-Augmented Generation):SentenceTransformers/all-mpnet-base-v2 エンベディングを使用して、FAISS インデックス(ローカルファイル)がロードされます。エージェントは、このリトリーバーにクエリを実行して、より正確にクエリに答えるための関連コンテキストチャンクを取得します。
ワークフロー
LangChain JSON エージェント(GPT-OSS-20B によってバックアップ)は、外部情報が必要かどうか、またはコードを実行する必要があるかどうかを判断します。必要に応じて、ツール(ExecutePythonCode、ExecuteLinuxShellCommand)のいずれかを呼び出すか、FAISS を介してコンテキストを取得します。ツールは出力を返し→エージェントはそれを組み込み→最終的な回答が準備できるまで繰り返します。エージェントは最終的な回答(およびオプションで実行履歴)を返します。これにより、システムは、マシンの計画の一部を実際に実行できるローカル RAG + ツール対応アシスタントになります。
使用例
ExecutePythonCode ツールは、生成されたコードを実行し、コードテキストだけでなく、実際の出力も返します。
安全と実践的な注意事項
ExecutePythonCode とシェルツールは強力で危険です。安全で制御された環境でのみ実行してください。MXFP4 チェックポイントは既に量子化されているため、元の BF16/FP16 ウェイトがないと再量子化できません。注:これは、WSL で実行している場合、現在 Windows では動作しません。
結論
このリリースは、MXFP4 と Triton を使用することで、オープンソースの 20B モデルがクラスタを必要としなくなったことを示しています。単一の 24GB RTX 3090 で、高度な推論タスクを実行し、LangChain ツールを介してローカルシステムと対話できます。
作成者:Emanuel Bierschneider
Original URL: https://medium.com/@emanuel.bierschneider/running-gpt-oss-20b-on-a-24gb-rtx-3090-mxfp4-triton-and-a-langchain-agent-toolchain-with-rag-4d5617286a0e