Press "Enter" to skip to content

越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验

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

正如其名称所示,LLMs是大型模型,通常超过100亿个参数。有些模型甚至超过1000亿个参数,如BLOOM模型。LLMs需要大量的计算能力,通常在高端GPU中找到,以便在低延迟的使用情况下(如搜索或对话应用)能够快速预测。不幸的是,对于许多组织来说,相关成本可能是难以承受的,这使得在他们的应用中使用最先进的LLMs变得困难。

在本文中,我们将讨论优化技术,帮助减小LLM的大小并降低推理延迟,从而使它们能够在Intel CPU上有效运行。

量化基础知识

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

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

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

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

有多种量化工具可供选择。例如,PyTorch内置支持量化。您还可以使用Hugging Face Optimum Intel库,该库包含了方便开发者使用的QAT和PTQ的API。

量化LLMs

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

越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第1张 *来源:SmoothQuant*

迄今为止,最佳的量化技术是对激活按标记进行量化,这会导致截断异常值或向下溢出的低幅度激活。这两种解决方案都会严重影响模型质量。此外,量化感知训练需要额外的模型训练,这在大多数情况下由于计算资源和数据的不足是不可行的。

SmoothQuant [3] [4]是一种解决这个问题的新的量化技术。它对权重和激活值应用联合数学变换,将激活值的异常值和非异常值之间的比例降低,而权重的比例则增加。这种变换使得Transformer的各层“量化友好”,并且能够在不影响模型质量的情况下进行8位量化。因此,SmoothQuant可以产生更小、更快的模型,可以在Intel CPU平台上良好运行。

越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第2张 *来源:SmoothQuant*

现在,让我们看看当SmoothQuant应用于流行的LLMs时会发生什么。

使用SmoothQuant量化LLMs

我们的Intel朋友们使用SmoothQuant-O3对几个LLMs进行了量化:OPT 2.7B和6.7B [5],LLaMA 7B [6],Alpaca 7B [7],Vicuna 7B [8],BloomZ 7.1B [9]和MPT-7B-chat [10]。他们还使用语言模型评估工具评估了量化模型的准确性。

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

越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第3张

如您所见,OPT模型是SmoothQuant量化的理想候选。与预训练的16位模型相比,模型大小约为其2倍。大多数指标有所改善,而那些没有改善的指标只有轻微的惩罚。

对于LLaMA 7B和BloomZ 7.1B来说,情况有点不同。模型经过约2倍的压缩,大约一半的任务指标有所改善。另一半的影响只是轻微的,只有一个任务的相对退化超过3%。

使用较小的模型的明显好处是显著减少推理延迟。以下是一个视频,演示了在单个插槽的Intel Sapphire Rapids CPU上使用MPT-7B-chat模型进行实时文本生成,该CPU配备32个核心和批量大小为1。

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

该示例显示了与第四代Xeon相结合的8位量化带来的额外好处,使每个令牌的生成时间非常低。这种性能水平确实使得在CPU平台上运行LLM成为可能,为客户提供了比以往更灵活和性价比更高的IT。

Xeon上的聊天体验

最近,HuggingFace的CEO Clement曾说:“*更多公司应该专注于更小、更具体的模型,这样训练和运行的成本更低*”。像Alpaca、BloomZ和Vicuna这样相对较小的模型的出现,为企业降低在生产中进行微调和推理的成本提供了新的机会。如上所示,高质量的量化将高质量的聊天体验带到了Intel CPU平台,而无需运行庞大的LLM和复杂的AI加速器。

与Intel一起,我们在Spaces中举办了一个令人兴奋的新演示,名为Q8-Chat(发音为“Cute chat”)。Q8-Chat为您提供了类似ChatGPT的聊天体验,同时仅在单个插槽的Intel Sapphire Rapids CPU上运行,配备32个核心和批量大小为1。

下一步

我们目前正在将这些新的量化技术与Hugging Face Optimum Intel库通过Intel Neural Compressor进行集成。一旦完成,您将能够用几行代码复制这些演示。

敬请关注。未来是8位!

本文保证不含ChatGPT。

致谢

本博客是与Intel Labs的Ofir Zafrir、Igor Margulis、Guy Boudoukh和Moshe Wasserblat合作完成的。特别感谢他们的精彩评论和合作。

附录:详细结果

负值表示该基准有所改进。

越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第4张 越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第5张 越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第6张 越小越好:Q8-Chat,一种在Xeon上高效的生成式人工智能体验 四海 第7张

Leave a Reply

Your email address will not be published. Required fields are marked *