Hugging Face 低延迟文本生成的辅助生成

TL;DR

Hugging Face 推出了 Assisted Generation(辅助生成),这是一种旨在降低自回归文本生成延迟的新解码方法。通过使用更小、更快的助手模型来提出候选标记,然后由更大的模型在一次前向传播中进行验证,延迟可在普通硬件上降低至最高 10 倍,尤其在使用内存卸载时。

文本生成延迟的瓶颈

文本生成的延迟主要是内存带宽问题,而非计算问题。在标准的自回归前向传播中,瓶颈出现在将模型层权重从 GPU RAM 加载到 GPU 计算核心时。由于大型模型需要数百次顺序前向传播才能生成完整的响应,这种内存传输开销成为主要成本。

虽然已有诸如 Flash Attention、INT8 量化、批处理(提升吞吐量)和张量并行(分配内存带宽)等优化手段,但它们往往伴随高昂的成本或在延迟上做出妥协。辅助生成通过减少主模型所需的前向传播总次数来解决这一问题。

辅助生成的工作原理

辅助生成利用了语言解码器的一个特定属性:单次前向传播可以用于验证一系列标记,而不仅仅是预测下一个标记。如果在不使用缓存的情况下将一串标记传入模型,模型会返回该序列中每个位置的 logits。

辅助生成循环

该过程在小助手模型和大主模型之间循环进行:

  1. 候选生成:小助手模型使用贪婪解码生成一段短的候选标记序列(起始为 5 标记窗口)。
  2. 验证:主模型对这些候选标记进行一次前向传播,以获取每个位置的 logits。
  3. 比较:将主模型预测的标记与助手的候选标记从左到右进行比较。
  4. 纠正:首次不匹配的位置标识出助手失效的点。保留主模型在该不匹配点的预测,并丢弃其后所有助手的候选标记。
  5. 调整:一种启发式方法会根据下一次迭代请求的候选数量进行调整:如果所有标记匹配,则窗口增加 2;若出现任何不匹配,则窗口减少 1。

对助手模型的要求

为保持效率,助手模型必须满足两个条件:

  • 共享分词器:助手必须使用与主模型完全相同的分词器,以避免昂贵的基于 CPU 的解码和重新编码步骤。
  • 规模差异:助手模型应至少比主模型小一个数量级,以确保其生成时间相对于主模型的前向传播可以忽略不计。

性能与能力

辅助生成根据硬件和模型配置提供不同程度的加速:

  • 内存卸载:当模型无法放入 GPU 内存而需依赖卸载时,可获得最显著的提升,速度提升最高可达 10 倍
  • GPU 常驻模型:当模型能够放入 GPU 内存时,提速范围为 2 倍(标准)至 3 倍(使用 INT8 量化)。
  • 任务适用性:该方法对基于输入的任务最为有效,如自动语音识别(ASR)、翻译和摘要。

与采样的兼容性

虽然该方法设计用于贪婪解码,但也可以与多项式采样一起使用。然而,助手的有效性取决于 temperature 参数。低 temperature(接近 0)近似贪婪解码,能够保留大部分延迟优势;而高 temperature 会增加随机性,使助手更容易失效,从而降低加速效果。

未来方向与相关工作

Hugging Face 认为,文本生成的未来可能会摆脱每个标记固定计算成本的模式。相反,架构可以设计为根据文本复杂度,由不同规模的模型生成序列的不同部分。

该方法与其他研究共享核心原理,特别是 Blockwise Parallel Decoding(Google Brain)和 Speculative Sampling(DeepMind),两者都利用前向传播来验证更长的续写。

Sources