5.3 Self-Draft 方案:Medusa、EAGLE 与 MTP
不引入独立小模型,用目标模型自己的结构做提案器——Medusa 多解码头、EAGLE 特征级自回归与动态草稿树、DeepSeek MTP,以及它们各自的加速表现
5.2 节留下了两个问题:独立草稿模型占显存(第二个模型),而且**“猜得准”和”猜得快”互斥**(模型越大越准但越慢)。Self-Draft(自提案)方案把这两个问题一起解决:不引入任何独立模型,让目标模型自己的浅层结构当提案器。这类方案近年演进极快——Medusa(2024.01)→ EAGLE(2024.01)→ EAGLE-2(2024.06)→ EAGLE-3(2025.03),加速比从 ~2x 一路卷到 6.5x。这一节把这条演进路线讲清楚。
📑 目录
- 1. 思路:为什么要”自己猜自己”
- 2. Medusa:多解码头并行预测
- 3. EAGLE-1:特征级自回归
- 4. EAGLE-2:动态草稿树
- 5. EAGLE-3:直接 Token 预测与多层特征融合
- 6. MTP:训练时就学会猜
- 7. 演进路线小结
- 📝 总结
- 🎯 自我检验清单
- 📚 参考资料
1. 思路:为什么要”自己猜自己”
回顾 5.1 的加速比公式:。独立草稿模型的困境是 与 的绑定。Self-Draft 的破局点是:
草稿分布 不需要来自”另一个模型”——它可以来自目标模型自己的中间层。
目标模型的前几层 Transformer Block 已经编码了丰富的特征:浅层特征包含词汇/句法信息,深层特征接近语义。如果我们在某个中间层”加挂”一个极小的头(通常一两个 MLP 层,参数量是目标模型的 0.1%-1%),让它基于中间层特征预测下一个 Token,就得到了一个”和目标模型共享 99% 计算、分布天然接近”的提案器:
- 与 天然接近 → 接受率 高(特征来自同一个模型!)
- 头只有几层 MLP → 草稿开销 极小,且不需要额外显存装一个完整模型
- 可训练 → 用目标模型的输出做蒸馏式训练,让 进一步逼近
代价是:需要一个训练步骤(虽然比训练完整草稿模型便宜得多),以及加挂结构带来的工程复杂度。它和”蒸馏一个独立小模型”的区别在于——蒸馏是”学一个替身”,Self-Draft 是”长一个分身”:分身共享本体的所有知识,只是比本体浅。
📌 关键点:Self-Draft 的本质是把”草稿模型的训练成本”从”训练/寻找一个完整小模型”降到”训练几个 MLP 头”,同时让 和 同时变好。这是它相对 5.2 节方案的结构性优势,也是 2024-2025 年投机解码研究的主战场。
2. Medusa:多解码头并行预测
Medusa(arXiv:2401.10774,2024.01,加州大学伯克利分校)是 Self-Draft 路线的开山之作。
2.1 结构:N 个并行的”预测头”
在目标模型的最后一层隐藏状态 上,挂 N 个额外的解码头 :
- 基于 预测第 个 Token:
- 基于 预测第 个 Token:
- ……
- 基于 预测第 个 Token:
关键设计:每个头独立预测,头与头之间没有自回归依赖(否则就退化成串行)。代价是 不知道 是什么——预测第 个 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-2 | backbone + 头联合微调 | 接受率更高,但 backbone 被改动,不再是严格的无损加速(输出分布有细微变化),且需要原始训练数据 |
💡 提示:Medusa-1 的”冻结 backbone”是它工程上最优雅的一点——它把投机解码变成了一个纯加法:模型不动,加几个头,头训练好即插即用。这也是 vLLM 至今保留 Medusa 支持的原因。论文报告在 Vicuna-7B 上加速 2.2x,在 MT-Bench 上约 2.2x-3.6x(配合 Medusa-2)。
2.4 局限
- 各头独立预测,位置越靠后的头信息越少,接受率衰减快
- 树的分支数随 和 top-k 指数膨胀,验证开销增大
- 只在最后一个隐藏层挂头,没有利用中间层特征
📌 关键点:Medusa 的核心贡献是”多候选 + 树验证”的框架——它让”一次草稿、多路验证”成为可能。但”头间无依赖”导致的接受率衰减,正是 EAGLE 要解决的问题。
3. EAGLE-1:特征级自回归
EAGLE(Extrapolation Algorithm for Greater Language-model Efficiency,arXiv:2401.15077,2024.01)的作者观察到 Medusa 的问题,提出两个关键洞察:
- 在特征层做自回归比在 Token 层做更容易:Token 层的下一 Token 分布高度多样(一个前缀可以接很多合法 Token),但特征层(倒数第二层的隐藏状态)的”下一步特征”相对平滑、可预测
- 特征自回归的不确定性可以通过”把上一位置的 Token 也喂进来”消除:EAGLE 的草稿头输入是
(特征 h_t, 上一 Token x_t),输出是预测的下一步特征 ,再经 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 节”提高 比加大 更划算”的结论落到了实现上:预算有限时,把展开量投给高置信度路径。这个机制后来被几乎所有树式投机方案吸收(包括 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 两个核心改动
-
放弃特征预测,改回直接 Token 预测:草稿头直接预测下一步的 Token 分布(而不是先预测特征再映射)。绕开特征预测的精度瓶颈,让草稿头能从更大规模训练数据中持续获益。
-
多层特征融合(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_mtp | DeepSeek-V3 / R1 系列 |
qwen3_next_mtp / qwen3_5_mtp | Qwen3-Next / Qwen3.5 |
glm4_moe_mtp | GLM-4-MoE |
kimi_k3_mtp、minimax_m3_mtp、gemma4_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. 演进路线小结
| 方案 | 时间 | 草稿方式 | 树结构 | 加速比 | 训练成本 |
|---|---|---|---|---|---|
| Medusa | 2024.01 | 多解码头(并行、无依赖) | 静态 top-k 树 | 2.2x-3.6x | 头训练(可冻结 backbone) |
| EAGLE-1 | 2024.01 | 特征级自回归(串行、有依赖) | 静态 | 2.7x-3.5x(70B) | 单 Block 级草稿头 |
| EAGLE-2 | 2024.06 | 特征级自回归 | 动态树(置信度驱动) | 3.05x-4.26x | 同上 |
| EAGLE-3 | 2025.03 | 直接 Token 预测 + 多层特征融合 | 动态树 | 最高 6.5x | 同上,可从大数据获益 |
| MTP | 2024.12(V3) | 训练时内建的草稿模块 | 视实现 | 配合验证 1.5x-2x 级 | 零(模型自带) |
💡 提示:EAGLE 系列的”草稿头 ≈ 1 个 Transformer Block”有个容易被忽略的工程含义——它几乎不增加显存(几亿参数以内),这在显存受限的部署里是决定性的。对比 5.2 节的独立草稿模型(动辄 0.5-3B 完整权重),Self-Draft 把”投机解码的显存税”降了一个数量级。
📝 总结
- Self-Draft 的本质:用目标模型自己的浅层结构当提案器, 和 同时变好,显存税从”一个完整小模型”降到”几个 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 的本质区别是什么?为什么说它是”出厂自带”?
📚 参考资料
- Cai et al., Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads(https://arxiv.org/abs/2401.10774)
- Li et al., EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty(https://arxiv.org/abs/2401.15077)
- Li et al., EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees(https://arxiv.org/abs/2406.16858)
- Li et al., EAGLE-3: Scaling Up Inference Acceleration of Large Language Models via Training-Time Test(https://arxiv.org/abs/2503.01840)
- DeepSeek-AI, DeepSeek-V3 Technical Report(https://arxiv.org/abs/2412.19437)
- vLLM 官方文档:EAGLE(https://docs.vllm.ai/en/latest/features/speculative_decoding/eagle.html)
- vLLM 官方文档:MTP(https://docs.vllm.ai/en/latest/features/speculative_decoding/mtp.html)