跳到主要内容
推理优化

5.3 Self-Draft 方案:Medusa、EAGLE 与 MTP

不引入独立小模型,用目标模型自己的结构做提案器——Medusa 多解码头、EAGLE 特征级自回归与动态草稿树、DeepSeek MTP,以及它们各自的加速表现

MedusaEAGLEEAGLE-2EAGLE-3MTPSelf-DraftDraft Tree

5.2 节留下了两个问题:独立草稿模型占显存(第二个模型),而且**“猜得准”和”猜得快”互斥**(模型越大越准但越慢)。Self-Draft(自提案)方案把这两个问题一起解决:不引入任何独立模型,让目标模型自己的浅层结构当提案器。这类方案近年演进极快——Medusa(2024.01)→ EAGLE(2024.01)→ EAGLE-2(2024.06)→ EAGLE-3(2025.03),加速比从 ~2x 一路卷到 6.5x。这一节把这条演进路线讲清楚。

📑 目录


1. 思路:为什么要”自己猜自己”

回顾 5.1 的加速比公式:Speedup=E[L]TtNTd+Tt\text{Speedup} = \frac{E[L] \cdot T_t}{N \cdot T_d + T_t}。独立草稿模型的困境是 TdT_dα\alpha 的绑定。Self-Draft 的破局点是:

草稿分布 qq 不需要来自”另一个模型”——它可以来自目标模型自己的中间层。

目标模型的前几层 Transformer Block 已经编码了丰富的特征:浅层特征包含词汇/句法信息,深层特征接近语义。如果我们在某个中间层”加挂”一个极小的头(通常一两个 MLP 层,参数量是目标模型的 0.1%-1%),让它基于中间层特征预测下一个 Token,就得到了一个”和目标模型共享 99% 计算、分布天然接近”的提案器:

  • qqpp 天然接近 → 接受率 α\alpha 高(特征来自同一个模型!)
  • 头只有几层 MLP → 草稿开销 TdT_d 极小,且不需要额外显存装一个完整模型
  • 可训练 → 用目标模型的输出做蒸馏式训练,让 qq 进一步逼近 pp

代价是:需要一个训练步骤(虽然比训练完整草稿模型便宜得多),以及加挂结构带来的工程复杂度。它和”蒸馏一个独立小模型”的区别在于——蒸馏是”学一个替身”,Self-Draft 是”长一个分身”:分身共享本体的所有知识,只是比本体浅。

📌 关键点:Self-Draft 的本质是把”草稿模型的训练成本”从”训练/寻找一个完整小模型”降到”训练几个 MLP 头”,同时让 α\alphaTdT_d 同时变好。这是它相对 5.2 节方案的结构性优势,也是 2024-2025 年投机解码研究的主战场。


2. Medusa:多解码头并行预测

Medusa(arXiv:2401.10774,2024.01,加州大学伯克利分校)是 Self-Draft 路线的开山之作。

2.1 结构:N 个并行的”预测头”

在目标模型的最后一层隐藏状态 hh 上,挂 N 个额外的解码头 Head1,,HeadN\text{Head}_1, \dots, \text{Head}_N

  • Head1\text{Head}_1 基于 hh 预测第 t+1t+1 个 Token:x^1q1(h)\hat{x}_1 \sim q_1(\cdot \mid h)
  • Head2\text{Head}_2 基于 hh 预测第 t+2t+2 个 Token:x^2q2(h)\hat{x}_2 \sim q_2(\cdot \mid h)
  • ……
  • HeadN\text{Head}_N 基于 hh 预测第 t+Nt+N 个 Token:x^NqN(h)\hat{x}_N \sim q_N(\cdot \mid h)

关键设计:每个头独立预测,头与头之间没有自回归依赖(否则就退化成串行)。代价是 Head2\text{Head}_2 不知道 x^1\hat{x}_1 是什么——预测第 t+2t+2 个 Token 时信息不足,接受率随位置下降。为了弥补,Medusa 用 top-k 候选 + Tree Attention

