TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

推测解码:猜中赚四倍,猜错要吃亏

状态:草案(2026-10-27),已实测 n-gram,未实测 EAGLE、MTP、suffix。 测试环境为一张 8GB 级笔记本 GPU(Ada 架构)、vLLM 0.31.0、Qwen3-Reranker-0.6B,测试时间为 2026-10-27。基于模型的方法(EAGLE、MTP、草案模型)需要下载草案权重,suffix 方法需要下载额外的软件包,因此这次未进行测试。 2026-10-27 补充。 第 3.1 节中加入了使用对话型 Qwen3-0.6B 和 vLLM 0.32.0 重新测试的结果。0.31.0 和重排序模型的数值保持不变。 写作规则:以实测数据为基础,未能测出的标记为“未实测”,无法确认的标记为“未确认”。

目录

1. 原理:猜测与一次性验证

解码的一步大部分时间都花在从内存中读取权重上(第二篇)。然而,无论是检查一个 Token 还是五个 Token,读取权重的量都是一样的。因此,只要低成本地预测 几个接下来的 Token,并让大模型 一步验证整个草案即可。

초안(싼 방법): " keeps a queue of"        ← 4토큰 제안
검증(큰 모델 한 걸음): " keeps" ✓ " a" ✓ " queue" ✓ " of" ✓ + 다음 토큰 하나
→ 한 걸음에 5토큰 확정

在第一个错误的 Token 处停止,该位置会被替换为大模型选定的 Token。因此,每一步至少能增加一个 Token。在采样(温度 > 0)中,通过拒绝采样(rejection sampling)来保持与大模型单独生成相同的分布,而在贪婪解码中,输出必须相同。Leviathan 等人(ICML 2023)报告称,在 T5-XXL 上输出保持不变且速度提升了 2 到 3 倍;Chen 等人(DeepMind, 2023)报告称,在 Chinchilla 70B 的分布式环境中速度提升了 2 到 2.5 倍(基于摘要)。

收益由两个数字决定:

因此,官方文档也将推测解码介绍为“在中低请求率、受内存限制的负载下缩短 Token 间隔的功能”。

2. vLLM 的草案方法

