Claudeはコードで調理していましたが、私はこの投稿を自分で、原始人スタイルで書きました。Qwen3.5-122Bで遊びたかったのですが、統一されたメモリシステムがないので対応できず、15 tok/sはかなりきつかったです。23 tok/sもまだ厳しいものの、ストリーミング応答では正直かなり目に見えて速くなります。
Tl;dr:
- 過去Nトークンの間に、どのエキスパートが最も頻繁にルーティングされるかを追跡します。これらの「頻繁にルーティングされる」エキスパートをVRAMにロードすることで得られる処理速度の向上が、システムRAM(コールド)からVRAM(ホット)へエキスパートテンソルを転送する際のレイテンシ増加を上回るだろう、という賭けをします。Nトークンごとに繰り返し、同じことを行います。
まず結果です:
- 全CPUエキスパートのベースラインに対して:
- +44.8% トークン生成(15.65 tok/s -> 22.67 tok/s)
- プロンプト処理の回帰なし
- 同等のVRAMコミット量に対する、層ベースのオフロードに対して:
- +26.8% トークン生成(17.87 tok/s -> 22.67 tok/s)
- プロンプト処理がごくわずかに遅い
ベースライン:すべてのエキスパートをCPUへオフロード(LLAMA_ARG_OVERRIDE_TENSOR=exps=CPU)
- プロンプト処理(tok/s, n=2928):514.93、534.64、531.26
- トークン生成(tok/s, n=約300):15.60、15.67、15.69
部分層オフロード(22.6 GB VRAM使用):GPUに8層をロード(LLAMA_ARG_N_CPU_MOE = 40)
- プロンプト処理(tok/s, n=2929):556.42、581.73、618.08
- トークン生成(tok/s, n=約300):17.93、17.81、17.87
ホットエキスパートキャッシュ(22.2 GB VRAM使用):VRAMキャッシュに44エキスパート枠(LLAMA_ARG_MOE_HOT_K = 44、LLAMA_ARG_MOE_HOT_REBALANCE_INTERVAL=60、LLAMA_MOE_HOT_PP_BYPASS_N_TOKENS=64)
- プロンプト処理(tok/s, n=2929):557.18、542.76、546.77
- トークン生成(tok/s, n=約300):22.26、22.97、22.77
セットアップ:
- RTX 4090 24GB + Ryzen 9 7950X 96GB
- bartowskiのQwen3.5-122B-A10B Q4_K_L + bf16 vision mmproj
- KV Cache 131Kトークン @ Q8_0/Q8_0
- プロンプト処理のために、ubatch=3072 & batch=3072
詳細はこのリポジトリへ(現時点ではコードのみ、バイナリはまだ調理中):https://github.com/ParmesanParty/llama.cpp
[link] [comments]




