投机解码:从eagle1到dflash

发布时间:2026/7/18 20:15:53

投机解码:从eagle1到dflash EAGLE高质量的顺序“作家”摘要本文系统介绍了EAGLE系列投机解码技术的演进历程。EAGLE-1首创特征级预测将预测目标从Token升级为隐藏特征提升了鲁棒性但受限于串行生成。EAGLE-2引入动态草稿树结构实现多分支并行验证显著提高容错率。EAGLE-3通过回归Token预测、多层特征融合和训练时测试TTT机制解决了训练-推理分布偏移问题解锁了草稿模型的Scaling Law达到最高6.5倍加速比。文章还对比了DFlash并行草稿模型展示了不同技术路线的优劣。在最初的 SD 中人们通常使用一个完全独立的、更小的模型比如 125M 参数的小模型来给大模型如 7B 或 33B当草稿模型。一、EAGLE-1特征级自回归草稿头Feature-level AR Drafting第 t 步 [大模型顶层特征 f_t] [上一步Token嵌入 e_{t-1}] ↓ 输入草稿头 预测出下一步特征 f_{t1} ← 【这里是模型的预测目标是特征】 ↓ 输入大模型冻结的LM Head 采样得到下一个Token x_t ← 【这是给外部看的输出】 ↓ 第 t1 步 [上一步预测的特征 f_{t1}] [刚采样的Token嵌入 e_t] ↓ 再次输入草稿头 预测出下一步特征 f_{t2} ↓ ...以此类推核心思想从预测下一个词升级为预测下一个特征向量。EAGLE-1发现传统投机解码在Token空间做预测是舍本逐末——Token只是最终离散化的结果而大模型真正的思维藏在隐藏状态Hidden States里。三大核心创新为什么特征预测更鲁棒Token预测脆弱选错一个词 → 后续全基于错词生成 → 迅速滑向逻辑崩坏 → 接受率骤降。特征预测鲁棒即使当前Token选得略微偏差特征向量中语义背景仍在后续预测有机会把逻辑带回来。 比喻Token是浮出水面的冰山尖隐藏状态是水面下的巨大冰山。猜冰山尖不如猜冰山本体。局限性EAGLE-1的痛点仍是串行生成一个接一个预测存在Tdraft∝γT_{draft}∝ γTdraft​∝γ的线性开销。如果中间某个特征预测偏了后续仍会跟着偏虽然比Token级好但问题依然存在。二、EAGLE-2动态草稿树 位置不变性Dynamic Draft Tree【阶段一草稿生成内部循环发生质变】 当前已知节点: [特征 f_0] [Token嵌入 e_0] ↓ 输入轻量级草稿头执行 EAGLE-1 的节点逻辑 预测出下一层特征候选集 ↓ 输入冻结的LM Head 【采样保留 Top-K 个最佳Token】K3 为例 ↓ ┌───────┼───────┐ ▼ ▼ ▼ x_1 x_2 x_3 ← 第1层3个分支节点 [f_1] [f_2] [f_3] │ │ │ ▼ ▼ ▼ 针对每个节点**再次**执行 EAGLE-1 逻辑 [ f_1e_1 ] → 预测 → 采样Top-K ... [ f_2e_2 ] → 预测 → 采样Top-K ... │ │ │ ▼ ▼ ▼ x_1a,b,c x_2a,b,c x_3a,b,c ← 第2层9个节点形成树杈 │ │ │ ▼ ▼ ▼ 重复此过程直到达到预设的树深度/最大草稿数 ↓ 【阶段二组装与验证新增适配层】 将生成的整棵树“压平”成一维序列 [x_1, x_2, x_3, x_1a, x_1b, x_1c, x_2a, ...] ↓ 【关键新增步骤 ①】附加“位置编码”Positional Encoding 作用给压平后的序列注入树结构信息。 告诉目标模型x_1a 是 x_1 的孩子x_2a 是 x_2 的孩子区分堂兄弟。 ↓ 【关键新增步骤 ②】构造“树因果掩码”Tree Attention Mask 作用生成一张 0/1 注意力表格。 强制规定验证时 x_1a 只能看到 x_1 和根节点祖先绝对看不到 x_2堂兄弟。 ↓ 【阶段三目标模型验证大循环保持不变】 将带位置编码和树掩码的序列送入【目标模型】 ↓ 目标模型 **一次前向传播**并行验证整棵树的所有节点 ↓ 根据拒绝采样法则接受最长的、逻辑连贯的路径前缀 例如接受 x_1 - x_1a拒绝 x_1b ↓ 回退到最后一个被接受的节点如 x_1a ↓ 【回到阶段一】以 x_1a 为新的起点继续下一轮的树生成...核心思想从生成一条直线升级为生成一棵树——每步保留多个候选分支一次性验证整棵树。EAGLE-2继承了EAGLE-1的特征预测能力但将生成方式从串行直线改为并行树状在单次验证中探索多条路径极大提升了容错率。关键机制为什么树比直线好直线EAGLE-1第2个Token依赖第1个 → 第1个错了整条线全废。树EAGLE-2第1步保留A和B两个候选第2步在A后面生成A1/A2在B后面生成B1/B2。即使A错了B那条路可能还是对的单次验证可以同时评估多条路显著提高了单轮验证的命中率。 比喻EAGLE-1是沿着一条路走走错了重来EAGLE-2是走到岔路口时把各条岔路都标记出来让验证者一次性评判哪条路最靠谱。与EAGLE-1的关系继承EAGLE-2仍然采用特征级预测EAGLE-1的核心优势。升级生成方式从严格串行变为树状并行允许在一次验证中覆盖更多可能性。效果在相同草稿预算下EAGLE-2的接受长度比EAGLE-1有明显提升尤其在长块生成场景。尚未解决的问题留给EAGLE-3训练阶段使用教师强制Teacher Forcing推理时面对的是模型自己生成的草稿存在训练-推理分布偏移。EAGLE-3通过训练时测试TTT机制在训练阶段就模拟推理时的草稿-验证循环让草稿头学会在次优特征上也能做出正确预测。三、EAGLE-3【阶段一草稿生成节点内部逻辑发生质变】 当前已知条件: [大模型 多层融合特征 F_t^{multi}] [上一步Token嵌入 e_{t-1}] 注F_t^{multi} 不再仅是顶层而是融合了中间层的“多视角”特征 ↓ 输入升级后的轻量级草稿头 【直接预测输出概率分布Logits over Vocabulary】 ← 这里是最大质变【预测目标回归为 Token 级别】不再是预测特征向量 ↓ 【直接采样得到下一个Token x_t】 ← 不再需要经过大模型的 LM Head 做“翻译”草稿头自己直接输出单词 ID。 ↓ 第 t1 步注意由于预测的是Token输入侧随之改变 [大模型 多层融合特征 F_{t1}^{multi}] [刚采样的Token嵌入 e_t] ↓ ...以此类推可使用线性结构也可扩展到 EAGLE-2 的树状结构1.核心思想从预测特征回归预测Token并通过训练时测试解决训练-推理分布偏移问题。EAGLE-3 最令人意外的一点是它放弃了 EAGLE-1 引以为傲的特征级预测重新回到 Token 级预测。但这个回归并非倒退而是建立在两个关键升级之上多层特征融合Multi-layer Feature Fusion不再仅依赖目标模型的顶层特征而是融合多个中间层的特征。训练时测试Training-Time Test, TTT在训练阶段模拟推理时的草稿-验证循环让草稿头学会应对自己生成的次优输入。2.为什么要做这些改变—— EAGLE-1 的隐藏问题2.1 特征预测的Scaling Law 失效LLM 社区的一个趋势是用更多的训练数据来提升模型性能而不增加推理成本。LLaMA 1/2/3 就是典型例子——同样 7B 参数量训练数据从 1T 增长到 15T Token性能持续提升。按理说草稿模型也应该从更多训练数据中受益。但 EAGLE 团队发现增加训练数据EAGLE-1 的加速比几乎不涨。论文中有一张关键图表Figure 1显示随着训练数据规模增加EAGLE-1 的加速曲线是平的而 EAGLE-3 是持续上升的。原因EAGLE-1 的特征预测约束Feature Prediction Constraints成了瓶颈。特征向量高维浮点数包含的信息远比Token离散ID丰富。预测一个连续的高维向量比预测一个离散的类别要难得多回归任务 vs 分类任务草稿头通常只有1~2层的模型容量有限它学习“完美特征”的能力很快就会达到瓶颈。即使你喂给它再多数据它的预测误差也无法进一步降低了。这就好比让一个小学生轻量头去模仿大学教授大模型的解题思路看再多例题他的思考深度上限就那么高。2.2 训练与推理的分布偏移EAGLE-1 在训练时用的是教师强制Teacher Forcing——每一步的输入都是真实的目标模型特征。但在推理时草稿头面对的是自己上一轮预测出的特征——这些特征天然带有误差。比喻训练时你一直在抄标准答案教师强制但考试时你必须自己写答案自回归推理。抄答案再熟练也不代表自己会写。这个训练-推理分布偏移Train-Inference Distribution Gap导致 EAGLE-1 无法从更多训练数据中受益——因为它学的永远是如何在完美输入下做预测而不是在有噪声的输入下做预测。“特征预测约束”决定了模型预测能力的天花板很低“分布偏移”决定了即使没到天花板多出来的数据也无法有效利用。两者叠加导致EAGLE-1的加速曲线随数据量增加是平的。3.EAGLE-3 的两大核心升级3.1 升级①从顶层特征到多层特征融合EAGLE-1 的做法只复用目标模型的最顶层LM Head 之前那一层的特征。EAGLE-3 的做法融合目标模型多个中间层的特征。直觉只靠顶层特征就像只看一个人的最终结论而多层融合就像同时看他的思考过程——推理链的每一步都提供了不同的信息融合后预测更准。预测目标Output回归到Token级别EAGLE-3不再直接预测那个4096维的复杂特征向量而是像传统SD一样直接预测下一个具体的单词IDToken。这样一来预测任务从困难的“高维回归”变成了相对简单的“分类”打破了特征预测的容量约束解决了问题1中的第一重枷锁。**预测依据Input**依然依赖多层特征虽然预测目标是Token但EAGLE-3绝不是只靠前一个Token ID去猜。它依然会读取大模型的多个中间层Intermediate Layers 的隐藏状态把这些富含语义的向量拼接起来作为草稿头做“分类”时的参考上下文。3.2 升级②训练时测试Training-Time Test, TTT—— 核心创新TTT 是 EAGLE-3 最关键的机制。其核心逻辑是在训练阶段故意让草稿头自己生成部分输入而不是永远用真实的目标模型特征。具体来说阶段EAGLE-1 的做法EAGLE-3 (TTT) 的做法训练输入每一步都用真实的目标模型特征部分步骤用草稿头自己上一轮预测的特征训练目标让草稿头学会在完美输入下预测让草稿头学会在有噪声的输入下也能预测推理表现训练和推理的输入分布不一致 → 性能受限训练时就模拟了推理场景 → 分布对齐 → 性能更好比喻TTT 相当于让一个学生在模拟考试而不是只做课本例题中训练。模拟考的环境时间压力、题目难度更接近真实考试所以真正考试时发挥更稳定。4.EAGLE-3 的性能表现指标数值最大加速比高达6.5 倍相比 EAGLE-2 的提升约1.4 倍SGLang 框架吞吐量批大小 64 时提升1.38 倍覆盖模型类型聊天模型Chat Models 推理模型Reasoning Models评估任务数5 个任务EAGLE-3 还解锁了草稿模型的 Scaling Law——随着训练数据增加加速比持续提升这是 EAGLE-1 做不到的。5、EAGLE 家族三代对比最终版维度EAGLE-1EAGLE-2EAGLE-3预测对象特征Feature特征Token回归 Token 级特征来源仅顶层特征仅顶层特征多层融合生成方式串行直线动态草稿树多分支并行动态草稿树 TTT核心创新特征级预测树状生成 位置不变性训练时测试TTT最大痛点训练-推理分布偏移分布偏移仍未解决解决分布偏移解锁 Scaling Law最大加速~3x~5x~6.5x6、关键概念速查术语含义特征预测Feature PredictionEAGLE-1 的核心预测隐藏状态而非 TokenToken 预测Token PredictionEAGLE-3 回归的方向直接预测 Token但用更好的输入特征多层特征融合Multi-layer Feature FusionEAGLE-3 的做法融合目标模型多个中间层的特征而非仅顶层训练时测试Training-Time Test, TTTEAGLE-3 的核心创新训练时模拟推理场景让草稿头学会应对自己的预测误差训练-推理分布偏移EAGLE-1 的根本问题训练时输入完美推理时输入有噪声Scaling Law在草稿模型上EAGLE-3 解锁的能力训练数据越多加速比越高四 DFlash高效的并行“画家”DFlash是一个双向块扩散Bidirectional Block-diffusion草稿模型。核心原理块扩散与并行生成DFlash采用类似扩散模型Diffusion Model的思路利用非因果Non-causal注意力掩码让模型在单次前向传播中同时处理所有待预测位置的信息。工作流程一次前向生成整块输入准备将目标模型的隐藏状态和一系列掩码TokenMask Tokens 的嵌入一同输入草稿模型。并行起草通过堆叠的、带有双向注意力的草稿层模型在一次前向传播中同时为所有掩码位置生成预测。验证与接受目标模型验证整个块接受最长的正确前缀。优势与局限优点是起草速度极快生成速度几乎不依赖于块的大小能带来更高的加速比。局限是生成质量可能不稳定由于Token间缺乏依赖可能产生“虽然个体合理但彼此矛盾”的树导致接受率下降。DFlash 的核心创新点之一体现在图中部的 KV Cache 区域。注入机制 融合后的目标模型特征被直接注入到草稿模型Draft Layer 1, 2...每一层的 Key (K) 和 Value (V) 投影中。持续引导 与传统的将特征仅作为输入Input Fusion不同KV 注入确保了目标模型的引导信息在草稿模型的所有深度层级中都能保持强度不会随着层数加深而稀释【输入准备】 已知上下文: [A, B, C, D]D是锚点 目标预测接下来的3个Token 草稿模型输入序列: 位置1: D锚点真实Token 位置2: [MASK]占位符 位置3: [MASK]占位符 位置4: [MASK]占位符 ↓ 【草稿模型内部一次前向传播】 所有位置的 Q、K、V 在同一批矩阵乘法中同时计算 ↓ 全注意力Full Attention每个位置都可以看到所有位置 因为 [MASK] 占位符之间互相看不会泄露未来信息 ↓ 同时输出位置2、3、4的完整概率分布 ↓ 【采样得到具体Token】 位置2 → E概率最高 位置3 → F概率最高 位置4 → G概率最高 输出整块候选: [E, F, G] ↓ 【目标模型验证一次前向传播】 目标模型并行计算 E、F、G 在其分布下的概率 ↓ 逐位置计算接收概率: min(1, p_target / p_draft) ↓ 从左到右依次掷骰子: 位置2 (E): 接收概率 1.0 → 必收 位置3 (F): 接收概率 0.89 → 收 位置4 (G): 接收概率 0.20 → 拒绝 ↓ 【本轮结束】 接受前缀: [E, F] 拒绝: [G] 以 F 为新锚点进入下一轮

相关新闻