RTX 5070 Ti+9800X3DでQwen3.6-35B-A3Bを128Kコンテキスト79t/s:最重要は`--n-cpu-moe`

Reddit r/LocalLLaMA / 2026/4/18

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • RTX 5070 Ti(16GB)でllama.cppを使いQwen3.6-35B-A3Bをベンチマークした結果、一般的な`--cpu-moe`はMoEモデルではVRAMを十分に使いきれないと指摘しています。
  • 主要なチューニング要点は`--n-cpu-moe N`で、最初のN層のMoEエキスパートだけをCPUに残し、それ以外をGPU側に置くことでVRAM使用効率とスループットが改善されます。
  • `--cpu-moe`では生成51.2 t/s・VRAM使用約3.5GBだったのに対し、`--n-cpu-moe 20`では生成78.7 t/s・VRAM使用約12.7GBまで向上しました。
  • `-np 1`と128Kコンテキストを有効にすると、プロンプトスループット(最大135.8 prompt t/s)が伸びつつ、128K化のコストは小さいとしており、生成は約79.3 t/sに到達しています。
  • 動作するllama-serverの起動コマンド例を提示し、`-np`が自動で4スロットになってメモリを浪費しうるといった実務上の落とし穴も述べています。

家庭用のハードウェアでQwen3.6-35B-A3Bをチューニングするのに、一晩中使いました。面白い余談:Claude Opus 4.7($20のサブだけ)に、設定を組ませて、サーバーをバックグラウンドで起動させて、ベンチマークを回し、llama.cppログからVRAMの分割を読み取らせ、さらにチューニングを反復しました。要するに全部をほぼ自律的にやってくれました。私がやったのは、持っているハードウェアと実行したい内容を伝えるだけです。

共有したいのは、よくある --cpu-moe のアドバイスが、16GBのGPUでは速度のうち54%を“取りこぼす”ままになっていることです。

発見したこと — --cpu-moe vs --n-cpu-moe N

みんな --cpu-moe を使っていて、MoEのエキスパートをすべてCPUに押し出しています。16GB GPUで22GBのMoEモデルを使うと、使われるのはVRAMのたった~1.9GBだけになり、残りの~12GBはアイドルになります。

--n-cpu-moe N は、最初のN層のエキスパートをCPUに置き、残りをGPUに配置します。40層モデルで N=20 にすると、VRAMの分割が適切に行われます。

ベンチマーク(300トークン生成、Q4_K_M)

Config Gen t/s Prompt t/s VRAM used
--cpu-moe(baseline) 51.2 87.9 3.5 GB
--n-cpu-moe 20 78.7 100.6 12.7 GB
--n-cpu-moe 20 + -np 1 + 128K ctx 79.3 135.8 13.2 GB

生成速度 +54%、プロンプト速度 +54% を素朴な --cpu-moe に対して達成しました。128Kのコンテキストに飛ぶのは、基本的に -np 1 によって再カレンント状態のメモリが落ちるため“ほぼ無料”です。

動く起動コマンド

llama-server.exe ^ -m "Qwen3.6-35B-A3B-UD-Q4_K_M.gguf" ^ --n-cpu-moe 20 ^ -ngl 99 ^ -np 1 ^ -fa on ^ -ctk q8_0 -ctv q8_0 ^ -c 131072 ^ --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 ^ --presence-penalty 0.0 --repeat-penalty 1.0 ^ --reasoning-budget -1 ^ --host 0.0.0.0 --port 8080 

これがUnslothの「Precise Coding」サンプリングプリセットです。一般用途なら:--temp 1.0 --presence-penalty 1.5

ぶつかった“落とし穴”(まあOpusが当てて直してくれたけど)

  • -np はデフォルトでauto=4スロット。 再カレンント状態にメモリを浪費します(約190MB)。シングルユーザー構成(OpenCodeなど)では -np 1 を設定してください。
  • --fit-target ここでは役に立ちません-ngl 99 + --n-cpu-moe N ですでに決定的な制御が得られます。
  • -ctk q8_0 -ctv q8_0 はほぼロスレスで、fp16よりKVキャッシュを半分にします。128K ctxのコストは追加でVRAM 1.36GBだけです。
  • Qwen3.6はハイブリッドアーキテクチャです — 通常の注意機構の層が標準で10層、残り40層はGated Delta Net(再カレンント)です。そのためKVメモリが非常に小さくなります。

GPUに合わせてNを調整する方法

GPU上の各MoE層は約530MBのVRAMを消費します。MoEではない重みは約1.9GBで固定です。40層モデルの場合:

GPU VRAM 推奨 N
8 GB --cpu-moe のまま
12 GB N=26
16 GB N=20(おすすめ)
24 GB N=8(ほぼ全部収まる)

最初は控えめに始め、長いコンテキストの生成中にVRAMを監視し、その後、VRAMの余裕が約2GBになるまで N を2〜3ずつ下げていきます。

TL;DR

--cpu-moe--n-cpu-moe 20 に置き換え、-np 1 を追加すると、5070 Tiで79 t/s + 128K contextが出ます。9800X3DのV-CacheがCPU側を難なく支えます。

そして、$20 ProサブのClaude Opus 4.7は、こうした“ハードウェアチューニングループ”をエンドツーエンドで回すのに、今では本当に十分な出来です。手取り足取りなしで、サーバーをバックグラウンド起動→ログを解析→反復、ができます。ちょっとワイルド。

他の構成でも比較テストしたいので、必要なら試します。

submitted by /u/marlang
[link] [comments]