越小越好:Q8-Chat,在至强处理器上的高效生成式 AI 体验

发布于 2023 年 5 月 16 日
在 GitHub 上更新

大语言模型 (LLM) 正在席卷机器学习世界。得益于其 Transformer 架构,LLM 具有从海量非结构化数据(如文本、图像、视频或音频)中学习的惊人能力。它们在许多任务类型上表现出色,无论是像文本分类这样的抽取式任务,还是像文本摘要和文本到图像生成这样的生成式任务。

顾名思义,LLM 是通常超过 100 亿参数大关的*大型*模型。有些模型的参数超过 1000 亿,例如 BLOOM 模型。LLM 需要大量的计算能力(通常在高端 GPU 中才能找到),以便为搜索或对话应用等低延迟用例提供足够快的预测速度。不幸的是,对于许多组织来说,相关成本可能高得令人望而却步,使其难以在应用程序中使用最先进的 LLM。

在本文中,我们将讨论有助于减少 LLM 大小和推理延迟的优化技术,帮助它们在英特尔 CPU 上高效运行。

量化入门

LLM 通常使用 16 位浮点参数(又名 FP16/BF16)进行训练。因此,存储单个权重或激活值需要 2 字节的内存。此外,浮点运算比整数运算更复杂、更慢,并且需要额外的计算能力。

量化是一种模型压缩技术,旨在通过减少模型参数可以采用的唯一值的范围来解决这两个问题。例如,您可以将模型量化为较低的精度,如 8 位整数 (INT8),以缩小模型并将复杂的浮点运算替换为更简单、更快的整数运算。

简而言之,量化将模型参数重新缩放到更小的值范围。如果成功,它会使您的模型缩小至少 2 倍,而不会对模型准确性产生任何影响。

您可以在训练期间应用量化,即量化感知训练 (QAT),这通常会产生最佳结果。如果您希望量化现有模型,可以应用训练后量化 (PTQ),这是一种速度快得多且需要很少计算能力的技术。

有多种不同的量化工具可供使用。例如,PyTorch 内置了对量化的支持。您还可以使用 Hugging Face Optimum Intel 库,其中包括对 QAT 和 PTQ 的开发者友好型 API。

量化 LLM

最近的研究 [1][2] 表明,当前的量化技术对 LLM 效果不佳。特别是在 LLM 中,所有层和词元 (token) 的特定激活通道中都存在大幅度的异常值。以下是 OPT-13B 模型的一个示例。您可以看到,其中一个激活通道的值比所有其他词元的所有其他通道的值大得多。这种现象在模型的所有 Transformer 层中都可见。


*来源:SmoothQuant*

迄今为止最好的量化技术是对激活进行逐词元量化,但这会导致异常值被截断或低幅激活值下溢。这两种情况都会严重损害模型质量。此外,量化感知训练需要额外的模型训练,由于缺乏计算资源和数据,这在大多数情况下是不切实际的。

SmoothQuant [3][4] 是一种解决此问题的新型量化技术。它对权重和激活应用联合数学变换,减少了激活的异常值和非异常值之间的比率,代价是增加了权重的该比率。这种变换使 Transformer 的各层变得“量化友好”,并能够在不损害模型质量的情况下实现 8 位量化。因此,SmoothQuant 产生了更小、更快的模型,这些模型在英特尔 CPU 平台上运行良好。


*来源:SmoothQuant*

现在,让我们看看 SmoothQuant 应用于流行的 LLM 时的效果。

使用 SmoothQuant 量化 LLM

我们在英特尔的朋友已经使用 SmoothQuant-O3 对几个 LLM 进行了量化:OPT 2.7B6.7B [5],LLaMA 7B [6],Alpaca 7B [7],Vicuna 7B [8],BloomZ 7.1B [9] MPT-7B-chat [10]。他们还使用 Language Model Evaluation Harness 评估了量化模型的准确性。

下表总结了他们的发现。第二列显示了量化后有所改进的基准测试的比例。第三列包含平均退化率(* 负值表示基准有所改进)。您可以在本文末尾找到详细结果。

如您所见,OPT 模型是 SmoothQuant 量化的理想选择。与预训练的 16 位模型相比,模型小了约 2 倍。大多数指标都有所改善,而那些没有改善的指标也只是受到了轻微影响。

LLaMA 7B 和 BloomZ 7.1B 的情况则更为复杂。模型被压缩了约 2 倍,大约一半的任务指标有所改善。同样,另一半仅受到轻微影响,只有一个任务的相对退化超过 3%。

使用更小模型带来的显而易见的好处是推理延迟的显著降低。这是一个视频,演示了在单个 32 核英特尔 Sapphire Rapids CPU 插槽上使用 MPT-7B-chat 模型进行实时文本生成,批处理大小为 1。

在这个例子中,我们问模型:“*Hugging Face 在民主化 NLP 中的作用是什么?*”。这会向模型发送以下提示:“*一个好奇的用户和一个人工智能助手之间的聊天。助手对用户的问题给出有帮助、详细和礼貌的回答。用户:Hugging Face 在民主化 NLP 中的作用是什么?助手:*”

该示例展示了 8 位量化与第四代至强处理器相结合所带来的额外好处,从而为每个词元实现了非常低的生成时间。这种性能水平绝对使得在 CPU 平台上运行 LLM 成为可能,为客户提供了比以往任何时候都更大的 IT 灵活性和更好的性价比。

在至强处理器上的聊天体验

最近,Hugging Face 的首席执行官 Clement 表示:“*更多公司最好专注于更小、更具体的模型,这些模型训练和运行的成本更低。*” 像 Alpaca、BloomZ 和 Vicuna 这样相对较小的模型的出现,为企业降低生产中的微调和推理成本开辟了新的机会。如上所述,高质量的量化为英特尔 CPU 平台带来了高质量的聊天体验,而无需运行庞大的 LLM 和复杂的 AI 加速器。

我们与英特尔一起,在 Spaces 中托管了一个名为 Q8-Chat(发音为“Cute chat”)的激动人心的新演示。Q8-Chat 为您提供类似 ChatGPT 的聊天体验,而它仅在单个 32 核英特尔 Sapphire Rapids CPU 插槽上运行,批处理大小为 1。

后续步骤

我们目前正致力于通过 Intel Neural Compressor 将这些新的量化技术集成到 Hugging Face Optimum Intel 库中。完成后,您将能够仅用几行代码就复现这些演示。

敬请期待。未来是 8 位的!

本文保证 100% 无 ChatGPT 内容。

致谢

这篇博客是与英特尔实验室的 Ofir Zafrir、Igor Margulis、Guy Boudoukh 和 Moshe Wasserblat 联合撰写的。特别感谢他们的宝贵意见和合作。

附录:详细结果

负值表示基准有所改进。

社区

注册登录 发表评论