博客算法工具链【大模型】EAGLE 与 EAGLE-3:用“特征预测”加速投机解码

【大模型】EAGLE 与 EAGLE-3:用“特征预测”加速投机解码

no_name2026-09-28
35
1

声明:本文主要参考公开资料整理撰写,如有错漏,欢迎评论交流~

1. 从逐 Token Decode 说起

大语言模型生成文本时,Decode 阶段具有严格的自回归依赖:只有得到当前 Token,才能计算下一个 Token。KV Cache 可以避免重复计算已经出现的上下文,但没有消除 Token 之间的串行依赖。

对于大模型,单个 Decode Step 往往只处理很少的 Token,却要读取大量模型权重,因此常呈现 memory-bound 特征。投机解码的目标,就是在不跳过 Target Model 校验的前提下,让一次 Target Forward 尽可能推进多个 Token。

2. 投机解码:Draft 负责猜,Target 负责判

典型的投机解码包含一个轻量 Drafter 和一个最终负责生成质量的 Target Model。Drafter 先提出最多 K 个候选 Token,Target Model 再用一次批量 Forward 计算这些位置的 logits,并 从前向后 决定哪些候选可以接受。

假设 Drafter 提出 A B C D,Target 判断前三个候选可接受、第四个不可接受,那么本轮至少可以输出 A B C,并在拒绝位置使用 Target 的结果继续生成。
这里还有一个经常被忽略的细节:验证 K 个 draft token 时,Target 通常还会产生下一个位置的 bonus token。

当每轮最多起草 K 个 Token 时,平均接受长度的范围是 1 到 K+1;其中“1”就是 Target 自己产生的 bonus token。

3. 为什么需要 EAGLE/EAGLE3

普通小型 Draft Model 虽然比 Target Model 便宜,但它与 Target 是两个独立模型。模型越小,起草越快,却可能越不了解 Target 的真实生成倾向,导致接受率下降;模型越大,接受率可能提高,但起草成本也随之增加。

EAGLE 的切入点是:Target Model 在上一轮计算中已经产生了信息密度很高的隐藏状态,与其让 Drafter 只看历史 Token,不如把 Target 的隐藏特征也交给 Drafter。

3.1 EAGLE:在特征空间里做自回归外推

EAGLE 全称为 Extrapolation Algorithm for Greater Language-model Efficiency。它不是简单复制一个缩小版 Target Model,而是训练一个轻量的特征预测网络:输入当前 Token 的 embedding 和 Target Model 已计算出的 hidden state,外推(Extrapolation)出未来位置的隐特征向量,再复用 Target 冻结的 LM 头,把预测出来的特征转成 token 概率 / 候选 token。

“Feature Extrapolation(特征外推)”是理解 EAGLE 的关键。Token 是离散结果,而隐藏特征包含更丰富的上下文信息。Drafter 借助 Target 的特征进行预测,通常比只依赖 Token 序列的小模型更容易贴近 Target,从而争取更高的接受率。

不过,EAGLE 并没有天然消除 Drafter 内部的串行依赖。在 vLLM 默认实现中,如果配置 num_speculative_tokens=K,Drafter 会先生成第一个候选,再循环执行 K-1 次轻量 Draft Forward,逐步得到后续候选。
只有模型经过相应训练并显式启用 parallel_drafting 时,才属于并行生成多个 draft token 的路径。不能把“投机解码能一次验证多个 Token”等同于“EAGLE 一次 Forward 就生成多个 Token”。

3.2 EAGLE-3:从单一最终特征走向多层特征融合

EAGLE-3 延续了特征级 Drafter 的思路,但进一步使用 Target Model 的多个辅助隐藏状态。不同深度的 Transformer 层携带的信息侧重点不同:较浅层更接近局部和词法信息,中间层逐步形成语义表示,较深层更贴近最终预测。将多层特征融合后,Drafter 可以获得比单一末层状态更丰富的条件信息。

这里不能简单写成“固定使用最后三层”。在 vLLM 中,辅助层首先由 checkpoint 的 eagle_aux_hidden_state_layer_ids 等配置决定;若 checkpoint 没有指定,通用接口才会按模型深度选择三个默认位置,分别靠近早期、中间和后期。
还需要保留一个实现层面的例外:部分 EAGLE-3 checkpoint 会设置 use_aux_hidden_state=false,退化为只使用最后层输出。因此,“多层特征融合”是 EAGLE-3 的典型设计,而不是所有 checkpoint 都必须满足的硬编码规则。