2.2 Tree Attention:一个”扇形”的候选树

每个头取 top-k 个候选(而非 1 个),组合成一颗候选树:

Head1: [a, b]
Head2 (给定 a): [c, d]   Head2 (给定 b): [e, f]
→ 候选序列: (a,c), (a,d), (b,e), (b,f)

这些候选序列的公共前缀共享计算——vLLM/Medusa 用**树形注意力(Tree Attention)**一次前向验证所有分支:同一个 KV 前缀被多个候选分支共享,验证成本远小于”逐分支验证”。每轮验证后,所有分支的分布都有了,选接受长度最长(且通过 Rejection Sampling)的那条分支继续。

2.3 训练:Medusa-1 与 Medusa-2

版本训练方式特点
Medusa-1冻结 backbone,只训练 N 个头无损加速;头用目标模型的自回归标签训练,3 个 epoch 内收敛;backbone 不动,任何已部署模型都能加装
Medusa-2backbone + 头联合微调接受率更高,但 backbone 被改动,不再是严格的无损加速(输出分布有细微变化),且需要原始训练数据

💡 提示:Medusa-1 的”冻结 backbone”是它工程上最优雅的一点——它把投机解码变成了一个纯加法:模型不动,加几个头,头训练好即插即用。这也是 vLLM 至今保留 Medusa 支持的原因。论文报告在 Vicuna-7B 上加速 2.2x,在 MT-Bench 上约 2.2x-3.6x(配合 Medusa-2)。

2.4 局限

  • 各头独立预测,位置越靠后的头信息越少,接受率衰减快
  • 树的分支数随 NN 和 top-k 指数膨胀,验证开销增大
  • 只在最后一个隐藏层挂头,没有利用中间层特征

📌 关键点:Medusa 的核心贡献是”多候选 + 树验证”的框架——它让”一次草稿、多路验证”成为可能。但”头间无依赖”导致的接受率衰减,正是 EAGLE 要解决的问题。


3. EAGLE-1:特征级自回归

EAGLE(Extrapolation Algorithm for Greater Language-model Efficiency,arXiv:2401.15077,2024.01)的作者观察到 Medusa 的问题,提出两个关键洞察:

  1. 在特征层做自回归比在 Token 层做更容易:Token 层的下一 Token 分布高度多样(一个前缀可以接很多合法 Token),但特征层(倒数第二层的隐藏状态)的”下一步特征”相对平滑、可预测
  2. 特征自回归的不确定性可以通过”把上一位置的 Token 也喂进来”消除:EAGLE 的草稿头输入是 (特征 h_t, 上一 Token x_t),输出是预测的下一步特征 h~t+1\tilde{h}_{t+1},再经 LM Head 映射成 Token 分布

3.1 结构

h_t (target 倒数第二层特征) ──┐
x_t (上一个已生成 Token) ─────┤→ [草稿头 MLP] → h̃_{t+1} → [LM Head] → q(x̂)
                              └────────────────────────────┘
每个草稿步: h̃ 既作为下一步的输入特征,又被 LM Head 映射成 Token

草稿头本身要训练,但它只有 1 个 Transformer Block 的量级(论文中约 1-2 层 MLP + 层归一化),训练成本远低于一个完整小模型。推理时草稿头串行自回归 N 步,每步成本约等于目标模型一层的计算量。

3.2 效果

论文在 Vicuna、LLaMA2-Chat 全系列、Mixtral 8x7B 上验证:LLaMA2-Chat 70B 上延迟加速 2.7x-3.5x,吞吐翻倍,且输出分布不变。相比 Medusa:因为草稿头之间有自回归依赖(每步看到上一步的特征),接受率不再随位置急剧衰减。

💡 提示:EAGLE 名字里的 Extrapolation(外推)指的就是”用上一步的特征 + Token 外推下一步特征”。它与 Medusa 的本质区别:Medusa 是”并行猜 N 个互不知情的 Token”,EAGLE 是”串行猜 N 个’看着彼此’的 Token”——后者信息量更大,接受率更高,代价是草稿阶段是串行的(但每步很便宜)。


