压测配置
本次压测对比原生与 3 种投机解码方案在 Qwen3.6-35B-A3B 上的吞吐、延迟与接受率。所有服务运行在同一台 4 × NVIDIA L20X (144 GB) 机器上,每张卡承载一个 vLLM 服务(TP=1),对 4 个服务串行压测。
1.1 部署的 4 个服务
使用 vLLM 官方镜像:hub.docker.alibaba-inc.com/aone-base-global/vllm-openai:v0.21.0 部署服务,确保环境统一。
| 模式 | GPU | 端口 | 关键参数 | 模型说明 |
|---|---|---|---|---|
| 原生(native) | 0 | 8000 | — | 不使用投机解码,作为加速比基线 |
| MTP(自带 Multi-Token Prediction) | 1 | 8001 | method=mtp, num_speculative_tokens=5 | 使用模型自带 MTP 模型 |
| DFlash | 2 | 8002 | method=dflash, num_speculative_tokens=15, attention_backend=FLASH_ATTN | DFlash 官方提供的 z-lab/Qwen3.6-35B-A3B-DFlash |
| Eagle3 | 3 | 8003 | method=eagle3, num_speculative_tokens=5 | 使用 140 万条数据自训 |
1.2 vLLM 统一参数(4 个服务一致)
--tensor-parallel-size 1— 单卡 TP--max-model-len 32768--max-num-seqs 64/--max-num-batched-tokens 16384— 为 DFlash spec=15 留够批 token 预算--gpu-memory-utilization 0.85--trust-remote-code --reasoning-parser qwen3
1.3 evalscope 客户端参数
--max-tokens 512(每条请求最大输出)--temperature 0(确定性输出,便于复现)--stream(SSE 流式以测量 TTFT)- 关闭 thinking:
--extra-args '{"chat_template_kwargs": {"enable_thinking": false}}' - 并发档:
1 / 4 / 16 / 32 - 对应请求总数:
32 / 80 / 160 / 320
1.4 数据集
规划压测时,优先选投机解码论文标准集(MT-Bench / HumanEval / GSM8K / CNN-DM)覆盖 4 类典型分布,避免用 random 数据集——投机解码效果对数据分布敏感,随机 token 上拿不到加速。
| 数据集 | 规模 | 任务类型 | evalscope 模式 |
|---|---|---|---|
| MT-Bench | 80 conv × 2 turns | 多轮对话 | custom_multi_turn |
| HumanEval | 164 prompts | 代码补全 | line_by_line |
| GSM8K (test) | 500 prompts | 数学链式推理 | line_by_line |
| CNN-DailyMail (test) | 200 篇,截断 ≤ 4096 chars | 长文本摘要 | line_by_line |
1.5 关键指标说明
- 输出吞吐(Output tok/s):每秒生成的输出 token 总数。
- TTFT(Time To First Token):从请求发出到第一个 token 返回的延迟。
- TPOT(Time Per Output Token):除去 TTFT 后,每个输出 token 的平均生成耗时。
- 真实接受率(Real Acceptance Rate):每个 draft token 被接受的概率,由 vLLM
/metrics直接读取(spec_decode_num_accepted_tokens_total / spec_decode_num_draft_tokens_total在压测前后做差)。 - Mean Acceptance Length(MAL):每次 verify 步骤实际产出的 token 数(含 base token),公式
MAL = 1 + accepted_draft_tokens / drafts。这是投机解码论文里的标准指标。 - evalscope 接受率:evalscope 根据 SSE chunk 数推断的近似接受率(
1 - 1 / Decoded_Tok_per_Iter),仅作对照。当num_speculative_tokens> 3 时此估计常会显著偏离真值。
压测结果
总览
2.1.1 各数据集最大吞吐加速比
| 数据集 | MTP (spec=5) | DFlash (spec=15) | Eagle3 (spec=5) |
|---|---|---|---|
| MT-Bench(多轮对话) | 2.17× @ 并发=32 | 1.82× @ 并发=32 | 1.98× @ 并发=32 |
| HumanEval(代码补全) | 2.79× @ 并发=32 | 2.46× @ 并发=16 | 2.82× @ 并发=32 |
| GSM8K(数学链式推理) | 2.67× @ 并发=32 | 2.25× @ 并发=16 | 2.72× @ 并发=32 |
| CNN-DailyMail(长文本摘要) | 1.79× @ 并发=32 | 1.65× @ 并发=32 | 1.58× @ 并发=32 |
2.1.2 Mean Acceptance Length
每次 verify 实际产出的 token 数(含 base token);对所有并发档求均值
| 数据集 | mtp | dflash | eagle3 |
|---|---|---|---|
| MT-Bench(多轮对话) | 3.535 | 2.571 | 2.962 |
| HumanEval(代码补全) | 5.297 | 4.631 | 5.040 |
| GSM8K(数学链式推理) | 4.817 | 3.768 | 4.607 |
| CNN-DailyMail(长文本摘要) | 3.227 | 2.337 | 2.614 |
2.1.3 真实接受率(vLLM /metrics 指标)
| 数据集 | mtp | dflash | eagle3 |
|---|---|---|---|
| MT-Bench(多轮对话) | 0.507 | 0.105 | 0.392 |
| HumanEval(代码补全) | 0.859 | 0.242 | 0.808 |
| GSM8K(数学链式推理) | 0.763 | 0.185 | 0.721 |
| CNN-DailyMail(长文本摘要) | 0.445 | 0.089 | 0.323 |
图表
2.2.1 输出吞吐 tok/s
数值越大越好 
2.2.2 Mean Acceptance Length
每次 verify 实际产出 token 数,含 base token