方法 生成草案的方式 准备工作 文档评估(定性) 论文报告的值(基于摘要)
n-gram(ngram, ngram_gpu) 从提示词和当前的输出中找到相同的 Token 序列并复制其后方 无 低请求率下低至中等 提示词查找解码:单张 A100,Mistral-7B,摘要和上下文问答中平均 2.4 倍
suffix(suffix) 使用提示词和先前请求的输出构建后缀树,根据频率改变长度进行建议 arctic-inference 包 低至中等,对多重复的任务有效 SuffixDecoding:在智能体任务(SWE-Bench, Text-to-SQL)中最高达 5.3 倍
EAGLE·EAGLE-3(eagle, eagle3) 接收大模型的隐藏状态并输出下一个 Token 的小模型头 已训练的草案模型头 高 EAGLE:在 LLaMA2-Chat 70B 上为 2.7~3.5 倍。EAGLE-3:最高 6.5 倍
MTP(mtp 等 模型原本自带的多 Token 预测头 拥有 MTP 的模型(DeepSeek-V3、Qwen3.5 等) 高
草案模型(draft_model) 相同词表的小模型 小模型 高

通过单个 JSON 提供设置。

vllm serve <모델> --speculative-config '{"method":"ngram","num_speculative_tokens":4,"prompt_lookup_min":2,"prompt_lookup_max":5}'

n-gram 的 prompt_lookup_max·min 是要查找的 Token 序列长度范围,如果都省略则为 5。在 0.32.0 中,Model Runner V2 引入了一个可变长度的 GPU n-gram 建议生成器。在 0.31.0 中, ngram_gpu 已经是一个选项,但在实测中,这两种方法都发出了警告:“Model Runner V2 尚不支持此方法,因此使用 V1 执行器”。CPU 版的 ngram 还发出了“关闭异步调度”的警告。

有些功能无法同时使用。在 0.32.0 文档的兼容性表中,推测解码不能与 LoRA、池化模型、提示词嵌入输入一起使用,并且日志中打印了警告,提示 min_p 和 logit_bias 将被忽略。

3. 直接实测

方法

结果 1. 单独使用:复制时达到四到六倍

任务(并发 1) 默认 n-gram k=2 n-gram k=4 n-gram k=8 GPU n-gram k=4
复制,tok/s 176.4 427.5(2.4倍) 704.1(4.0倍) 1,117.0(6.3倍) 669.5(3.8倍)
复制,接受率 97.7% 99.0% 95.8% 95.3%
连词,tok/s 175.6 524.7(3.0倍) 515.8(2.9倍)
连词,接受率 90.8% 67.9%

k=4 分别两次独立启动服务器进行测量(692.6、704.1 tok/s),给出了几乎相同的值。在复制中将建议增加到 8 个时,8 个草案中有平均 7.7 个是正确的,大模型附加的 1 个 Token 使得一步确定了约 8.7 个 Token。然而,吞吐量不是 8.7 倍,而是 6.3 倍。这意味着同时验证 9 个 Token 的步骤比常规步骤(5.7ms)长约 1.4 倍(7.8ms)。即使读取权重只有一次,如果要验证的 Token 增加,计算和注意力机制也会增加。

“连词”之所以也快了三倍,是因为该模型会重复相同的单词(例如: signal river meadow signal river meadow …)。在一般的对话模型中,可能不会有这样的匹配度。

结果 2. N-gram 随机输出:因提示词而异

温度为 1.0 的随机输出在不同提示词之间的结果差异很大,按批次列出(并发 1,tok/s)。

提示词 默认 k=2 k=4(接受) k=8
1 171.4 242.4 237.6(113/430) 397.6
2 171.3 384.0 596.5(202/208) 914.2
3 171.4 149.2 153.6(22/175) 139.9

结果 3. 提高并发会减少收益,随机输出则会导致损失

任务 并发 默认 tok/s n-gram k=4 tok/s 比例 接受率
复制 8 1,124.6 2,860.6 2.54 97.1%
复制 32 2,868.7 4,042.9 1.41 83.4%
连词 8 1,089.7 2,478.3 2.27 92.1%
随机单词输入,负载测试(与第二篇条件相同) 16 1,683.1 2,436.5 1.45
随机单词输入,负载测试 64 2,899.3 3,267.8 1.13
随机输出 8 1,072.0 950.4 0.89 58.2%
随机输出 32 2,590.8 2,239.8 0.86 51.4%

当批次变大时,GPU 已经很忙,验证的 Token 增加多少,步骤就会变长多少。即使是接受率高的复制,在并发 32 时收益也降至 1.41 倍,而接受率约为一半的随机输出在并发 8 和 32 时损失了 11~14%。文档中“高请求率下收益会减少”的说明在数字中得到了体现。

结果 4. 输出与成本

3-1. 2026-10-27 重新测定:对话模型与 0.32.0

先前的测量使用的是会重复相同话语的重排序模型,这对 n-gram 有利。使用对话型 Qwen3-0.6B (bf16) 和 vLLM 0.32.0 进行了重新测量。任务有四个。

任务 并发 基础 tok/s n-gram k=4 tok/s 比例 接受率
复制 1 176.3 656.0 3.72 87.3%
返回代码 1 177.7 544.2 3.06 69.7%
返回代码 8 1,288.6 3,252.8 2.52 69.7%
解释 1 178.6 173.9 0.97 3.0%
解释 8 1,163.5 1,141.5 0.98 3.6%
随机输出 1 171.9 197.3 1.15 13.0%
随机输出 8 1,074.7 961.9 0.90 18.0%

4. 何时开启

5. 未能确认的事项

参考资料

登录后即可点赞

评论

还没有评论。

登录后即可发表评论