模型部署与推理优化

投机解码:draft-verify 与接受率

kp-018进阶25 分钟05-解码与投机

一句话定义

投机解码用一个小 draft 模型一次猜出 k 个 token,再由目标大模型并行验证,用"一次验证替代 k 次串行 decode"加速生成,并通过拒绝采样保证输出分布与目标模型完全一致。

为什么重要

它是少数能直接砍 TPOT(而非间接提并发)的技术,对单流延迟敏感场景(代码补全、端侧助手)收益可达 2–3 倍;同时它把"算力空闲的小 batch decode"变成了可以预支的资源——理解它需要综合 kp-003 的两阶段不对称与 kp-017 的分布概念,是本库的知识汇聚点。

前置知识

  • kp-003(decode 串行、prefill 并行的本质差异——验证本质是一次小 prefill)。
  • kp-017(概率分布与采样)。

核心概念

  • draft-verify 循环:draft 模型自回归猜 k 个 token → 目标模型一次前向并行算出这 k+1 个位置的分布 → 从左到右逐个接受/拒绝。
  • 无损性:用修正的拒绝采样规则,使最终输出分布严格等于"直接用目标模型采样"的分布;数学上不牺牲质量。
  • 接受率 α:draft 分布与目标分布的吻合程度,决定收益上界。
  • 回滚:某个位置被拒时,截断其后 draft 的 KV,从被拒位置用目标模型重新采样——KV Cache 管理(kp-013)因此多了"截断"操作。
  • 适用条件:decode-bound 且 batch 小(验证的并行算力是免费的);batch 已满时验证会挤占本可用于其他请求的算力,收益趋零甚至为负。

原理与机制

投机解码把 decode 的串行性"批处理化":draft 用自回归方式便宜地猜 k 步,验证用一次 teacher-forcing 前向并行给全部候选打分,把 k 次串行的大模型前向压缩为 1 次。修正的拒绝采样保证被接受序列的分布与目标模型直接采样严格一致(无损);被拒位置之后回滚,KV 管理只多一步截断。收益因此完全由 α 与 k 的几何级数决定——α 是第一敏感变量。

公式与模型

每轮(1 次 draft k 步 + 1 次验证)期望产出的 token 数:

E[tokens/轮] = 1-αk+11-α

可复现数值:α=0.7、k=4 → (1−0.7⁵)/0.3 = (1−0.168)/0.3 ≈ 2.77 个 token。若 draft 与验证耗时近似(同硬件、目标模型大很多时验证仍占大头),粗略加速比 ≈ E/单步验证时间占比——当验证一步 ≈ 普通一步时,约 2.7 倍上限;实际受 draft 开销拖累,常见 1.8–2.5 倍。α=0.5、k=4 时 E≈1.94,收益明显缩水——α 是第一敏感变量。

图示

draft(小,快):  t3 → t4 → t5 → t6   (猜 4 个)
verify(大,一次前向):  [t3 t4 t5 t6] 并行打分 → 接受 t3 t4, 拒绝 t5
回滚: 丢弃 t5 之后 draft KV, 用目标模型在 t4 后重新采样 → t5'

直观类比

实习医生(draft)先写整段处方,主治医师(目标)一眼扫过整段签名确认——医师逐字重写的时间被省掉;写错的地方整段截回重开。好处取决于"实习医生猜对率"(α)。

实例或案例

代码补全是最佳场景:代码高度可预测,α 常达 0.8+,TPOT 可降一半以上。反之开放式中文创作的 α 可能不足 0.5,收益有限。工程上 draft 模型常来自同系蒸馏(kp-011),保证分布同源、α 高。

常见误区

  • "投机解码改变输出分布/降低质量":正确实现的拒绝采样保证无损;实测差异只来自数值细节。
  • "大并发也能加速":batch 大时算力已被批处理吃满,验证挤占算力,收益消失——它是 decode-bound 低并发场景的技术。
  • "draft 越小越好 / k 越大越好":draft 太小 α 崩;k 增大接受概率边际递减(α^{k+1})而验证成本线性涨,最优 k 常在 4–8。

自测题

  1. 推导 α=0.8、k=3 时每轮期望产出。

要点:(1−0.8⁴)/0.2 ≈ 2.95 个 token。

  1. 为什么验证可以"并行看 k 个 token"?

要点:验证形态是 teacher-forcing 的并行前向(类似小 prefill),不逐 token 串行。

  1. 什么负载下不要开投机解码?

要点:高并发 compute-bound 场景——验证挤占批处理算力,吞吐不升反降。

与其他知识点的关系

kp-011 产出高 α 的 draft;kp-019 是其工程变体谱系;kp-021 的调度器需要理解投机轮次对批占用的影响。

延伸阅读

《Fast Inference from Transformers via Speculative Decoding》(Leviathan 等,2022)第 2–3 节给出拒绝采样的完整证明与 E[tokens] 推导。

#投机解码#draft 模型#接受率#拒绝采样