3.3 EAGLE 与 EAGLE-3 有什么不同

对比维度

EAGLE

EAGLE-3

核心输入

当前 Token embedding 与 Target hidden state

当前 Token embedding 与一个或多个 Target 辅助 hidden states

特征来源

通常以最终隐藏特征为主

典型实现融合多个层级的隐藏特征

vLLM 方法名

method="eagle"

method="eagle3"

默认 Draft 方式

自回归、逐步生成 K 个候选

自回归、逐步生成 K 个候选

Target 职责

批量验证并决定最终输出

批量验证并决定最终输出

EAGLE-3 的主要改进点是 Drafter 获得了更丰富的 Target 特征,而不是取消 Target Verification,也不是天然把所有候选 Token 改成一次并行生成。

4 为什么不会牺牲生成正确性

投机解码中,Drafter 只提供候选,最终输出仍由 Target Model 的 logits 和验证算法决定。Drafter 猜错的直接后果是接受长度变短,而不是错误 Token 被无条件写入结果。

在 greedy decoding 下,可以直观理解为逐位置比较 draft token 是否与 Target 的选择一致;一旦不一致,就在该位置使用 Target 的结果。在概率采样下,需要使用与配置相匹配的拒绝采样流程,才能保持目标采样分布。

因此,α=min(1,p(x)/q(x)) 是“Draft 按概率分布 q 采样”场景下的经典接受概率,但不能不加条件地套到所有 EAGLE 配置上。当前 vLLM 的 draft_sample_method 默认值是 greedy,验证侧则由标准 rejection sampler 结合实际采样参数处理。

5 性能收益取决于什么

EAGLE 的收益来自一个权衡:用较便宜的 Draft 计算,换取更少的 Target 串行 Decode Step。决定最终加速效果的不是某一个指标,而是以下因素共同作用:

  • Draft 成本:Drafter 越轻、生成 K 个候选越快,额外开销越小。
  • 接受率:提出的候选中有多少被 Target 接受。
  • 平均接受长度:每轮验证实际输出多少 Token,包含 bonus token。
  • 候选K 的大小:候选K 太小,减少的串行步数有限;候选K 太大,Draft 与验证开销会上升。
因此,“候选越多越快”是不成立的。vLLM 的动态投机解码文档特别指出,验证阶段的有效 batch 可近似理解为 BS × K;并发度升高后,过大的 K 可能让验证从 memory-bound 转向 compute-bound,反而使 TPOT 变差。实际部署应基于目标模型、硬件和业务并发测量 K,而不是照搬固定值。

6 EAGLE 与 KV Cache 的关系

KV Cache 与 EAGLE 优化的是两个不同维度。KV Cache 复用已经计算过的历史 K/V,避免每次 Decode 重算全部上下文;EAGLE 尝试预测未来 Token,让一次 Target Verification 推进多个位置。

实现上,Target 与 Drafter 还可能分别维护自身需要的 KV Cache。EAGLE 并不是 KV Cache 的替代品,而是在 KV Cache 基础上进一步降低 Decode 的串行性。

7. 适用场景与局限

EAGLE 更适合 Decode 占比高、中低 QPS(Queries-per-second,并发)、单步 Decode 受内存带宽限制的场景,例如长文本生成、代码生成、对话和 Agent 长输出。若请求主要耗时在长 Prompt 的 Prefill,或者系统已经处于高并发、高计算利用率状态,端到端收益可能有限,甚至可能因为 Draft 和批量验证开销而出现负收益。

部署时还需要考虑 Drafter checkpoint 与 Target 的模型家族、词表、隐藏维度和辅助层配置是否匹配;Draft 模型会增加权重和 KV Cache 占用;EAGLE-3 还要求 Target 实现能够导出所需的辅助隐藏状态。

8. 一句话理解 EAGLE / EAGLE-3

EAGLE 利用 Target 已计算的隐藏特征,让轻量 Drafter 在特征空间中自回归预测未来 Token;EAGLE-3 进一步融合多个层级的 Target 隐藏特征。候选最终仍由 Target 批量验证,从而在保持 Target 生成语义的前提下,减少串行 Decode 轮数。

9. 参考资料

算法工具链
社区征文杂谈
评论1
0/600
  • b-own-1790756127
    Lv.1

    你好

    2026-10-01
    0
    0