Qwen3-Coder-Next 80Bを3モードで回す:BF16 CPU / IQ4_NL Hybrid / nvfp4 GPU実測比較
Qwen3-Coder-Next(約80B MoE)をBF16 CPU推論(7.8 tok/s)、IQ4_NL Hybrid GPU offload(59-85 tok/s)、nvfp4 GPU(17-100 tok/s)の3構成で実測。Expert Offloadの速度ペナルティ定量化とコーディング品質評価を含む。
背景
Qwen3-Coder-Nextは約80BパラメータのMoEコーディング特化モデル。コード生成・レビュー・セキュリティ監査に強く、ローカルコーディングアシスタントとして期待できる。
問題は実行方法の選択肢が多すぎること。BF16無量子化のCPU推論、IQ4_NLのHybrid GPU offload(Expert CPUオフロード)、nvfp4のフルGPU推論。それぞれ速度・品質・VRAM消費が異なる。同一環境で3モード全てを実測し、用途別の選択基準を出した。
目的
- BF16 CPU推論の速度と品質を確認(精度最優先モード)
- IQ4_NL Hybrid構成でExpert Offloadの速度ペナルティを定量化
- nvfp4 GPU推論のスループットを計測
- コーディングタスクでの品質評価
実験環境
| 項目 | 仕様 |
|---|---|
| CPU | AMD EPYC 9175F(Zen 5, 16C, L3 512MB) |
| GPU | NVIDIA RTX PRO 6000 Blackwell Max-Q(96GB VRAM) |
| メモリ | DDR5-6400 768GB(12ch) |
| OS | Ubuntu 24.04 LTS |
3構成の概要
| 構成 | Runtime | 量子化 | Expert配置 | ctx |
|---|---|---|---|---|
| A: CPU BF16 | llama.cpp | BF16(無量子化) | 全CPU | 16k |
| B: Hybrid offload | ik_llama.cpp | IQ4_NL | Expert=CPU, Attn=GPU | 65k |
| C: GPU nvfp4 | vLLM | nvfp4 | 全GPU | 32k |
結果
構成A: BF16 CPU推論(th=13, ctx=16k)
| 指標 | 実測値 |
|---|---|
| PP速度(短prompt) | 33.37 tok/s |
| PP速度(287トークン) | 117.40 tok/s |
| TG速度(持続) | 7.59 tok/s |
| TTFT(287トークン) | 約2.58秒 |
2,233トークンの長い生成でもスループットは一定。KV cacheをq8_0にすることでメモリ圧を抑制。
構成B: IQ4_NL Hybrid(Expert CPU offload, ctx=65k)
Run A: exps=CPU(Expert重みをCPUに配置)
| 指標 | 実測値 |
|---|---|
| GPU buffer(weights) | 1,403 MiB |
| CPU buffer(weights) | 41,472 MiB |
| graph_splits | 98 |
| TG速度(加重平均) | 58.94 tok/s |
| PP速度(代表値) | 761-1,120 tok/s |
Run B: exps=CPUなし(全重みGPU)
| 指標 | 実測値 |
|---|---|
| GPU buffer(weights) | 42,875 MiB |
| graph_splits | 2 |
| TG速度(加重平均) | 85.36 tok/s |
| PP速度(代表値) | 880-3,572 tok/s |
Expert Offloadの速度ペナルティ: -31%(58.94 → 85.36 tok/s)
構成C: nvfp4 GPU(vLLM, ctx=32k)
| 指標 | 実測値 |
|---|---|
| TG速度(安定時) | 17-100 tok/s(変動大) |
| PP速度 | 17-669 tok/s(バースト時) |
vLLMのローリング平均ログのため、値の変動が大きい。安定的な生成時は58-100 tok/s程度。
3構成比較サマリ
| 構成 | TG速度(tok/s) | VRAM使用 | 品質 | 用途 |
|---|---|---|---|---|
| A: BF16 CPU | 7.59 | 0 | 最高 | 精密レビュー・監査 |
| B: Hybrid exps=CPU | 58.94 | ~3GB | 良好 | 通常コーディング |
| B: Hybrid 全GPU | 85.36 | ~43GB | 良好 | 高速コーディング |
| C: nvfp4 GPU | 58-100 | ~22GB | 良好 | vLLM統合環境 |
ライブ実演動画
Qwen3-Coder-Nextの実際の出力品質を確認するため、リアルタイム実行を撮影しました。以下の動画はコード生成と論理説明を行っている様子を示しています:
この実演では以下を確認できます:
- トークン生成の様子をリアルタイムで見ることで、「CPU推論が動いている」という実感が得られます
- トークン生成の内容を確認できます
考察
BF16 CPU推論の価値
7.59 tok/sは対話用途には遅いが、コードレビューやセキュリティ監査では十分。BF16は量子化劣化がゼロのため、SQLインジェクション検出やパスワード平文リスクの指摘など、精密な判断が求められるタスクで信頼性が高い。
12チャネルDDR5-6400の帯域がBF16の巨大データ転送を支えており、Zen 5のAVX-512 BF16ネイティブ演算が効いている。
Expert Offloadの31%ペナルティ
exps=CPUはVRAMを40GB以上節約する代わりに、生成速度が31%低下する。graph_splitsが98(全GPUでは2)に増加しており、CPU-GPU間の頻繁なデータ転送が原因。
59 tok/sでも十分高速だが、VRAMに余裕がある場合は全GPUロードの方が明確に有利。Expert Offloadは「VRAMが足りない時の妥協策」であり、速度最適化の手段としては向いていない。
コーディング品質
BF16での評価:
- セキュリティ監査: SQLi脆弱性、平文パスワードリスクを正確に検出し、修正コードとユニットテストを提供
- ハルシネーション制御: スペック外の質問に対して「NOT IN SPEC」と正しく拒否
- 複雑なロジック: Django要件の90%を満たすが、マルチテナント安全性の一部を見落とす。高品質なドラフト生成器 + エキスパートレビュー向け
感想
3モードの使い分けが明確になった:
- 精密作業(BF16 CPU): セキュリティ監査、最終レビュー。速度は犠牲にするが量子化劣化ゼロ
- 通常コーディング(Hybrid / GPU): 日常の開発作業。59-85 tok/sで体感的に速い
- vLLM統合(nvfp4): tool-call-parser対応、prefix caching、API統合が必要な場合
Expert Offloadの31%ペナルティは想像より大きかった。「VRAMに載らないから仕方なく使う」設定であることが実測で確認できた。
再現方法
BF16 CPU
podman run --rm -it \
-p 8081:8080 --shm-size 16g --cap-add=SYS_NICE \
-v "$MO":/models:Z compute.home.arpa/llamacpp-zen5:qwen3-coder-next \
-m /models/.../BF16/Qwen3-Coder-Next-BF16-00001-of-00004.gguf \
--cache-type-k q8_0 --cache-type-v q8_0 \
--flash-attn on --ctx-size 16384 \
--parallel 1 --threads 13 --threads-batch 13 \
--batch-size 2048 --ubatch-size 512 \
--jinja --host 0.0.0.0 --port 8080
IQ4_NL Hybrid(Expert CPU offload)
podman run --rm -it --device nvidia.com/gpu=all \
-p 8001:8080 --shm-size 16g --cap-add=SYS_NICE \
-v "$MO":/models:ro,Z $IMG \
--host 0.0.0.0 --port 8080 -m "$MODEL" \
-c 65536 --threads 13 --threads-batch 23 \
-b 2048 -ub 2048 -ngl 99 \
-ot exps=CPU -fa on --no-mmap --jinja
nvfp4 GPU(vLLM)
vllm serve vincentzed-hf/Qwen3-Coder-Next-NVFP4 \
--dtype auto --gpu-memory-utilization 0.88 \
--max-num-seqs 1 --max-model-len 32768 \
--enable-prefix-caching --trust-remote-code \
--enable-auto-tool-choice --tool-call-parser qwen3_coder
補足ノウハウ
256kコンテキスト設定
IQ4_NL構成ではctx=262144まで設定可能だが、Expert Offload + 256kの組み合わせはKVキャッシュが巨大になるため現実的ではない。実運用はctx=65536程度が上限。
graph_splitsの意味
graph_splitsはCPU-GPU間のデータ転送回数の指標。exps=CPUでは98(毎層のExpert計算でCPUに戻る)、全GPUでは2(入出力のみ)。この差がそのまま速度差に反映される。

