- llama-cpp の
--cpu-moe オプションを活用し、MoEエキスパートレイヤーをCPUで処理、AttentionレイヤーのみをGPUにオフロードすることで、5〜8GB VRAMで高速なプリフィル性能を実現
- GPUには KVキャッシュ、Attentionの重み・活性値、ルーティングテーブル、LayerNorm など の非エキスパートパラメータのみを常駐させるため、メモリ使用量が低い
- RTX 3060Ti級のGPUと 64GB〜96GBのシステムRAM でも120Bモデルを無理なく動かせ、BF16対応GPU(RTX 3000+)で最適な性能を発揮
- 5GB VRAM使用時はトークンあたり8.15ms(122.66トークン/秒)を記録し、8GB VRAM使用時は7.44ms(134.44トークン/秒)まで改善
- 120Bアーキテクチャはコンシューマー向けハードウェアに最適化された設計で、GPUリソースが不足する環境でも高速実行が可能
CPU-MOEとGPUオフロード構成
--cpu-moe オプションでエキスパート(MoE)レイヤーをすべてCPUで処理
- 例:
--n-cpu-moe 36 → 36個のMoEブロックをすべてCPU実行
- 必要に応じて一部のMoEのみをGPUへ移し、性能を調整可能
- GPUには以下のみを常駐させてVRAMを節約
- KVキャッシュ(シーケンス)
- Attentionの重みと活性値
- ルーティングテーブル
- LayerNormおよびその他の非エキスパートパラメータ
- MoEの重みはGPUに常駐しないため、大規模MLPパラメータの負担がない
メモリおよびハードウェア要件
- GPU: 5〜8GB VRAMで十分(例: RTX 3060Ti)
- GPUはBF16対応時に最適(RTX 3000シリーズ以降)
- システムRAM: 最低64GB、理想的には96GB
- Linuxの
mmap を活用し、モデル全体がメモリに収まらなくても「ホット」なエキスパートレイヤーはメモリに維持
性能指標
5GB VRAM環境
- プロンプト処理: 8.15ms/トークン(122.66トークン/秒)
- 推論: 55.44ms/トークン(18.04トークン/秒)
8GB VRAM環境 (--n-cpu-moe 36, 残りはGPU)
- プロンプト処理: 7.44ms/トークン(134.44トークン/秒)
- 推論: 39.03ms/トークン(25.62トークン/秒)
22GB VRAM環境(MoEの一部をGPU)
- プロンプト処理: 6.13ms/トークン(163.01トークン/秒)
- 推論: 32.45ms/トークン(30.82トークン/秒)
結論
- GPT-OSS-120Bの設計は、コンシューマー向けハードウェアでも大規模モデルを高速実行できるよう最適化されている
- VRAM使用量を抑えつつ速度を維持するCPU-MOE構成により、GPUリソースが限られた環境に特に適している
主要な質問と回答
Q1. この設定で実際のVRAM使用量はどのくらいですか?
- 元投稿者: MoEをすべてCPU実行にすると約5GB VRAMで、AttentionレイヤーのみをGPUに載せる
- 補足説明: GPUにはKVキャッシュ、Attentionの重み・活性値、ルーティングテーブル、LayerNormのみが常駐
Q2. RAMは最低どれくらい必要ですか?
- 元投稿者: 最低64GB、理想的には96GBを推奨
- 理由: Linuxの
mmap により「ホット」なエキスパートレイヤーをメモリに維持し、モデル全体を読み込まなくても高速アクセスが可能
Q3. 一部のMoEレイヤーをGPUへ移すと速度は大きく向上しますか?
- 元投稿者: わずかに速くなる可能性はあるが、大きな差はない
- 例:
- MoEをすべてCPU: プロンプト134トークン/秒、推論25トークン/秒
- MoEを8個GPU: プロンプト163トークン/秒、推論30トークン/秒
- VRAM使用量は22GBに増加
Q4. どのGPUが適していますか?
- 元投稿者: RTX 3060Ti以上で十分、BF16対応(RTX 3000+)を推奨
- 理由: MoE以外のすべてのレイヤーがBF16で動作するため
Q5. コマンド設定はどうしますか?
まだコメントはありません。