大语言模型 (LLM) 正在席卷整个机器学习世界。得益于其 transformer 架构,LLM 拥有从大量非结构化数据 (如文本、图像、视频或音频) 中学习的不可思议的能力。它们在 多种任务类型 上表现非常出色,无论是文本分类之类的抽取任务 (extractive task) 还是文本摘要和文生图像之类的生成任务 (generative task)。

顾名思义,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 中有一个特别的现象,即在每层及每个词向量中都能观察到某些特定的激活通道的幅度异常,即某些通道的激活值的幅度比其他通道更大。举个例子,下图来自于 OPT-13B 模型,你可以看到在所有词向量中,其中一个通道的激活值比其他所有通道的大得多。这种现象在每个 transformer 层中都存在。




图源: SmoothQuant 论文

迄今为止,最好的激活量化技术是逐词量化,而逐词量化会导致要么离群值 (outlier) 被截断或要么幅度小的激活值出现下溢,它们都会显著降低模​​型质量。而量化感知训练又需要额外的训练,由于缺乏计算资源和数据,这在大多数情况下是不切实际的。

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]。他们还使用 EleutherAI 的语言模型评估工具 对量化模型的准确性进行了评估。

下表总结了他们的发现。第二列展示了量化后性能反而得到提升的任务数。第三列展示了量化后各个任务平均性能退化的均值 (* 负值表示量化后模型的平均性能提高了)。你可以在文末找到详细结果。

如你所见,OPT 模型非常适合 SmoothQuant 量化。模型比预训练的 16 位模型约小 2 倍。大多数指标都会有所改善,而那些没有改善的指标仅有轻微的降低。

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

使用较小模型的明显好处是推理延迟得到了显著的降低。该 视频 演示了在一个 32 核心的单路英特尔 Sapphire Rapids CPU 上使用 MPT-7B-chat 模型以 batch size 1 实时生成文本的效果。

在这个例子中,我们问模型: “ What is the role of Hugging Face in democratizing NLP? ”。程序会向模型发送以下提示:

A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user’s questions. USER: What is the role of Hugging Face in democratizing NLP? ASSISTANT:

这个例子展示了 8 位量化可以在第 4 代至强处理器上获得额外的延迟增益,从而使每个词的生成时间非常短。这种性能水平无疑使得在 CPU 平台上运行 LLM 成为可能,从而为客户提供比以往任何时候都更大的 IT 灵活性和更好的性价比。

在至强 CPU 上体验聊天应用

HuggingFace 的首席执行官 Clement 最近表示: “专注于训练和运行成本更低的小尺寸、垂域模型,会使更多的公司会收益。” Alpaca、BloomZ 以及 Vicuna 等小模型的兴起,为企业在生产中降低微调和推理成本的创造了新机会。如上文我们展示的,高质量的量化为英特尔 CPU 平台带来了高质量的聊天体验,而无需庞大的 LLM 和复杂的 AI 加速器。

我们与英特尔一起在 Spaces 中创建了一个很有意思的新应用演示,名为 Q8-Chat (发音为 Cute chat)。Q8-Chat 提供了类似于 ChatGPT 的聊天体验,而仅需一个有 32 核心的单路英特尔 Sapphire Rapids CPU 即可 (batch size 为 1)。

Space 体验地址: https://intel-q8-chat.hf.space

下一步

我们正致力于将 Intel Neural Compressor 集成入 Hugging Face Optimum Intel,从而使得 Optimum Intel 能够利用这一新量化技术。一旦完成,你只需几行代码就可以复现我们的结果。

敬请关注。

未来属于 8 比特!

本文保证纯纯不含 ChatGPT。

致谢

本文系与来自英特尔实验室的 Ofir Zafrir、Igor Margulis、Guy Boudoukh 和 Moshe Wasserblat 共同完成。特别感谢他们的宝贵意见及合作。

附录: 详细结果

负值表示量化后性能有所提高。


英文原文: https://hf.co/blog/generative-ai-models-on-intel-cpu

原文作者: Julien Simon

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。

审校/排版: zhongdongy (阿东)