4. EAGLE-2:动态草稿树

EAGLE-2(arXiv:2406.16858,2024.06)基于一个观察:接受率不仅和位置有关,还和上下文有关——同一个位置,在某些上下文里草稿很准(“The capital of France is”),在某些上下文里很不可靠(一段充满悬念的对话)。静态的”每条路径都展开 k 个候选”策略浪费计算。

4.1 置信度校准的发现

论文发现 EAGLE 草稿头给出的置信度(softmax 概率)校准得很好:置信度高 → 接受率高。这让”用置信度决定展开策略”成为可能:

  • 置信度高的 Token:多展开候选分支(它大概率被接受,值得多准备几条路)
  • 置信度低的 Token:少展开甚至不展开(猜不中,展开也是浪费)

4.2 动态草稿树(Dynamic Draft Tree)

每轮草稿不再是固定的”每位置 top-k”,而是按置信度动态生长的树:

位置1: 置信度 0.95 → 展开 4 个候选分支
位置2: 分支 A 置信度 0.92 → 展开 3 个;分支 B 置信度 0.3 → 只留 1 个
位置3: 只在置信度高的路径上继续展开……

验证时仍然用 Tree Attention 一次算完所有分支。效果:同样的验证预算下,树把计算集中在”更可能被接受”的路径上,平均接受长度显著提升。论文报告加速比 3.05x-4.26x,比 EAGLE-1 快 20%-40%,同样保持输出分布不变。

📌 关键点:EAGLE-2 贡献了一个通用机制——“置信度 → 树结构”的反馈回路。它把 5.1 节”提高 α\alpha 比加大 NN 更划算”的结论落到了实现上:预算有限时,把展开量投给高置信度路径。这个机制后来被几乎所有树式投机方案吸收(包括 EAGLE-3、Medusa 的树变体)。


5. EAGLE-3:直接 Token 预测与多层特征融合

EAGLE-3(arXiv:2503.01840,2025.03)针对 EAGLE-1/2 的另一个瓶颈——特征预测的约束。业界一个明显趋势是”扩大训练数据提升模型智能,但不增加推理成本”(DeepSeek 的 MoE 路线),但 EAGLE-1/2 的草稿头在数据规模扩大时收益有限。作者定位到原因:特征预测(predict features)约束了草稿头从更多数据中获益的能力

5.1 两个核心改动

  1. 放弃特征预测,改回直接 Token 预测:草稿头直接预测下一步的 Token 分布(而不是先预测特征再映射)。绕开特征预测的精度瓶颈,让草稿头能从更大规模训练数据中持续获益。

  2. 多层特征融合(Multi-Layer Feature Fusion):不再只取倒数第二层特征,而是融合低、中、高三个层次的隐藏状态作为草稿头输入。配合一项叫 training-time test 的训练技术(训练时对草稿头做类似测试的采样),显著提升各层特征的利用效率。

5.2 效果

  • 对话模型与推理模型(reasoning models)上都验证,五个任务上加速比最高 6.5x,比 EAGLE-2 再快约 1.4x
  • 在 SGLang 框架中,batch size 64 时吞吐提升 1.38x
  • 直接受益于训练数据规模扩展——“数据越多,草稿头越准”这一性质正式恢复

💡 提示:EAGLE-3 的教训值得单独记住:特征预测在当时是”更好的局部解”,但长期看限制了规模化的收益——因为它把草稿头的优化目标从”预测 Token”变成了”预测特征”这个间接目标。这提醒我们评估投机方案时,除了看当前加速比,还要看它的规模化性质(scaling behavior)。


6. MTP:训练时就学会猜

MTP(Multi-Token Prediction,多 Token 预测)是另一条路线:不”事后加挂”草稿结构,而是在预训练/继续训练时就教模型同时预测多个 Token。最著名的例子是 DeepSeek-V3:每个 Transformer Block 后附带一个 MTP 模块,训练时用”预测下一个 + 下下一个 Token”的辅助损失。