并发为 4 时,DFlash 的 MAL 跌到 1 附近,应该是 vLLM 实现存在 bug,输出变为重复字符,可以忽略。
2.2.3 接受率(vLLM 指标)

2.2.4 各位置 draft token 接受率衰减曲线

2.2.5 TPOT

2.2.6 TTFT

总结
3.1 加速效果横向对比
各投机解码方案在所有 (数据集 × 并发) 组合上的平均输出吞吐加速比,相对不开投机采样:
- MTP(自带,step=5):平均 1.86×
- Eagle3(step=5):平均 1.81×
- DFlash(step=15):平均 1.49×
3.2 数据集敏感性:投机解码收益与数据分布强相关
按 3 种投机方案的平均真实接受率排序(接受率高的数据集,3 种方案都能拿到更大的加速比):
- HumanEval(代码补全):平均接受率 63.7%
- GSM8K(数学链式推理):平均接受率 55.6%
- MT-Bench(多轮对话):平均接受率 33.5%
- CNN-DailyMail(长文本摘要):平均接受率 28.6%
规律:结构化、模式重复的文本(代码、数学公式)接受率最高,开放生成(多轮对话、自由摘要)接受率较低。这与投机解码的核心机制一致,草稿模型在分布更窄的语料上更容易猜中下一批 token。
例子:
HumanEval 直接给代码补全:“def f(x):\n return ...” —— 大量语法 token 重复
GSM8K 直接给求解:“Step 1: ... = 12\nStep 2: ...” —— 数字 + 算式 + 固定模板
3.3 选型建议
- 首选 MTP:模型自带草稿头、在所有数据集上加速比稳定(本次平均 1.86×、峰值 2.79×@HumanEval conc=32),且接受率最高(0.45-0.86)。
- Eagle3 备选:与 MTP 速度接近,在代码/数学场景几乎打平(HumanEval 2.82× / GSM8K 2.72×),但需要单独训练并部署 Eagle3 草稿权重。如果模型没有自带 MTP,EAGLE3 是首选。
- DFlash 目前无优势:效果大幅低于预期,吞吐远不如前两者,虽然支持并行预测,但每一步的接受率都很低,远不如前两者。
3.4 备注
- 当前 Eagle3 模型训练时直接使用了 open-perfectblend 数据集中的 140 万条数据,考虑时间关系,没有对这 140 万条数据使用 Qwen3.6-35B-A3B 模型做 regenerate 后再训练。如果使用重新生成的数据,还会有 5% 以上的提升。
- 本次测试关闭了 thinking,如果开启 thinking,加速效果要降低不少。这主要是因为 thinking 输出的 reasoning 看似模式化,但本质是自由发挥的自然语言推理,token 分布广,不容易猜中。
附: 每个数据集的详细数据
4.1 数据集:MT-Bench(多轮对话)
4.1.1 原始指标
| 模式 | 并发 | 输出吞吐 tok/s | TTFT (ms) | TPOT (ms) | 输入 tok | 输出 tok | 真实接受率 | Mean Acceptance Length | evalscope 接受率 |
|---|---|---|---|---|---|---|---|---|---|
| native | 1 | 117.192 | 79.050 | 8.310 | 246.828 | 325.844 | nan | nan | nan |
| native | 4 | 206.273 | 111.730 | 19.230 | 278.075 | 360.925 | nan | nan | nan |
| native | 16 | 343.418 | 173.650 | 44.260 | 277.894 | 364.878 | nan | nan | nan |
| native | 32 | 474.012 | 227.720 | 64.840 | 276.197 | 363.873 | nan | nan | nan |
| mtp | 1 | 140.962 | 130.390 | 6.940 | 246.250 | 322.906 | 0.467 | 3.333 | 0.702 |
| mtp | 4 | 295.306 | 219.240 | 12.860 | 277.275 | 359.356 | 0.526 | 3.629 | 0.733 |
| mtp | 16 | 635.900 | 280.300 | 23.450 | 276.366 | 361.994 | 0.517 | 3.584 | 0.730 |
| mtp | 32 | 1030.361 | 339.010 | 28.570 | 276.113 | 362.131 | 0.519 | 3.594 | 0.732 |
| dflash | 1 | 106.204 | 98.870 | 9.290 | 244.594 | 318.344 | 0.145 | 3.175 | 0.723 |
| dflash | 4 | 219.665 | 101.750 | 17.960 | 130.094 | 512.000 | 0.005 | 1.077 | 0.111 |
| dflash | 16 | 547.825 | 284.840 | 26.100 | 282.216 | 374.456 | 0.146 | 3.197 | 0.750 |
| dflash | 32 | 861.358 | 317.550 | 38.750 | 290.581 | 400.337 | 0.122 | 2.836 | 0.683 |
| eagle3 | 1 | 135.106 | 90.500 | 7.360 | 246.250 | 322.906 | 0.356 | 2.781 | 0.652 |
| eagle3 | 4 | 269.317 | 165.940 | 14.150 | 276.875 | 359.556 | 0.407 | 3.035 | 0.694 |
| eagle3 | 16 | 571.457 | 256.530 | 25.810 | 276.019 | 361.978 | 0.403 | 3.014 | 0.692 |
| eagle3 | 32 | 937.758 | 299.390 | 31.250 | 275.688 | 362.634 | 0.404 | 3.019 | 0.695 |
4.1.2 吞吐加速比(相对 native)
| 并发 | mtp | dflash | eagle3 |
|---|---|---|---|
| 1 | 1.203 | 0.906 | 1.153 |
| 4 | 1.432 | 1.065 | 1.306 |
| 16 | 1.852 | 1.595 | 1.664 |
| 32 | 2.174 | 1.817 | 1.978 |
4.2 数据集:HumanEval(代码补全)
4.2.1 原始指标
| 模式 | 并发 | 输出吞吐 tok/s | TTFT (ms) | TPOT (ms) | 输入 tok | 输出 tok | 真实接受率 | Mean Acceptance Length | evalscope 接受率 |
|---|---|---|---|---|---|---|---|---|---|
| native | 1 | 114.084 | 76.380 | 8.330 | 124.875 | 157.188 | nan | nan | nan |
| native | 4 | 204.242 | 109.210 | 18.840 | 146.375 | 198.688 | nan | nan | nan |
| native | 16 | 368.256 | 167.530 | 41.200 | 170.419 | 244.300 | nan | nan | nan |
| native | 32 | 521.716 | 213.670 | 57.880 | 170.047 | 247.688 | nan | nan | nan |
| mtp | 1 | 201.557 | 94.330 | 4.380 | 124.875 | 157.531 | 0.885 | 5.424 | 0.807 |
| mtp | 4 | 389.037 | 174.370 | 9.050 | 146.375 | 199.162 | 0.863 | 5.316 | 0.808 |
| mtp | 16 | 884.084 | 265.270 | 15.990 | 170.419 | 247.419 | 0.844 | 5.221 | 0.806 |
| mtp | 32 | 1455.235 | 314.420 | 19.100 | 170.047 | 246.709 | 0.846 | 5.228 | 0.806 |
| dflash | 1 | 242.843 | 96.810 | 3.500 | 124.875 | 156.750 | 0.562 | 9.426 | 0.889 |
| dflash | 4 | 206.171 | 111.200 | 19.160 | 146.375 | 512.000 | 0.001 | 1.015 | 0.044 |
| dflash | 16 | 905.891 | 284.300 | 13.550 | 170.419 | 241.775 | 0.275 | 5.131 | 0.857 |
| dflash | 32 | 921.457 | 310.770 | 36.060 | 170.047 | 299.403 | 0.130 | 2.954 | 0.672 |
| eagle3 | 1 | 215.721 | 86.470 | 4.130 | 124.875 | 157.531 | 0.847 | 5.236 | 0.800 |
| eagle3 | 4 | 386.925 | 164.190 | 9.080 | 146.375 | 198.062 | 0.809 | 5.043 | 0.800 |
| eagle3 | 16 | 889.072 | 254.500 | 15.930 | 170.419 | 246.787 | 0.789 | 4.947 | 0.798 |
| eagle3 | 32 | 1469.072 | 296.640 | 18.920 | 170.047 | 248.044 | 0.787 | 4.936 | 0.798 |
4.2.2 吞吐加速比(相对 native)
| 并发 | mtp | dflash | eagle3 |
|---|---|---|---|
| 1 | 1.767 | 2.129 | 1.891 |
| 4 | 1.905 | 1.009 | 1.894 |
| 16 | 2.401 | 2.460 | 2.414 |
| 32 | 2.789 | 1.766 | 2.816 |
4.3 数据集:GSM8K(数学链式推理)
4.3.1 原始指标
| 模式 | 并发 | 输出吞吐 tok/s | TTFT (ms) | TPOT (ms) | 输入 tok | 输出 tok | 真实接受率 | Mean Acceptance Length | evalscope 接受率 |
|---|---|---|---|---|---|---|---|---|---|
| native | 1 | 117.719 | 67.260 | 8.320 | 70.812 | 346.406 | nan | nan | nan |
| native | 4 | 210.967 | 97.840 | 18.460 | 71.700 | 331.688 | nan | nan | nan |
| native | 16 | 368.318 | 157.330 | 41.060 | 73.250 | 331.694 | nan | nan | nan |
| native | 32 | 533.173 | 199.900 | 57.150 | 72.334 | 328.297 | nan | nan | nan |
| mtp | 1 | 192.863 | 87.820 | 4.930 | 70.812 | 351.500 | 0.761 | 4.806 | 0.790 |
| mtp | 4 | 377.400 | 163.150 | 9.940 | 71.700 | 333.025 | 0.760 | 4.801 | 0.788 |
| mtp | 16 | 861.095 | 253.250 | 16.980 | 73.250 | 327.594 | 0.768 | 4.842 | 0.790 |
| mtp | 32 | 1424.516 | 294.930 | 20.060 | 72.334 | 330.041 | 0.764 | 4.821 | 0.790 |
| dflash | 1 | 179.260 | 87.840 | 5.380 | 70.812 | 344.656 | 0.344 | 6.165 | 0.836 |
| dflash | 4 | 237.805 | 97.050 | 16.560 | 71.700 | 512.000 | 0.006 | 1.096 | 0.093 |
| dflash | 16 | 827.024 | 275.160 | 17.270 | 73.250 | 337.381 | 0.264 | 4.956 | 0.811 |
| dflash | 32 | 900.894 | 292.590 | 35.100 | 72.334 | 427.712 | 0.124 | 2.855 | 0.680 |
| eagle3 | 1 | 207.902 | 78.760 | 4.590 | 70.812 | 351.500 | 0.728 | 4.640 | 0.783 |
| eagle3 | 4 | 381.654 | 158.300 | 9.810 | 71.700 | 332.075 | 0.723 | 4.613 | 0.781 |
| eagle3 | 16 | 858.224 | 241.850 | 16.720 | 73.250 | 328.387 | 0.718 | 4.591 | 0.781 |
| eagle3 | 32 | 1450.546 | 281.020 | 19.700 | 72.334 | 329.603 | 0.717 | 4.584 | 0.781 |
4.3.2 吞吐加速比(相对 native)
| 并发 | mtp | dflash | eagle3 |
|---|---|---|---|
| 1 | 1.638 | 1.523 | 1.766 |
| 4 | 1.789 | 1.127 | 1.809 |
| 16 | 2.338 | 2.245 | 2.330 |
| 32 | 2.672 | 1.690 | 2.721 |
4.4 数据集:CNN-DailyMail(长文本摘要)
4.4.1 原始指标
| 模式 | 并发 | 输出吞吐 tok/s | TTFT (ms) | TPOT (ms) | 输入 tok | 输出 tok | 真实接受率 | Mean Acceptance Length | evalscope 接受率 |
|---|---|---|---|---|---|---|---|---|---|
| native | 1 | 114.531 | 102.300 | 8.330 | 655.719 | 238.750 | nan | nan | nan |
| native | 4 | 206.645 | 131.850 | 18.540 | 612.675 | 229.975 | nan | nan | nan |
| native | 16 | 383.733 | 203.150 | 39.660 | 609.438 | 225.825 | nan | nan | nan |
| native | 32 | 550.501 | 263.710 | 54.930 | 618.203 | 224.056 | nan | nan | nan |
| mtp | 1 | 132.476 | 121.640 | 7.100 | 655.719 | 240.156 | 0.437 | 3.187 | 0.679 |
| mtp | 4 | 273.627 | 190.480 | 13.620 | 612.675 | 230.500 | 0.449 | 3.246 | 0.685 |
| mtp | 16 | 617.907 | 287.340 | 23.780 | 609.438 | 224.338 | 0.449 | 3.246 | 0.686 |
| mtp | 32 | 983.677 | 364.190 | 29.550 | 618.203 | 227.284 | 0.446 | 3.229 | 0.685 |
| dflash | 1 | 92.638 | 120.550 | 10.400 | 655.719 | 231.969 | 0.126 | 2.892 | 0.650 |
| dflash | 4 | 176.741 | 160.020 | 22.360 | 612.675 | 512.000 | 0.000 | 1.000 | 0.024 |
| dflash | 16 | 465.982 | 303.440 | 30.720 | 609.438 | 252.363 | 0.104 | 2.563 | 0.632 |
| dflash | 32 | 911.032 | 359.260 | 35.820 | 618.203 | 414.547 | 0.126 | 2.891 | 0.680 |
| eagle3 | 1 | 122.308 | 112.480 | 7.770 | 655.719 | 240.156 | 0.319 | 2.594 | 0.608 |
| eagle3 | 4 | 238.442 | 178.710 | 15.800 | 612.675 | 225.012 | 0.323 | 2.616 | 0.612 |
| eagle3 | 16 | 544.450 | 269.020 | 27.120 | 609.438 | 224.300 | 0.325 | 2.625 | 0.615 |
| eagle3 | 32 | 871.035 | 342.480 | 33.600 | 618.203 | 227.222 | 0.324 | 2.621 | 0.615 |
4.4.2 吞吐加速比(相对 native)
| 并发 | mtp | dflash | eagle3 |
|---|---|---|---|
| 1 | 1.157 | 0.809 | 1.068 |
| 4 | 1.324 | 0.855 | 1.154 |
| 16 | 1.610 | 1.214 | 1.419 |
| 32 | 1.787 | 1.655 | 1.582 |