RTX 5090 1枚でvLLM実行:Qwen3.6 27B NVFP4 + MTPに200kコンテキストが動作

Reddit r/LocalLLaMA / 2026/5/6

📰 ニュースDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • この記事は、NVIDIA RTX 5090(32GB VRAM)1枚でQwen3.6 27B NVFP4モデルをvLLM 0.20.1.devにより動作させた検証結果を、設定値と観測結果付きで共有しています。
  • vLLMはflashinferのアテンション、fp8_e4m3のKVキャッシュ、compressed-tensors量子化を使い、MTPによる推測デコードを「推測トークン3個」で有効化しています。
  • vLLMのエンドポイントはmax_model_len=230,400を案内していますが、著者は繰り返し実行で安定して確認できたのは200kまでであり、それ以上の上限は主張しないとしています。
  • 起動ログではFlashInferのNVFP4 GEMMカーネルやKVキャッシュ利用可能メモリなどが確認でき、サービング時のGPUメモリ使用量は約30GBでした。
  • ベンチマークはllama-benchyで、長文入力として『War and Peace』を使い、レイテンシ重視(generation latency mode)かつ同時実行数1で長コンテキスト挙動を中心に評価しています。

私はRTX 5090でQwen3.6 27B NVFP4をしばらくテストしたので、数値を共有したいと思いました。最近の良い投稿の多くが、48GBカードやFP8、あるいはllama.cpp/GGUFあたりに寄っているように見えたためです。

これは「最適な構成」を主張するものではありません。もっと言うと、こちらで動いたのがこれで、正確なパラメータはこれで、数値はこうでした。そして、他の5090オーナーが推測に時間をかけずに済むなら役に立つかもしれない、という話です。

要約すると:

  • 単体のRTX 5090、32GB VRAM
  • モデル: Peutlefaire/Qwen3.6-27B-NVFP4
  • vLLM: 0.20.1.dev0+g88d34c640.d20260502
  • Torch: 2.13.0.dev20260430+cu130
  • ドライバ: 595.58.03
  • 量子化: compressed-tensors
  • 注意(Attention)バックエンド: flashinfer
  • KVキャッシュ: fp8_e4m3
  • MTPを有効化(推論を3つのスペキュレーティブトークンで行う)
  • テキストのみモード
  • 私が納得して言える公開主張: 200kコンテキスト、220k/262kではない

vLLMのモデルエンドポイントは max_model_len: 230400 と報告しますが、ベンチマークは200kコンテキスト深度までしか実施していません。実際に繰り返し実行で検証できたのが200kなので、意図的に200kの主張に留めています。

主要なvLLM引数は以下です:

bash vllm serve Peutlefaire/Qwen3.6-27B-NVFP4 \ --host 0.0.0.0 --port 8082 \ --safetensors-load-strategy=prefetch \ --tensor-parallel-size 1 \ --attention-backend flashinfer \ --performance-mode interactivity \ --language-model-only \ --skip-mm-profiling \ --kv-cache-dtype fp8_e4m3 \ --gpu-memory-utilization 0.95 \ --max-model-len 230400 \ --max-num-seqs 1 \ --max-num-batched-tokens 4096 \ --enable-chunked-prefill \ --enable-prefix-caching \ --no-disable-hybrid-kv-cache-manager \ --reasoning-parser qwen3 \ --default-chat-template-kwargs '\''{"enable_thinking": false}'\'' \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --quantization compressed-tensors \ --speculative-config '\''{"method":"mtp","num_speculative_tokens":3}'\'' \ --trust-remote-code

起動ログには、私が見たかった重要な部分がありました:

  • Using FlashInferCutlassNvFp4LinearKernel for NVFP4 GEMM
  • 利用可能なKVキャッシュメモリ: 8.3 GiB
  • リクエストあたり 230,400 トークン時の最大同時実行数: 1.00x

実行後の nvidia-smi では、使用量がだいたい 30478 MiB / 32607 MiB で、vLLM EngineCoreプロセスが 29998 MiB ほど使っていました。

llama-benchy の数値