越小越好: Q8-Chat,在英特尔至强 CPU 上体验高效的生成式 AI的更多相关文章

  1. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  2. 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练

    原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...

  3. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比

    迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比 Intel 最强CPU 从最开始的双核 到现在的 28核 发展迅猛. https://www.cnbeta.com/article ...

  4. 【转帖】漏洞数量242:15,英特尔和AMD CPU谁更安全?

    漏洞数量242:15,英特尔和AMD CPU谁更安全? http://www.eetop.cn/cpu_soc/6946340.html 越来越多的用户开始怀疑哪种处理器可以最好地保护他们的计算机,数 ...

  5. 英特尔人工智能圆桌论坛举行 四位大咖论道AI

    英特尔人工智能圆桌论坛举行 四位大咖论道AI 2017-04-01 17:57     北京2017年4月1日电 /美通社/ -- 毫无疑问,人工智能已是最具变革力的发展趋势之一,在3月31日举行的2 ...

  6. 英特尔与 Facebook 合作采用第三代英特尔® 至强® 可扩展处理器和支持 BFloat16 加速的英特尔® 深度学习加速技术,提高 PyTorch 性能

    英特尔与 Facebook 曾联手合作,在多卡训练工作负载中验证了 BFloat16 (BF16) 的优势:在不修改训练超参数的情况下,BFloat16 与单精度 32 位浮点数 (FP32) 得到了 ...

  7. 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络

    英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...

  8. 英特尔 Android* 开发者指南上的对等应用

    简单介绍 当没有 Wi-Fi 訪问点或互联网訪问时,Android* 应用可能须要对等连接在两台或多台 Android* 设备之间建立连接. 比方,文件共享应用和多人游戏. 该功能可使用 NFC.蓝牙 ...

  9. 使用英特尔 Sapphire Rapids 加速 PyTorch Transformers 模型

    大约一年以前,我们 展示 了如何在第三代 英特尔至强可扩展 CPU (即 Ice Lake) 集群上分布式训练 Hugging Face transformers 模型.最近,英特尔发布了代号为 Sa ...

  10. 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 ...

随机推荐

  1. 这篇文章汇聚33个BUG!来挑战一下,看看你能找出来几个?

    你好呀,我是歪歪. 前几天看到"Qunar技术沙龙"公众号推送了一篇关于他们举办了一场"Code Review大赛"的文章. 看到 Code Review 我很 ...

  2. Linux & 标准C语言学习 <DAY6>

    一.数组     什么是数组:变量的组合,是一种批量定义相同类型变量的方式     定义:  类型名 数组名[数量];             int arr[5];             注意:数 ...

  3. PGF 概率生成函数 Probability generating function

    Probability Mass Function 离散随机变量的分布函数PMF 目录 随机结构举例 two classical combinatorial distributions PGF Pro ...

  4. 浅谈云原生基础入坑与docker 搭建redis-cluster集群

    浅谈云原生基础入坑与docker 搭建redis-cluster集群 开篇来点自己的小感触:自从走上后端开发这条无法回头的互卷道路以后,在视野内可见新的技术在迭代,更新的技术在不断发行.就拿最近的Op ...

  5. vue中 computed和watch的一些简单理解(区别)

    今天看到一个问题,就是vue的computed和watch要在哪些场景下使用,其实也就是在问他们的区别.computed也就是计算属性,它可以帮助我们将在模板中的一些稍微复杂的逻辑计算放回到js代码中 ...

  6. Lombok首字母小写,第二个字母大写,jackson反序列化失败

    记一次接口调用字段映射失败问题排查 在写接口的时候遇到一个很神奇的问题,编写一个post接口,在使用包装类接收body的时候发现有个字段映射不上.代码如下 @RestController public ...

  7. AIGC时代:未来已来

    摘要:人工智能的快速发展使得我们进入了AIGC时代.AIGC时代的到来,将会带来巨大的机遇和挑战. 本文分享自华为云社区<GPT-4发布,AIGC时代的多模态还能走多远?系列之一: AIGC时代 ...

  8. Oracle_表空间

    Oracle 表空间 在执行具体的操作之前,由于Oracle不允许删除现有临时表空间,所以在删除现有临时表空间时要终止现有的实时会话. 查询Oracle表空间名称,表空间物理文件路径 查询临时表空间: ...

  9. 彻底弄懂C#中delegate、event、EventHandler、Action、Func的使用和区别

    [目录] 1 委托 2 事件-概念的引出 3 事件-关于异常 4 事件-关于异步 5 委托-Func与Action 1 委托 在.NET中定义"委托"需要用到delegate关键字 ...

  10. 系统评价——层次分析法AHP的R语言实现(四)

    对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方法最终要对被评价对象作出 ...