Qwen3-27B NVFP4 在 RTX 5090 上的 MTP 实战测评
实测 Unsloth Qwen3-27B NVFP4 在 1×/2× RTX 5090 上 MTP 投机解码表现,发现…
社区用户对 Unsloth 发布的 Qwen3-27B NVFP4 量化版在 1 张和 2 张 RTX 5090 上进行了实测,重点考察 MTP(Multi-Token Prediction)投机解码在不同并发和上下文长度下的表现。结果显示,MTP 在单用户、短上下文下提速显著,但一旦 GPU 忙于批处理或上下文拉长,收益就会迅速消失甚至转为明显减速。
测试环境
- 模型:Unsloth Qwen3-27B-NVFP4(compressed-tensors 格式,MLP 为 NVFP4,Attention 为 FP8)
- 显卡:1× / 2× RTX 5090,单卡 32 GB
- 推理框架:vLLM 0.25.1;PyTorch 2.11.0+cu130;驱动 580.159.03
- Attention 后端:TRITON_ATTN;最大模型长度 65,536
- 1 卡设置:tensor_parallel_size=1,max_num_seqs=16
- 2 卡设置:tensor_parallel_size=2,max_num_seqs=32
- MTP 方法:qwen3_5_mtp;投机 token 数(nspec)扫描
- 测试集:Spec-Bench,其中单请求测试用 24 条 prompt、每条生成 512 token;并发测试每条输出 256 token;上下文测试每档长度 4 条固定 prompt
作者特别提醒,单卡样本量较小,应视作「这套配置下的强信号」而非通用结论;采样参数保持默认(temperature=1.0、top_k=20、top_p=0.95),不同轮次间会略有波动。
单请求:1 卡 MTP 比 2 卡还快
单请求 decode 速度对比(decode tok/s = 1000 / 中位 TPOT):
- 1× 5090:MTP 关闭 66 tok/s,开启 nspec=3 后达 120 tok/s,提升约 82%
- 2× 5090:MTP 关闭 99 tok/s,开启 nspec=3 后 108 tok/s,仅提升 9%
也就是说,单看 decode 速度,1 张 5090 跑 MTP 反而比 2 张卡还快约 11%。作者推测张量并行通信开销在 MTP 路径上把部分收益吃掉了。但 2 卡的价值并不在此——它带来更大的 KV cache、上下文空间和批处理余量。
高并发下 MTP 收益快速衰减
在 1× 5090 上以不同并发量压测服务器整体吞吐:
- 并发 1:64 → 121 tok/s,+87%
- 并发 4:228 → 414 tok/s,+81%
- 并发 8:453 → 475 tok/s,仅 +5%
- 并发 12:638 → 501 tok/s,-22%
- 并发 16:789 → 498 tok/s,-37%
MTP 接受率从并发 1 时的约 73% 仅微降到并发 16 时的 71%,并未崩塌。作者解读为:GPU 已被正常批处理「喂饱」后,投机验证反而成了额外开销,省下的 decode 步骤不足以抵消这部分成本。作者同时指出,并发 4 一档复测波动较大,曾测得 250 tok/s,对「+81%」持保留意见。
长上下文让 MTP 从加速翻转为减速
单请求、不同输入长度的对比:
- 1× 5090:2k 时 +62%,8k 时 +54%,32k 时 +2%,60k 时转为 -20%
- 2× 5090:2k 时 +6%,8k 时 +22%,32k 时 -19%,60k 时 -44%
随着 KV cache 增大,每次投机验证的开销上升;同时接受率从 8k 时的 71% 滑到 60k 时的约 60%,两方面叠加令 MTP 优势被抹平甚至反超。作者不建议套用「超过 16k 就关 MTP」这种一刀切规则——拐点取决于硬件配置与提示词统计。
结论与配置建议
基于上述测试,作者给出的可操作经验:
- 单用户、短上下文:num_speculative_tokens=3
- 约 8 路并发:两边都试,MTP 收益已只剩个位数
- 12 路以上并发(1× 5090):关闭 MTP
- 32k 上下文 + TP=2:关闭 MTP
- 60k 上下文(任一配置):关闭 MTP
此外,大范围扫描中 TP=2、nspec=8、并发 16 这一组合在 vLLM 上两次触发 CUDA illegal memory access 崩溃,作者强调该现象仅限当前模型与后端组合,不做普遍结论。
作为「素质检验」,作者还在自己写的桌面应用中跑了一个智能体任务——让模型独立实现一个 Flappy Bird 小游戏。从输出表现看,量化后的模型仍具备可用的代码生成与推理能力,没有出现明显的输出崩坏。
