专题深读 · 2026-10-19 · 进阶
推测解码:让大模型跑得更快的方法
推测解码是一种提高生成速度的技术:由小型 Draft 模型先试写多个 token,再由大型 Target 模型一次性并行验证。借助修正后的拒绝采样,它能保持与仅使用大模型时相同的输出分布。
目录
- LLM 按顺序逐个生成 token。此时的瓶颈往往不是计算量,而是读取参数所需的内存带宽,因此计算资源有富余。
- 推测解码利用这部分富余的计算。大模型通过一次调用并行评估小模型写出的草稿,并一次性接受到最后一个正确的位置为止。
- 借助修正后的拒绝采样,每调用一次大模型至少能产出一个 token,且输出分布与单独使用大模型时相同。
- 原始论文报告,在 T5-XXL 上提速 2~3 倍,在 Chinchilla 70B 上提速 2~2.5 倍。EAGLE 不预测 token,而是预测 Target 的 Hidden Representation,在 LLaMA2-Chat 70B 上获得了 2.7~3.5 倍的提速。
- 速度收益取决于草稿与大模型的吻合程度。因此,长上下文、并行草稿的一致性,以及蓄意降低接受率的攻击,成为近期的争议焦点。
为什么需要:逐个 token 顺序生成的瓶颈
LLM 是自回归模型。它根据已生成的 token 选出下一个 token,把这个 token 接上后再选下一个。正如推测解码原始论文(paper)所述,要生成 K 个 token,就必须按顺序运行模型 K 次。由于必须先确定前面的 token 才能计算后面的 token,这一过程很难并行化。
变慢的原因往往在内存而非计算量。同一篇论文观察到,大模型推理常常受制于内存带宽和通信而非算术运算,因此计算资源有富余。DeepMind 的推测采样研究(paper)也说明,每生成一个 token,所有参数都必须至少经过一次加速器芯片。因此,模型大小除以总内存带宽所得的值就是自回归生成速度的上限。如果模型太大而需要拆分到多个加速器上,还要再加上设备之间的通信延迟。
当然,此前也有解决办法。推测采样研究(paper)总结说,int8、int4 量化和 Distillation 是几乎不损失性能就能降低延迟的有效方法。另一方面,原始论文(paper)指出,在简单步骤上少用计算的自适应方法通常需要改变模型结构或训练流程并重新训练,而且也无法保持完全相同的输出。推测解码的目标是在模型和输出分布都保持不变的前提下让生成更快。
普通解码与推测解码
普通自回归解码一次一个 token
- 每个 token 按顺序运行一次大模型
- 内存带宽决定速度上限
- 算力常有富余
推测解码先起草再并行验证
- 小模型起草多个 token
- 大模型通过一次调用并行打分
- 通过修改后的拒绝采样保持分布
공통 无需改变模型结构或重新训练,使用同一个 Target 模型
核心思想:快速起草,一次审阅
设想一位主编和一位手脚麻利的新记者。如果主编一个字一个字亲自写,速度会很慢。于是让新记者先写好几句,主编扫一眼,把正确的部分直接通过,在第一处出错的地方亲自改写。新记者猜得越准,主编看一次就能确定越多的句子。不过,最终稿件始终以主编的标准为准。
原论文(paper)从两个观察中得出了这一思路。第一,即使是困难的语言建模任务,也夹杂着小模型能够很好近似的简单子任务。第二,可以利用处理器使用的推测执行(speculative execution)。推测执行是在确认某项工作是否需要的同时先把它做掉的技术,分支预测就是典型例子。该论文把推测执行扩展到“某项工作只是以一定概率被需要”的情形,并将其应用于语言模型解码。
这种方法之所以有效,在于推测采样研究(paper)指出的一个观察:大模型并行打分小模型生成的若干个 token 的短续写所需的时间,与大模型生成一个 token 的时间相近。既然参数无论如何都要读取一次,那么在这一次中同时计算多个位置,就是在利用闲置的算力。
工作原理:草稿 → 并行验证 → 接受与修正
一轮分为四个步骤。第一,小而快的 Draft 模型像平常一样以自回归方式续写 γ 个 token。第二,大的 Target 模型通过一次调用读取这份草稿,一次性计算出在草稿的每个位置上自己会给出的概率。第三,从左到右逐个判定草稿 token。如果 Target 对该 token 的评估与 Draft 相同或更高,就直接接受;如果更低,则只以两个概率之比的概率接受。第四,在第一个被拒绝的位置,从调整后的分布中重新采样一个 token 进行修正,并丢弃其后的草稿。如果草稿全部被接受,则用 Target 已经算好的概率再追加一个 token。
这一设计保证了两点。首先,每调用一次 Target,至少产生一个、最多产生 γ+1 个新 token。因此即使在最坏情况下,按顺序运行 Target 的次数也不会多于普通自回归方式(paper)。其次,借助修改后的拒绝采样,最终输出分布与只使用 Target 时相同。推测采样研究(paper)将其表述为“在硬件数值误差范围内”得以保持。原论文说明,argmax、top-k、nucleus、temperature 等多种采样方式也都可以改写为从调整后的概率分布中采样的标准采样,因此可以在同一框架下处理。
在原论文的示例中,6M 参数的 Draft 模型辅助 97M 参数的 Target 模型。结果是,一个 38 个 token 的句子只需按顺序运行 Target 9 次即可生成,而该句子出现的概率没有改变。速度收益取决于 Draft 对 Target 的近似程度(接受率)以及草稿长度 γ 的选择。
发展脉络:从独立的小模型到预测内部特征
Google Research 的推测解码原论文(paper)提出了将推测执行扩展到概率情形的“推测采样”,以及使用它的解码方法。核心在于模型结构、训练方式和输出分布全部保持不变。用 11B 参数的 T5-XXL 执行翻译和摘要时,实际耗时比 T5X 实现减少了 2~3 倍,且输出相同。分析中还包括了 137B 参数 LaMDA 的对话任务。
DeepMind 的推测采样研究(paper)与这项工作在同一时期独立发表,并自述核心思想相同。不同之处在于,它聚焦于将数百亿参数的模型拆分到多个加速器上进行服务的分布式环境。在 70B 参数的 Chinchilla 上,解码速度提升了 2~2.5 倍,样本质量保持不变。该研究还报告,平均每秒 token 数在很多情况下超过了由内存带宽决定的自回归生成速度的理论上限。
EAGLE(paper)改变了预测的对象。它的出发点是这样一个观察:与其以 token 为单位预测下一个 token,不如自回归地预测 Target 模型倒数第二层的特征(Hidden Representation),后者更简单。不过它认为,特征层面的预测存在固有的不确定性,限制了性能。因此它同时输入提前一个时间步的 token 序列来消除这种不确定性。它在 Vicuna 和 LLaMA2-Chat 系列以及 MoE 模型 Mixtral 8x7B Instruct 上评估了对话、代码、数学推理和指令遵循。在 LLaMA2-Chat 70B 上,延迟改善了 2.7~3.5 倍,吞吐量翻倍,生成分布保持不变。
起点研究报告的加速
最新动向:并行草稿与长上下文
近来出现了一种缩短草稿生成时间本身的趋势。根据并行草稿校正研究 DCOCO(paper),基于扩散的 Drafter 同时预测未来多个位置,从而避开了自回归草稿生成的顺序开销。但代价是,一个块内的 token 在预测时并不知道紧邻的前一个草稿 token 实际是什么,因此 token 之间的依赖关系丢失了。DCOCO 不在每个位置只确定排名第一的一个候选,而是保留多个候选,再并行评估相邻位置之间在上下文上是否协调,从中进行选择。在四种验证模型和十个基准上,它比普通解码最多快 6.6 倍。该研究还报告,在处理 4~32 个并发请求的服务环境中,它也比最强的对比方法领先 6~23%。
另一个趋势是长上下文。FOLD(paper)认为输入越长,推测解码越有前景,因为读取 KV 缓存的开销由被接受的多个 token 分摊。问题在于,大多数 Drafter 是用短序列训练的,在长输入上性能会下降,而用长上下文重新训练代价高昂。FOLD 无需额外训练,精确保留近处 token 的位置,而把远处的 token 当作共享同一位置的“远程记忆”来处理。对于记忆越大注意力越分散的问题,它通过让记忆内部的注意力更加集中、并单独调节分配给整个记忆的权重来加以防止。在最长 256K token 的基准和六种 Target·Drafter 组合上,它大体上取得了最高的加速。在最好的情况下,相对自回归的加速从 2.08 倍提高到 4.22 倍。
两项研究从不同方向处理同一个问题:能否在保持草稿与 Target 的匹配程度(接受率)的同时降低草稿开销。DCOCO 侧重于找回因并行化而丢失的一致性,FOLD 则侧重于在无需训练的情况下守住长输入中下降的草稿质量。
局限与争议
第一,收益因条件而异。原论文(paper)写道,在内存带宽是瓶颈、算力有富余的常见情形下,推测解码可以成为很好的默认选择。换言之,在算力没有富余的环境中,可用于并行验证的资源不足,收益可能会减少。此外,每次调用 Target 能获得多少 token,取决于 Draft 对 Target 的近似程度。正如 FOLD(paper)所指出的,用短序列训练的 Drafter 在长输入上性能会下降。
第二,需要准确理解“输出相同”这一说法的范围。原始方法通过修改后的拒绝采样完整保持 Target 的分布。推测采样研究(paper)说明,这是在硬件数值误差范围内的保持。分布相同意味着结果在概率上无法区分,不应理解为使用相同种子就能保证生成逐字节完全相同的句子。
第三,安全方面出现了新的争议。Speedbumps(paper)提出了“推测拒绝攻击”。这种攻击在攻击者控制的内容中添加对抗性后缀,使 Draft 与 Target 更频繁地产生分歧。这样每轮被接受的 token 减少,生成一个 token 需要更多次 Target 调用,受害者的速度变慢、成本增加。在部分情况下甚至比普通自回归解码还慢。输出质量也随之下降,而该研究报告,若通过正则化恢复质量,就会失去大部分延迟效果,从而在攻击效果与隐蔽性之间形成权衡。该后缀在采样环境中同样有效,并且可以迁移到其他 Drafter,或使用同一 Drafter 的其他 Target。对于把速度作为运营指标的服务,值得考虑同时监控接受率。
延伸学习
起点是原论文推测解码(paper)。阅读第 2 章的概述和“标准化采样”的说明,就能清楚理解为什么输出分布不会改变,以及为什么每次调用 Target 至少能保证一个 token。同一时期发表的推测采样(paper)用伪代码整理了算法,对内存带宽决定速度上限的解释也很详细,适合一起阅读。
接下来可以转到 EAGLE(paper),了解用预测 Target 的 Hidden Representation 代替预测 token 的思路。阅读时留意,此后许多变体都是沿着改变“Drafter 读取 Target 的哪些信息”这一方向提出的,就能更好地看清脉络。
若想了解最新方向,建议依次阅读处理并行草稿一致性的 DCOCO(paper)、处理长上下文草稿的 FOLD(paper),以及处理安全威胁的 Speedbumps(paper)。前两篇是在保持接受率的同时提高速度的方法,最后一篇则表明接受率本身可能成为攻击目标。
相关术语
自回归模型 KV 缓存 推理(Inference) 吞吐量(token/秒) 量化 Distillation 模型服务 推理引擎
参考资料
奠基论文
- Fast Inference from Transformers via Speculative Decoding (2022)
- Accelerating Large Language Model Decoding with Speculative Sampling (2023)
- EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty (2024)
最新研究
由 AI 根据所列参考资料撰写并经过审核。详情请查看原始资料。