6.1 与 Self-Draft 的关系

MTP 模块本质上是”训练时内建的 EAGLE 头”:

  • 训练时:MTP 模块作为辅助目标参与训练(提升主干模型的表征质量,DeepSeek-V3 论文报告 MTP 提升了推理表现)
  • 推理时:MTP 模块直接当作草稿头使用,配合投机解码验证——无需任何额外训练,即开即用

6.2 vLLM 的 MTP 支持

vLLM 原生识别一批带 MTP 模块的模型架构,method 直接填对应类型即可,不需要单独的草稿权重

method对应模型
mtp / deepseek_mtpDeepSeek-V3 / R1 系列
qwen3_next_mtp / qwen3_5_mtpQwen3-Next / Qwen3.5
glm4_moe_mtpGLM-4-MoE
kimi_k3_mtpminimax_m3_mtpgemma4_mtp各家带 MTP 的新模型

配置示例:

speculative_config = {
    "method": "mtp",          # 或 "deepseek_mtp" 等具体类型
    "num_speculative_tokens": 2,   # 由模型自身 MTP 层数决定上限
}

📌 关键点:MTP 是”原生派”的 Self-Draft——草稿结构在模型出厂时就带,用户零训练成本。它正在成为大模型的事实标准组件:2025 年起 DeepSeek、Qwen、GLM、Gemma 等主流新模型都内建了 MTP。对部署者来说,“目标模型有没有原生 MTP”应该成为选模型时的一个考虑项——有 MTP 的模型,投机解码几乎是免费的。


7. 演进路线小结

方案时间草稿方式树结构加速比训练成本
Medusa2024.01多解码头(并行、无依赖)静态 top-k 树2.2x-3.6x头训练(可冻结 backbone)
EAGLE-12024.01特征级自回归(串行、有依赖)静态2.7x-3.5x(70B)单 Block 级草稿头
EAGLE-22024.06特征级自回归动态树(置信度驱动)3.05x-4.26x同上
EAGLE-32025.03直接 Token 预测 + 多层特征融合动态树最高 6.5x同上,可从大数据获益
MTP2024.12(V3)训练时内建的草稿模块视实现配合验证 1.5x-2x 级(模型自带)

💡 提示:EAGLE 系列的”草稿头 ≈ 1 个 Transformer Block”有个容易被忽略的工程含义——它几乎不增加显存(几亿参数以内),这在显存受限的部署里是决定性的。对比 5.2 节的独立草稿模型(动辄 0.5-3B 完整权重),Self-Draft 把”投机解码的显存税”降了一个数量级。


📝 总结

  • Self-Draft 的本质:用目标模型自己的浅层结构当提案器,α\alphaTdT_d 同时变好,显存税从”一个完整小模型”降到”几个 MLP 层”
  • Medusa:多解码头并行预测 + Tree Attention,开山之作;Medusa-1 冻结 backbone 可无损加装
  • EAGLE-1:特征级自回归,草稿头间有依赖,接受率不再随位置剧降
  • EAGLE-2:置信度校准 → 动态草稿树,把验证预算投给高置信度路径
  • EAGLE-3:放弃特征预测改直接 Token 预测 + 多层特征融合,加速最高 6.5x,且能从训练数据规模化中获益
  • MTP:训练时内建草稿模块,DeepSeek-V3 起成为主流新模型标配,部署者零成本

🎯 自我检验清单

  • Medusa 各头之间为什么没有依赖?这带来了什么收益和代价?
  • Tree Attention 为什么能一次验证多条候选分支?公共前缀如何共享计算?
  • EAGLE-1 的两个关键洞察是什么?“特征级自回归”比 Token 级容易在哪?
  • EAGLE-2 的动态草稿树靠什么信号决定展开策略?为什么有效?
  • EAGLE-3 为什么放弃特征预测?“training-time test” 和”多层特征融合”分别解决什么?
  • MTP 与 Medusa/EAGLE 的本质区别是什么?为什么说它是”出厂自带”?

📚 参考资料