专栏名称: Hugging Face
The AI community building the future.
目录
相关文章推荐
河北交通广播  ·  【992 | 提醒】今天起,可以查分了→ ·  昨天  
河北交通广播  ·  【992 | 最新】故意杀人案,警方悬赏缉凶! ·  昨天  
河北交通广播  ·  迎春花开了!附近很多地方都有,你看过了吗? ·  2 天前  
河北交通广播  ·  【992 | ... ·  2 天前  
河北交通广播  ·  【992 | ... ·  3 天前  
51好读  ›  专栏  ›  Hugging Face

通用辅助生成: 使用任意辅助模型加速解码

Hugging Face  · 公众号  ·  · 2024-11-19 10:30

正文

太长不看版 : 许多 LLM (如 gemma-2-9b Mixtral-8x22B-Instruct-v0.1 等) 苦于缺乏对应小模型,而无法适用 辅助生成 方案。本文,我们将介绍由英特尔研究院和 Hugging Face 合作开发的 通用辅助生成 技术。有了这项技术,LLM 可与 任意 SLM 搭配组成辅助生成方案。从而,我们可以用辅助生成技术加速 任意 解码器模型或 混合专家 模型以获得 1.5x-2.0x 的加速比。重要的是,开销几乎为零 🔥🔥🔥!一起了解一下吧!

  • 辅助生成 https://hf.co/blog/zh/assisted-generation
  • 混合专家 https://hf.co/blog/zh/moe

引言

如今,风头最劲的开放权重 LLM 参数量一般都有数十亿到数千亿 (说你呢 Llama-3.1-405B 👋),这给在生产环境中部署这些饿兽带来了一系列工程挑战。挑战之一就是: 大模型文本生成速度很慢。为此,社区开发了很多不同的技术来加速解码过程。辅助生成,也称为 投机解码 ,是其中一种非常常用且实用的方法,可在不损失准确性的情况下加速 LLM 推理。本文,我们将了解辅助生成的工作原理,并分享我们的最新研究成果,该成果使得对 Hugging Face Hub 14 万个语言模型 中的 任意一个 模型进行加速成为可能,🚀!

  • 投机解码 https://arxiv.org/abs/2211.17192
  • 14 万个语言模型 https://hf.co/models?pipeline_tag=text-generation&sort=trending

辅助生成

辅助生成的核心是一对模型,分别称为 目标模型 辅助模型 ,其中辅助模型是目标模型的小版,举个例子,你可以使用 Llama-3.2-1B 作为较大的 Llama-3.1-70b 目标模型的辅助模型。整个生成过程是一个迭代过程: 每一轮,辅助模型会先一个一个自回归地生成多个词元; 接着,目标模型通过一次前向传播验证辅助模型本轮生成的所有词元。加速的奥秘就在于目标模型每次前向传播中可以验证多个词元,而不像原本每次只能生成一个词元。更详细的解释,请参阅 原博文 。结合新近推出的 动态投机 策略,辅助生成可将文本生成速度提高 1.5 至 3 倍,具体倍数取决于任务类型及所使用的模型。

  • Llama-3.2-1B https://hf.co/meta-llama/Llama-3.2-1B
  • Llama-3.1-70b https://hf.co/meta-llama/Llama-3.1-70b
  • 原博文 https://hf.co/blog/zh/assisted-generation
  • 动态投机 https://hf.co/blog/dynamic_speculation_lookahead

但,辅助生成并非无往而不利,一个最明显的问题就是: 其要求目标模型和辅助模型必须使用相同的分词器,这意味着两者必须来自同一个模型系列。然而,许多广泛使用的模型缺乏合适的“矮小紧”模型,因此与如此大幅的延迟降低无缘。根据我们的经验,一般来说,辅助模型需要至少比目标模型小 50-100 倍,才会看到有意义的加速。举几个例子, CodeLlama-13b 没有小模型; gemma-2-9b 只有一个 2b 的小模型,显然不够小、不够快,因此加速注定不会太明显。

  • CodeLlama-13b https://hf.co/meta-llama/CodeLlama-13b-Instruct-hf
  • gemma-2-9b https://hf.co/google/gemma-2-9b

通用辅助生成

为了缓解这个痛点,英特尔研究院与 Hugging Face 合作开发了通用辅助生成 (Universal Assisted Generation,UAG) 技术。UAG 可以无视分词器的差异,配对任意目标模型和辅助模型。例如,可以使用 gemma-2-9b 作为目标模型,并选取 vicuna-68m 作为辅助模型。

vicuna-68m https://hf.co/double7/vicuna-68m

该技术背后的主要思想是双路分词器映射: 每一轮,辅助模型生成完词元后,就将其输出词元序列解码为文本,再使用目标模型的分词器将文本编码成词元序列; 同样地,在目标模型验证完后,将目标模型的词元序列用相同的方法转换回辅助模型的词元序列,再将其添加至辅助模型的上下文用于下一轮迭代。

由于辅助模型和目标模型的分词器的词汇表不同,因此还需要处理由此带来的差异。为了准确地对辅助模型新生成的词元序列进行重编码,必须再多给它一些上文词元。然后,将整个序列重新编码为目标模型的词元格式,并与之前生成的最新的目标词元对齐,以锚定新生成词元的确切位置。下面的视频对此过程进行了图解。

从目标模型到辅助模型的词元重编码也遵循与上述视频类似的过程。此时,如遇不匹配的词元,需从辅助模型的键值 (KV) 缓存中将它们丢弃掉,以保证数据的完整性。

基准测试

下表展示了不同目标模型与异分词器辅助模型形成辅助解码方案时测得的延迟改进。

目标模型 辅助模型 数据集 任务 加速比
codellama/CodeLlama-13b-Instruct-hf bigcode/tiny_starcoder_py openai/humaneval 代码生成 1.90x

double7/vicuna-68m cnn_dailymail 摘要 1.52x
google/gemma-2-9b double7/vicuna-68m cnn_dailymail 摘要 1.76x
mistralai/Mixtral-8x22B-Instruct-v0.1 Qwen/Qwen2-0.5B-Instruct tau/scrolls 长文摘要 1.78x
meta-llama/Llama-3.1-70B Qwen/Qwen2-0.5B-Instruct tau/scrolls 长文摘要 1.78x
microsoft/Phi-3-medium-128k-instruct Qwen/Qwen2-0.5B-Instruct tau/scrolls 长文摘要 1.91x
  • openai/humaneval https://hf.co/datasets/openai/openai_humaneval
  • cnn_dailymail https://hf.co/datasets/cnn_dailymail
  • tau/scrolls https://hf.co/datasets/tau/scrolls

请注意,在标准辅助解码方案下,上表中所有目标模型都会苦于没有合适的小模型 (低于 10 亿参数)。

上述实验均在 100 个随机样本上完成。 Llama Mixtral 目标模型的实验分别用了 2 张和 4 张 A100 GPU; 其他所有实验均使用单张 A6000 GPU。

代码

通用辅助生成技术已集成至 🤗 Transformers 4.46.0 版。

4.46.0 https://github.com/huggingface/transformers/releases/tag/v4.46.0







请到「今天看啥」查看全文