跳转至

第 15 章 投机解码

15.1 猜多一点

大模型常规自回归生成,是一个 token 算一次。每生成一个 token,GPU 都要重新把模型权重从显存读到计算单元。小批量场景下,GPU 算力经常空着,大部分时间都耗在反复搬运权重上,访存拖慢了整体速度。

既然读权重很贵,那能不能读一次权重,一次性确认好几个 token?这就是投机解码最原始的想法。 但自回归有个约束:后面 token 依赖前面的输出,没法直接并行算出未来 token。所以思路拆成两步:先用低成本方式 “猜” 后面一串 token,再交给主模型一次性批量校验这批猜测结果。猜对就直接收下,猜错就停在出错位置,重新采样

15.2 核心流程

一轮循环分为两步:

  1. 草稿生成:用低成本模块一次性预测后续连续 k 个候选 token。
  2. 验证:把这 k 个候选拼接成序列送入目标模型做单次前向。候选序列已知,所有位置可以并行算出目标模型的输出分布,再按接受规则判定。

贪心解码场景,可以简单对比草稿 token 和目标模型 argmax 结果;采样生成不能用这个简化判断。 设草稿分布为 \(q(x)\),目标模型分布为 \(p(x)\),草稿 token \(x\sim q\) 的接受概率: \(a(x)=\min\left(1,\frac{p(x)}{q(x)}\right).\) 一旦拒绝该 token,丢弃后面全部草稿,从修正分布 \(p'(x)= \frac{[p(x)-q(x)]_+} {\sum_y[p(y)-q(y)]_+}\) 重新采样。这套接受 - 修正机制是保证最终输出严格服从目标分布 p 的关键。工程实现如果采用近似接受规则、tokenizer 不一致,或是省略重采样修正,无损质量的数学保证就不再成立。

加速上限由草稿接受率决定。猜测越准,单次前向能确认的 token 越多,常见实测加速区间 2–3 倍。接受率过低时,验证开销反而拖累整体速度。

15.3 草稿的几种实现方式

  • 小模型草稿:部署一个配套小模型生成草稿。实现简单,但需要额外加载模型,且小模型分布要和大模型足够贴近。
  • Medusa:在已训练大模型主干上外挂多个预测头,分别预测\(t+2,t+3,t+4\)等位置 token。无需第二个模型,但各预测头独立,接受率一般。
  • Eagle:在特征层面构造自回归草稿,而非直接预测 token 序列。接受率显著优于 Medusa,是当前效果最优的一类方案。
  • n-gram / Prompt lookup:直接在上下文检索重复片段作为草稿,零推理开销。在代码补全、长文档改写这类高重复文本场景效果突出。

15.4 MTP:多 token 预测,内置到预训练目标

Medusa、Eagle、小模型草稿都属于训练完成后外挂的推理加速手段。MTP(Multi-Token Prediction)思路更进一步:预训练阶段就同时学习预测未来多个 token。

主头负责预测 \(x_{t+1}\),额外增加 \(D-1\) 个预测头,训练目标: \(\mathcal L_{\text{MTP}} =\sum_{d=1}^{D}\lambda_d \left[ -\sum_t\log p_\theta^{(d)} (x_{t+d}\mid x_{\le t}) \right].\) 核心约束:第 d 个预测头只能使用位置 t 的隐藏状态,不能偷看 \(x_{t+1:t+d-1}\)。不同实现对未来 token 嵌入、主干权重共享、预测头结构设计各有差异,MTP 不是单一固定架构。

MTP 带来两层收益:

  • 训练侧:多步预测提供更多监督信号,有可能学习到更长距离表征。但收益受 \(\lambda_d\)、预测深度、训练配方影响,不是必然提升主任务效果。
  • 推理侧:训练好的多预测头可以直接输出草稿候选,交给主模型验证。能否落地,取决于推理引擎是否支持树状候选、KV 缓存复用与完整的接受重采样逻辑。

DeepSeek-V3、Qwen3-Next 等模型已采用 MTP。该机制正在前沿模型普及,但还不属于 RoPE、RMSNorm 这类通用标配组件。

15.5 架构里其他用于训练稳定与推理增益的组件

  • 门控残差:在残差支路增加可学习门控,调节子层信息流入主干的强度。用于超深网络,缓解训练爆炸,承接第 5 章 “稳定训练” 的思路。
  • 各类微调稳定技巧:归一化位置调整、输出缩放等。很少单独作为论文标题亮点,但大量技术报告里都会用到。

15.6 架构选择直接决定部署难度(详细内容放在第二册)

模型架构设计阶段,就埋下部署层面的约束:隐藏激活是否存在极端离群值(决定低精度量化可行性)、KV 缓存内存布局是否规整(影响分页 KV 效率)、是否依赖定制 CUDA kernel(线性注意力、块稀疏注意力对 kernel 依赖强,生态不完善会阻碍落地)。

本节只建立一个核心观点:架构设计不只决定模型效果,同时决定部署成本与落地难度,好坏在设计阶段就已经确定。


核心问答

Q1:投机解码会降低生成质量吗? 正确实现接受 - 重采样规则时,输出分布和普通逐 token 生成完全一致,只加速、不引入近似。工程简化实现会破坏这个性质。

Q2:加速比由什么决定? 草稿接受率,加上草稿本身的推理开销。举例:单次生成 5 个草稿 token,平均接受 3 个,等效一次前向产出 3 个 token。接受率太低时验证开销会减速。

Q3:MTP 和 Medusa 的本质区别? 经典 Medusa 一般冻结主干,只微调新增的未来 token 头;MTP 是预训练联合优化多步预测目标,主干参数同样接收多步预测梯度。Medusa 改造成本更低;MTP 有机会学到更适配多步预测的表征,但性能提升需要消融验证,不是定义自带的增益。

Q4:为什么说 MTP 不只是推理加速手段? MTP 修改训练目标与梯度信号,不是仅改动推理调度逻辑。多步监督有可能提升表征质量与样本效率;参数配置不当也会干扰 next-token 主目标。评估必须同时看主 loss、下游任务精度、草稿接受率三项指标。

Q5:投机解码和 MoE 可以叠加吗? 可以,二者正交互补。MoE 降低单 token 计算开销;投机解码分摊权重访存开销,一次加载权重产出更多 token。前沿大模型常把两者组合使用。