DFlash(speculative decoding)をRTX 2080 SUPER 8GBでQwen3.5-35B-A3Bに動かすことに成功

Reddit r/LocalLLaMA / 2026/5/1

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 開発者は、VRAMが限られたRTX 2080 SUPER 8GB環境で、llama.cppにDFlash speculative decodingを導入し、Qwen3.5-35B-A3Bモデルで動作させられたと報告しました。
  • 35B MoEモデルは8GB VRAMに単独で収まらないため、MoEのエキスパートをCPUへオフロードする(-ncmoeの調整)ことと、DFlash用の小型ドラフトモデルを組み合わせることで成立させています。
  • 通常実行(DFlashなし)の性能は約26.8 tokens/sで、DFlashではおよそ35.6–35.8 tokens/sとなり、生成速度は約33–34%向上したとされています。
  • DFlash使用時に重要なチューニングとして、-ncmoeの最適値がベースラインの32から34へ変わる点が示されました。
  • ドラフト長パラメータ(--draft-max)は試行が必要で、速度と受理率は5〜7付近が良好だった一方、より大きい値では速度や受理率が低下しました。
## RTX 2080 SUPER 8GB で Qwen3.5-35B-A3B に対して DFlash の推測デコーディングを動かすことに成功しました。VRAM がかなり限られた環境でも、**DFlash 推測デコーディング**が llama.cpp で動作させられました。これはこの DFlash PR でテストしました:https://github.com/ggml-org/llama.cpp/pull/22105 ビルドテスト済み:```text 67cb0d507 (8942) 

セットアップ:

GPU: RTX 2080 SUPER 8GB モデル: Qwen3.5-35B-A3B Q5_K_M ドラフトモデル: Qwen3.5-35B-A3B-DFlash Q4_K_M バックエンド: CUDA 

メインモデルは 35B MoE の GGUF で、だいたい 24.44 GiB です。なので当然ながら 8GB VRAM には収まりません。コツは MoE エキスパートの CPU オフロード と DFlash を組み合わせることでした。

ベースライン

私の DFlash なしの通常の最良の実行はだいたい:

~26.8 tok/s 

で、概ね:

-ngl 999 -ncmoe 32 -fa 1 -ctk q8_0 -ctv q8_0 --no-mmap -t 5 

-ncmoe 32 が最良のベースラインでした。これより小さい値だと VRAM を使いすぎてしまい、性能も悪化し、これより大きい値だと徐々に速度が低下しました。

DFlash 設定

DFlash では次を使いました:

ターゲットモデル: C:\models\Qwen3.5-35B-A3B-Q5_K_M.gguf ドラフトモデル: C:\models\Qwen3.5-35B-A3B-DFlash-Q4_K_M.gguf 

ドラフトモデルはターゲットに比べてとても小さいです:

DFlash ドラフトサイズ: ~267.8 MiB ドラフトパラメータ: ~474M ドラフト量子化: Q4_K_M 

なぜなら DFlash のドラフトも VRAM を必要とするため、最適な -ncmoe 設定が少し変わりました。通常の実行では -ncmoe 32 が最良でした。DFlash では最適点が:

-ncmoe 34 

最終コマンド

これはテストに使った最終的なコマンドです:

build\bin\Release\llama-speculative-simple.exe ^ -m "C:\models\Qwen3.5-35B-A3B-Q5_K_M.gguf" ^ -md "C:\models\Qwen3.5-35B-A3B-DFlash-Q4_K_M.gguf" ^ --dflash ^ -p "クイックソート、マージソート、ヒープソート、二分探索の完全な Python 実装を書いてください。簡潔なコメントを入れてください。コードのみを書いてください。" ^ -n 512 ^ --draft-max 6 ^ -cd 512 -c 4096 ^ --temp 0 --top-k 1 --seed 42 ^ -ngl 999 -ngld 99 -ncmoe 34 ^ -fa on ^ -ctk q8_0 -ctv q8_0 ^ -ctkd q8_0 -ctvd q8_0 ^ --no-mmap ^ -t 5 

結果

典型的な DFlash の結果:

encoded 39 tokens in ~1.0 sec decoded 514 tokens in ~14.3-14.5 sec speed: ~35.6-35.8 tok/s n_draft = 6 n_predict = 514 n_drafted = 430 n_accept = 427 accept = 99.302% 

ベースラインと比較すると:

通常: ~26.8 tok/s DFlash: ~35.6-35.8 tok/s 増加: ~1.33x 

つまり、8GB の RTX 2080 SUPER で 生成速度が約 33–34% 改善しました。

ドラフト長の調整

--draft-max をいくつか試しました:

draft-max 5: ~34.6 tok/s, accept ~97.9% draft-max 6: ~35.6-36.9 tok/s, accept ~99.3% draft-max 7: ~35.7 tok/s, accept ~95.8% draft-max 8: ~34.1 tok/s, accept ~94.7% draft-max 12: ~31.5 tok/s, accept ~83.4% 

--draft-max 6 が最適でした。値を大きくしても受理率が下がるため、良くなりませんでした。

使用した量子化

ターゲットモデル:

Qwen3.5-35B-A3B-Q5_K_M.gguf ファイルサイズ: 24.44 GiB 種別: Q5_K_M 

内部的には、ターゲット GGUF は次を報告します:

f32: 301 tensors q8_0: 312 tensors q5_K: 80 tensors q6_K: 40 tensors 

DFlash のドラフトモデル:

Qwen3.5-35B-A3B-DFlash-Q4_K_M.gguf ファイルサイズ: 267.80 MiB 種別: Q4_K_M 

内部的には、ドラフト GGUF は次を報告します:

f32: 34 tensors q4_K: 49 tensors q6_K: 8 tensors 

KV キャッシュ:

ターゲット KV: q8_0 / q8_0 ドラフト KV: q8_0 / q8_0 

ドラフト KV の量子化を低くすることも試しましたが、あまり効果はありませんでした:

ドラフト KV q8_0/q8_0: ~35.8 tok/s ドラフト KV q4_0/q4_0: ~35.6 tok/s 

そのため、ドラフト KV は q8_0 のままにしました。

メモ / 注意点

私がテストした PR/build には、パフォーマンス要約の表示にいくつか奇妙なタイミング出力があり、総時間がマイナスになったり、未計上のメモリ値が変だったりしています。

そのため、壊れている要約の項目は無視して、安定している部分に注目しました:

decoded tokens / seconds accept rate n_draft / n_accept 

生成されたテキストからも、実際に DFlash が使われていることが分かります:

n_draft = 6 n_drafted = 430 n_accept = 427 accept = 99.302% 

また、ドラフトモデルは GPU に完全にロードされていました:

DFlash ドラフトモデルバッファサイズ = ~267.80 MiB GPU にオフロードされた層 9/9 

結論

DFlash はここではかなり役に立ちました。

私の環境:

RTX 2080 SUPER 8GB Qwen3.5-35B-A3B Q5_K_M DFlash ドラフト Q4_K_M MoE CPU オフロード llama.cpp PR #22105 

速度が:

26.8 tok/s 

から:

35.6-35.8 tok/s 

現在の最適設定:

-ncmoe 34 --draft-max 6 -fa on -ctk q8_0 -ctv q8_0 -ctkd q8_0 -ctvd q8_0 --no-mmap -t 5 

この結果にはかなり満足しています。特に、GPU の VRAM は 8GB しかないことを考えると。

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