Speculative Decoding 与 MTP 速查
统一符号:p 是 target,q 是 draft。Chen et al. 原文采用相反字母,请阅读时先映射。
符号表
| 符号 | 含义 | 常见误读 |
|---|---|---|
pᵢ(x) | target 在候选前缀第 i 个位置的实际采样分布 | 不要拿 raw logits 直接代入 |
qᵢ(x) | draft 产生第 i 个候选 token 时使用的分布 | 必须对应真实 proposal processor |
γ | 每轮 draft token 数 | 不等于最终每轮 token 数,最大是 γ+1 |
β | 某位置的接受概率,Σmin(p,q) | 不等于简单 top-1 命中率 |
α | 跨上下文/位置的平均接受率,用于简化性能模型 | 真实 acceptance 往往随位置递减 |
c | 一个 draft step / 一个 target step 的成本比 | 不是参数量比,也不是单看 FLOPs |
精确 speculative sampling
a(x) = min(1, p(x)/q(x))
β = Σₓ min(p(x),q(x)) = 1 − TV(p,q)
p′(x) = norm((p(x)−q(x))+) = max(p(x)−q(x),0)/(1−β)
q(x)=0 时不会真的被 draft 采出,因而不会发生除零;若 p(x)>0,该质量由 residual 补回。
一次迭代伪代码
draft: for i = 1..γ:
q_i = Q(prefix + y[:i-1])
y_i ~ q_i
target: [p_1, ..., p_(γ+1)] = P(prefix + y_1..y_γ)
for i = 1..γ:
accept y_i with probability min(1, p_i[y_i] / q_i[y_i])
if rejected:
z ~ norm(max(p_i - q_i, 0))
return accepted_prefix + z
bonus z ~ p_(γ+1)
return y_1..y_γ + z
正确性证明骨架
- 接受路径给 token
x的质量:q(x)min(1,p(x)/q(x)) = min(p,q)。 - 拒绝概率:
1−β = Σ[p(x)−min(p(x),q(x))]。 - 拒绝路径给 token
x的质量:(1−β)p′(x)=p(x)−min(p,q)。 - 两条互斥路径相加:
min(p,q)+p−min(p,q)=p。 - 在每个仍有效的条件前缀上重复,得到整条序列分布保持。
期望进展与速度
E[tokens/iteration] = 1 + α + … + αγ = (1−αγ+1)/(1−α)
ideal speedup = E[tokens/iteration] / (1 + γc)
practical speedup ≈ E[tokens/iteration] / (v(γ,B,L) + γc + o)
v 是 target verification 相对 baseline 单 token decode 的成本;o 包括调度、采样张量搬运和 KV 状态管理。任何实测都应报告 batch、context、γ、采样方式、硬件和指标。
MTP 的两种结构
| 结构 | 核心计算 | 作为 proposer 时的含义 |
|---|---|---|
| 并行 future heads(Gloeckle et al.) | 共享 trunk 表示 z≤t,多个 heads 分别预测 xₜ₊ᵢ | 便宜地产生多位置候选,但后续位置未必条件化在前一候选上;需要 verify |
| 顺序 MTP modules(DeepSeek-V3) | hᵢᵏ 接收前一深度状态与未来 token embedding | 保留完整 causal chain,更自然地生成 draft chain;仍需 target verify |
源码检查清单
- proposal 的 token 与
qᵢ是否从同一个 sampling processor 得出? - target logits 的位置是否对应
prefix + candidate的 causal shift? - accept 是否是最长前缀,而非每个位置独立过滤?
- 首拒后的 token 是否从 residual 采样,而不是从完整 target
p重采? - 全接受时是否正确使用
pγ+1bonus token? - 无效候选后缀的 token、KV block、sequence length、RNG 语义是否回收/截断?
- 性能计数是否拆开 draft、verify、accept/correct 和 state management?
术语边界
| 术语 | 一句话定义 |
|---|---|
| speculative decoding | 用便宜 proposal 先猜、用 target 批量验证,并通过规则保证最终输出语义。 |
| speculative sampling | 随机采样场景下的 modified rejection sampling;核心是接受率与 residual。 |
| self-speculative decoding | proposal 与 target 来自同一模型体系,例如 early exit、MTP heads/modules。 |
| MTP | 训练/结构范式:在一个位置预测多个未来 token;不是完整的解码协议。 |
| blockwise parallel decoding | 较早的 greedy 版本:并行提出候选,target 接受最长匹配前缀。 |
| acceptance rate | 候选被 verifier 接受的概率/比例;它影响速度,不直接定义质量。 |
合上页面后回答四句:① q 过度提出一个 token 时怎么处理?② q 欠缺的 p 质量在哪里补?③ 为什么首拒后不能继续用 logits?④ MTP 哪一部分提供候选,哪一部分保证正确性?想核对答案时回到对应课程。