これらはすべて次の条件で行いました:

  • llama-benchy 0.3.7
  • --pp 2048
  • --tg 480
  • --latency-mode generation
  • --skip-coherence
  • concurrency 1
  • 長文コンテキストソースとして「戦争と平和」テキスト

コンテキスト・ラダー

context depth prefill tok/s generation tok/s TTFT
0 28470 86.3 0.2s
1k 20901 94.5 0.3s
5k 14593 82.3 0.6s
10k 12805 88.8 1.0s
20k 10564 88.3 2.2s
50k 7277 89.0 7.3s
100k 4834 62.7 21.2s
150k 3617 75.5 42.1s
200k 2893 63.4 69.9s

その後、--exit-on-first-fail を付けた別の10回実行による安定性チェックを200kで行いました。たまたま1回だけ上手くいったのではないことを確認するためです。

200k 安定性ラン

pp=2048tg=480depth=200000runs=10、キャッシュなし:

  • 10/10回完了
  • 終了ステータス 0
  • 平均 prefill: 2883 tok/s
  • 平均 generation: 73.6 tok/s
  • generation 標準偏差: 13.5 tok/s
  • 平均 TTFT: 70.2s
  • 総実行時間: 12:48.79

実行ごとの generation 速度:

text 73.04, 75.12, 63.24, 75.94, 59.02, 110.71, 64.11, 68.18, 72.55, 74.37 tok/s

なので、少ないスイープの結果から200kで93 tok/sだけをつまみ上げるようなことはしません。この構成でのより正直な数字は、おそらく200kでの generation は実行によって多少変動しますが、だいたい65〜75 tok/sあたりです。

プレフィックスキャッシュの挙動

また、プレフィックスキャッシュを個別にテストしました。200kにて:

run prefill tok/s generation tok/s TTFT
cold 2911 65.2 68.8s
warm 761 59.6 2.8s

warmキャッシュのprefillは、cold時のprefillと単純には比較できませんが、TTFTの低下が重要なポイントです。ローカルでのコーディング/エージェントのワークフローのように、大きいプレフィックスを何度も再利用する場合に、実際に「体感で」違いが出るのはここです。

MTP テレメトリ

ベンチマーク実行中のvLLMログから:

  • 平均MTP受理長: 2.28
  • 平均ドラフト受理率: 42.7%
  • 観測された最大GPU KVキャッシュ使用率: 88.0%

受理率はかなり変動したので、num_speculative_tokens=3ではなくnum_speculative_tokens=2のほうが良い結果になる人がいるのか気になっています。ここでは安定していたので3から始めましたが、それが最適だとは主張しません。

注意点(Caveats)

はっきりと言っておく価値のあることがいくつかあります:

  • ここでは精度(accuracy)のベンチマークは実行していません。パフォーマンス/安定性のみです。
  • vLLMは、NVFP4のグローバルスケールが精度を下げる可能性があると警告します。コーディング品質を重視するなら、自分で評価してください。
  • Mambaキャッシュの整列モードでのプレフィックスキャッシュは、vLLMではまだ実験的(experimental)として扱われています。
  • FlashInfer + spec decode により、CUDAGraphモードがピースワイズで強制されます。
  • ビジョン/マルチモーダルはテストしていません。これはテキストのみです。
  • 220kまたは262kは検証していません。この実行で私が自信を持って言えるのは200kです。

現時点では、この5090のローカル構成としてかなり満足しています。完璧ではありませんし、すべてのクラウドモデルに取って代わると言いたいわけでもありませんが、長時間のローカルコーディングセッションでは、ようやく「買った目的どおりの動きをしてくれている」感じがします。

もし他の誰かが5090でQwen3.6 27Bを動かしていて、とくにvLLMならNVFP4やFP8を使っているなら、パラメータとMTP設定をぜひ比較したいです。加えて、MTPでのmax_num_batched_tokensをより綺麗に(適切に)設定できる人がいるかも気になります。というのも、vLLMは4096が最適ではない可能性があると警告しているからです。

私は、元の llama-benchy のJSON/stdout/stderrと、完全なvLLMログをローカルに保存しています。必要なら、全監査(audit trail)を確認したい人向けにどこかにアップロードできます。


私はボットです。この操作は自動的に実行されました。

submitted by /u/Maheidem
[リンク] [コメント]