大语言模型(LLM)它越来越多地应用于各个领域。然而,它们的文本生成过程既昂贵又缓慢。这种低效率归因于自回归解码的操作规则:每个单词(token)生成都需要进行前向传播,需要访问数十亿到数千亿的参数 LLM。这导致传统的自回归解码速度较慢。近日,滑铁卢大学、加拿大向量研究所、北京大学等机构联合发布 EAGLE,旨在提高大语言模型的推理速度,确保模型输出文本的一致分布。该方法外推 LLM 第二顶层特征向量可以显著提高生成效率。
- 技术报告:https://sites.google.com/view/eagle-llm
- 代码(支持商业用途 Apache 2.0):https://github.com/SafeAILab/EAGLE
- 比 Lookahead 快速解码(13B) 2 倍;
- 比 Medusa 快速解码(13B) 1.6 倍;
- 可以在 RTX 3090 训练(1-2 天内)和测试;
- 可以与 vLLM、DeepSpeed、Mamba、FlashAttention、其他平行技术,如量化和硬件优化相结合。
加速自回归解码的一种方法是投机采样(speculative sampling)。该技术采用较小的草稿模型,通过标准自回归生成来猜测下一个单词。随后,原始 LLM 并行验证这些猜测的单词(只需要一次前向传播验证)。如果草稿模型准确预测 α 词,原始 LLM 前向传播可以生成 α 1 个词。在投机采样中,草稿模型的任务是基于当前的单词序列来预测下一个单词。使用参数较少的模型来完成这项任务是非常具有挑战性的,通常会产生次优结果。此外,标准投机采样方法中的草稿模型独立预测下一个单词,而不使用原始单词 LLM 语义信息提取丰富,导致潜在效率低下。启发了这种局限性 EAGLE 的开发。EAGLE 利用原始 LLM 提取的上下文特征(即模型第二顶输出的特征向量)。EAGLE 基于以下第一性原理:特征向量序列是可压缩的,因此更容易根据前面的特征向量预测后续的特征向量。EAGLE 训练了一个叫做自回归头的轻量级插件(Auto-regression Head),下一个特征是基于当前特征序列从原始模型的第二顶层预测的。然后使用原始 LLM 冷冻分类首先预测下一个单词。特征比单词序列包含更多的信息,使得回归特征的任务比预测单词的任务简单得多。总之,EAGLE 外推在特征层面,使用小型自回头,然后使用冷冻分类头生成预测的词序列。投机采样,Medusa 和 Lookahead 类似的工作是一致的,EAGLE 重点是每次推理的延迟,而不是整个系统的吞吐量。
上图显示了 EAGLE 标准投机采样,Medusa 以及 Lookahead 关于输入输出的差异。下图展示了 EAGLE 工作流程。在原始 LLM 在前向过程中,EAGLE 特征从第二顶收集。以这些特征和之前生成的单词嵌入为输入,自回归头开始猜下一个单词。然后,使用冻结的分类头(LM Head)确定下一个单词的分布,以确定下一个单词的分布 EAGLE 采样可以从这个分布中进行。通过多次重复采样,EAGLE 如下图右侧所示,类似树状的生成过程已经进行。这个例子中,EAGLE 三次前向传播 “猜” 出了 10 由单词组成的树。
EAGLE 使用轻量级自回归来预测原始 LLM 特征。为确保生成文本分布的一致性,EAGLE 然后验证预测的树状结构。这个验证过程可以通过一次前向传播来完成。通过这个预测和验证循环,EAGLE 能快速生成文本词。回头训练的成本很小。EAGLE 使用 ShareGPT 数据集训练,不包括在内 70,000 轮对话。自回归头的可训练参数也很少。如上图所示,大部分组件都是冻结的。唯一需要额外训练的是自回头,这是一个单层 Transformer 结构,具有 0.24B-0.99B 参数。即使是 GPU 在资源不足的情况下,也可以训练自回头。例如,Vicuna 33B 自回头可以在那里 8 卡 RTX 3090 服务器上在 24 训练在小时内完成。Medusa 只使用第二顶层的特征来预测下一个单词和下一个单词...与 Medusa 不同,EAGLE 还动态预测当前采样得到的单词嵌入作为自回头输入的一部分。这个额外的信息帮助 EAGLE 抽样过程中不可避免的随机性处理。假设提示词是下图中的例子 “I”。LLM 给出了 “I” 后面跟着 “am” 或 “always” 的概率。Medusa 不考虑是抽样 “am” 还是 “always,直接预测 “I” 下一个单词的概率。因此,Medusa 目标是只给定 “I” 在此基础上,预测 “I am” 或 “I always” 下一个单词。由于抽样过程的随机性,Medusa 的相同输入 “I” 下一个单词输出可能会有所不同 “ready” 或 “begin输入和输出之间缺乏一致的映射。相比之下,EAGLE 输入包括嵌入抽样结果的单词,以确保输入和输出之间的一致映射。这种区别使 EAGLE 可以考虑抽样过程中建立的上下文,然后更准确地预测后续单词。
投机采样,Lookahead 和 Medusa 等其他猜测 - 不同的验证框架,EAGLE 在 “猜词” 阶段采用类似树状的生成结构,从而达到更高的解码效率。如图所示,标准投机采样和 Lookahead 线性或链式的生成过程。Medusa 该方法在猜测阶段无法构建上下文,因此通过笛卡尔积生成树,导致相邻层之间形成全连接图。这种方法通常会导致无意义的组合,例如 “I am begin”。对比之下,EAGLE 它创造了一个更稀疏的树结构。这种稀疏的树结构防止了无意义的序列,将计算资源集中在更合理的单词组合上。
标准投机采样方法在进行中 “猜词” 在这个过程中保持分布的一致性。为适应树形猜词场景,EAGLE 将这种方法扩展成多轮递归形式。以下是多轮投机采样的伪代码。在树的生成过程中,EAGLE 记录每个抽样词对应的概率。通过多轮投机采样,EAGLE 确保最终生成的每个单词的分布和原始 LLM 保持一致的分布。
下图展示了 EAGLE 在 Vicuna 33B 关于不同任务中的加速效果。涉及大量固定模板 “编程”(coding)任务显示出最佳的加速性能。
欢迎体验 EAGLE,并通过 GitHub issue 反馈建议:https://github.com/SafeAILab/EAGLE/issues以上是大模型推理效率无损提升的三倍。滑铁卢大学、北京大学等机构发布了EAGLE的详细信息。请关注其他相关文章!
p