使用 Optimum Intel 在英特尔至强上加速 StarCoder: Q8/Q4 及投机解码

引言

近来,随着 BigCode 的 StarCoder 以及 Meta AI 的 Code Llama 等诸多先进模型的发布,代码生成模型变得炙手可热。同时,业界也涌现出了大量的致力于优化大语言模型 (LLM) 的运行速度及易用性的工作。我们很高兴能够分享我们在英特尔至强 CPU 上优化 LLM 的最新结果,本文我们主要关注 StarCoder 这一流行的代码生成 LLM。

StarCoder 模型是一个专为帮助用户完成各种编码任务而设计的先进 LLM,其可用于代码补全、错误修复、代码摘要,甚至根据自然语言生成代码片段等用途。StarCoder 模型是 StarCoder 模型家族的一员,该系列还有 StarCoderBase。这些代码大模型 (代码 LLM) 使用 GitHub 上的许可代码作为训练数据,其中涵盖了 80 多种编程语言、Git 提交、GitHub 问题以及 Jupyter Notebook。本文,我们将 8 比特、4 比特量化以及 辅助生成 结合起来,在英特尔第四代至强 CPU 上对 StarCoder-15B 模型实现了 7 倍以上的推理加速。

欢迎到 Hugging Face Spaces 上尝试我们的 演示应用,其运行在第四代英特尔至强可扩展处理器上。

6ffa8e6f42c2d8b0bb98ab4bd20e1da8.gif

第 1 步: 基线与评估方法

首先,我们在 PyTorch 和 Intel Extension for PyTorch (IPEX) 上运行 StarCoder (15B),并将其作为基线。

至于评估方法,目前已有不少数据集可用于评估自动代码补全的质量。本文,我们使用流行的 [Huggingface.co/datasets/openai_humaneval] 数据集来评估模型的质量和性能。HumanEval 由 164 个编程问题组成,其内容为函数接口及其对应的函数功能的文档字符串,需要模型基于此补全函数体的代码。其提示的平均长度为 139。我们使用 Bigcode Evaluation Harness 运行评估并报告 pass@1 指标。我们通过测量 HumanEval 测试集上的首词元延迟 (Time To First Token,TTFT) 和每词元延迟 (Time Per Output Token,TPOT) 来度量模型性能,并报告平均 TTFT 和 TPOT。

第四代英特尔至强处理器内置人工智能加速器,称为英特尔® 高级矩阵扩展 (Intel® Advanced Matrix Extensions,英特尔® AMX) 指令集。具体来说,其在每个 CPU 核中内置了 BFloat16 (BF16) 和 Int8 GEMM 加速器,以加速深度学习训练和推理工作负载。AMX 推理加速已集成入 PyTorch 2.0 及 Intel Extension for PyTorch (IPEX),同时这两个软件还针对其他 LLM 中常见的操作 (如层归一化、SoftMax、缩放点积等) 进行了更多的优化。

我们使用 PyTorch 和 IPEX 对 BF16 模型进行推理,以确定基线。图 1 展示了模型推理延迟的基线,表 1 展示了延迟及其对应的准确率。

bf73e951dd7b2bf10756d18568ee3f60.png
图 1: 模型延迟基线

LLM 量化

LLM 中的文本生成是以自回归的方式进行的,因此在生成每个新词元时都需要把整个模型从内存加载到 CPU。我们发现内存 (DRAM) 和 CPU 之间的带宽是词元生成的最大性能瓶颈。量化是缓解这一问题的通用方法,其可减小模型尺寸,进而减少模型权重加载时间。

本文,我们关注两种量化方法:

  1. 仅权重量化 (Weight Only Quantization,WOQ) - 仅量化模型的权重,但不量化激活值,且使用高精度 (如 BF16) 进行计算,因此在计算时需要对权重进行反量化。

  2. 静态量化 (Static Quantization,SQ) - 对权重和激活都进行量化。量化过程包括通过校准预先计算量化参数,从而使得计算能够以较低精度 (如 INT8) 执行。图 2 所示为 INT8 静态量化的计算流程。

第 2 步: 8 比特量化 (INT8)

SmoothQuant 是一种训后量化算法,其能以最小的精度损失把 LLM 量化至 INT8。由于激活的特定通道存在大量异常值,常规静态量化方法在 LLM 上表现不佳。这是因为激活是按词元量化的,因此常规静态量化会导致大的激活值截断以及小的激活值下溢。SmoothQuant 算法通过引入预量化解决了这个问题,其引入了一个额外的平滑缩放因子,将其应用于激活和权重能达到平滑激活中的异常值的作用,从而最大化量化阶数的利用率。

c279559e0f67e33c9a65b39b089cb683.png
图 2:INT8 静态量化模型的计算流程

我们利用 IPEX 对 StarCoder 模型进行 SmoothQuant 量化。我们使用 MBPP 的测试子集作为校准数据集,并基于此生成了 Q8-StarCoder。评估表明,Q8-StarCoder 相对于基线没有精度损失 (事实上,甚至还有轻微的改进)。在性能方面,Q8-StarCoder 的 TTFT 有 ~2.19x 的加速,TPOT 有 ~2.20x 的加速。图 3 展示了 Q8-StarCoder 与 BF16 基线模型的延迟 (TPOT) 对比。

5aad3044d3c1c6456fe4d0b0038f0378.png
图 3:8 比特量化模型的延迟加速

第 3 步: 4 比特量化 (INT4)

尽管与 BF16 相比,INT8 将模型尺寸减小了 2 倍 (每权重 8 比特,之前每权重 16 比特),但内存带宽仍然是最大的瓶颈。为了进一步减少模型的内存加载时间,我们使用 WOQ 将模型的权重量化为 4 比特。请注意,4 比特 WOQ 需要在计算之前反量化回 16 比特 (图 4),这意味着存在额外的计算开销。

f8c45d34ee91978032c8d4467e6d52b1.png
图 4:INT4 量化模型的计算流程

张量级的非对称最近舍入 (Round To Nearest,RTN) 量化是一种基本的 WOQ 技术,但它经常会面临精度降低的挑战。这篇论文 (Zhewei Yao,2022) 表明对模型权重进行分组量化有助于保持精度。为了避免精度下降,我们沿输入通道将若干个连续值 (如 128 个) 分为一组,对分组后的数据执行 4 比特量化,并按组计算缩放因子。我们发现分组 4 比特 RTN 在 HumanEval 数据集上足以保持 StarCoder 的准确性。与 BF16 基线相比,4 比特模型的 TPOT 有 3.35 倍 的加速 (图 5),但由于在计算之前需要将 4 比特反量化为 16 比特,该操作带来的额外开销使得其 TTFT 出现了 0.84 倍的减速 (表 1),这也是符合预期的。

69a99a637b236207e054691506975136.png
图 5:4 比特量化模型的延迟加速。

首词元和后续词元的性能瓶颈不同

生成首词元时会涉及到对整个输入提示的并行处理,当提示长度很长时,需要大量的计算资源。因此,计算成为这一阶段的瓶颈。此时,与基线 (以及引入反量化计算开销的 4 比特 WOQ) 相比,将精度从 BF16 切至 INT8 能提高性能。然而,从第二个词元开始,系统需以自回归的方式逐一生成剩下的词元,而每新生成一个词元都需要从内存中再次加载模型。此时,内存带宽变成了瓶颈,而不再是可执行操作数 (FLOPS),此时 INT4 优于 INT8 和 BF16。

第 4 步: 辅助生成 (Assisted Generation,AG)

另一种能提高推理延迟、缓解内存带宽瓶颈的方法是 辅助生成 (Assisted Generation,AG),其实际上是 投机解码 的一种实现。AG 通过更好地平衡内存和计算来缓解上述压力,其基于如下假设: 更小、更快的辅助草稿模型生成的词元与更大的目标模型生成的词元重合的概率比较高。

AG 先用小而快的草稿模型基于贪心算法生成 K 个候选词元。这些词元的生成速度更快,但其中一些可能与原始目标模型的输出词元不一致。因此,下一步,目标模型会通过一次前向传播并行检查所有 K 个候选词元的有效性。这种做法加快了解码速度,因为并行解码 K 个词元的延迟比自回归生成 K 个词元的延迟要小。

为了加速 StarCoder,我们使用 bigcode/tiny_starcoder_py 作为草稿模型。该模型与 StarCoder 架构相似,但参数量仅为 164M - 比 StarCoder 小 ~95 倍,因此速度更快。为了实现更大的加速,除了量化目标模型之外,我们还对草稿模型进行了量化。我们对草稿模型和目标模型均实验了两种量化方案: 8 比特 SmoothQuant 和 4 比特 WOQ 量化。评估结果表明,对草稿模型和目标模型均采用 8 比特 SmoothQuant 量化得到的加速最大: TPOT 加速达 ~7.30 倍 (图 6)。

我们认为该结果是合理的,分析如下:

  1. 草稿模型量化: 当使用 164M 参数的 8 比特量化 StarCoder 作为草稿模型时,大部分权重均可驻留在 CPU 缓存中,内存带宽瓶颈得到缓解,因为在生成每个词元时无需重复从内存中读取模型。此时,已不存在内存瓶颈,所以进一步量化为 4 比特意义已不大。同时,与量化为 4 比特 WOQ 的 StarCoder-164M 相比,我们发现量化为 8 比特的 StarCoder-164M 加速比更大。这是因为,4 比特 WOQ 虽然在内存带宽成为瓶颈的情况下具有优势,因为它的内存占用较小,但 其会带来额外的计算开销,因为需要在计算之前执行 4 比特到 16 比特的反量化操作。

  2. 目标模型量化: 在辅助生成场景下,目标模型需要处理草稿模型生成的 K 个词元序列。通过目标模型一次性 (并行) 对 K 个词元进行推理,而不是一个一个顺序地进行自回归处理,工作负载已从内存带宽瓶颈型转变成了计算瓶颈型。此时,我们观察到,使用 8 比特量化的目标模型比使用 4 比特模型加速比更高,因为从 4 比特到 16 比特的反量化会产生额外的计算开销。

1c81c9c3b1a85ec13722420a7adc0351.png
图 6: 最终优化模型的延迟加速

StarCoder量化方案精度HumanEval (pass@1)TTFT (ms)TTFT 加速TPOT (ms)TPOT 加速
基线A16W1633.54357.91.00x181.01.00x
INT8SmoothQuantA8W833.96163.42.19x82.42.20x
INT4RTN (g128)A16W432.80425.10.84x54.03.35x
INT8 + AGSmoothQuantA8W833.96183.61.95x24.87.30x

表 1: 在英特尔第四代至强处理器上测得的 StarCoder 模型的准确率及延迟

🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟!


英文原文: https://hf.co/blog/intel-starcoder-quantization

原文作者: Ofir Zafrir,Ella Charlaix,Igor Margulis,Daniel Korat,Jonathan Mamou,Guy Boudoukh,Oren Pereg,Moshe Wasserblat,Haihao Shen,Ahmad Yasin,Fan Zhao

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试多线程架构的问题

在测试多线程架构时,需要考虑多个方面以确保系统的稳定性和性能。以下是一些关键问题,需要在测试过程中特别关注: 线程同步 多线程环境中,线程同步是非常重要的问题。由于多个线程可能同时访问共享资源,因此需要使用…

Linux环境下查看磁盘层级占用空间的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Unity3D xLua开发环境搭建详解

前言 xLua是一种基于Lua语言的开发框架,可以帮助开发者在Unity3D中使用Lua脚本来开发游戏。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀! 在本文中,我们将详细介绍如何搭建Unity…

好奇!为什么gateway和springMVC之间依赖冲突?

Gateway和SpringMVC之间存在冲突,可能是因为它们分别基于不同的技术栈。具体来说: 技术栈差异:Spring Cloud Gateway 是建立在 Spring Boot 2.x 和 Spring WebFlux 基础之上的,它使用的是非阻塞式的 Netty 服务器。而 Spring MVC…

C++从入门到精通 第十三章(认识STL)

写在前面: 本系列专栏主要介绍C的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程,笔者的原创部分主要在示例代码的注释部分。除了参考下面的链接教程以外,笔者还参考了其它的一些C教材(比…

下一代自动化爬虫神器--playwright,所见即所得,配合逆向不要太香!!!

文章目录 1.Playwright介绍2.与 Selenium 和 pyppeteer 相比,Playwright 具有以下几个区别和优势3.在爬虫中使用 Playwright 的好处4.环境安装5.屏幕录制6.保留记录cookie信息7.playwright代码编写详解1.第一个Playwright脚本(1)同步模式&…

有向图的邻接表和邻接矩阵

邻接表 有向图的邻接表是一种常用的表示方法,用于表示图中各个节点之间的关系。在有向图中,每条边都有一个方向,因此邻接表中的每个节点记录了该节点指向的其他节点。 具体来说,有向图的邻接表由一个由节点和它们的邻居节点列表组…

Redis之缓存穿透问题解决方案实践SpringBoot3+Docker

文章目录 一、介绍二、方案介绍三、Redis Docker部署四、SpringBoot3 Base代码1. 依赖配置2. 基本代码 五、缓存优化代码1. 校验机制2. 布隆过滤器3. 逻辑优化 一、介绍 当一种请求,总是能越过缓存,调用数据库,就是缓存穿透。 比如当请求一…

阿里云国际站如何助力餐饮行业出海?

近些年,中国企业出海方兴未艾。全球不同国家的经济政治诉求加剧了商业领域的博弈,全球产业供应链格局持续发生深刻变化。无论是海外建厂,还是海外找市场,中国产业链的全球布局蔚然成风,企业想突破现阶段瓶颈,谋求更好的…

【VIP专属】Python应用案例——基于OpenCV图像卡通化处理图像识别算法实验

目录 一、使用OpenCV卡通化图像和艺术化图像 1、读取图片、窗口显示 2、卡通化处理 3、铅笔画风

⭐北邮复试刷题106. 从中序与后序遍历序列构造二叉树__递归分治 (力扣每日一题)

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], postor…

本地ip被限制,可以用代理ip吗,是怎么实现的

本地IP被限制时,确实可以使用代理IP来解决这个问题。以下是如何通过代理IP实现这一目标的基本过程: 1. 原因与解决方案: 当本地IP地址由于访问频率过高、违反服务条款或者受到防火墙规则屏蔽等原因而无法访问某个网站或服务时,可以…

ros自定义action记录

文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action ros 版本:kinetic 自定义test包的文件结构如下 |-- test | |-- CMakeLists.t…

Internet Download Manager 6.42.3 (IDM) 中文免激活绿色版

相信很多网友都遇到过一种情况,网页有些视频资源或者音频资源不知道如何下载,一直不知道如何解决,为此小编特意带来了这款:Internet Download Manager电脑版,这是一款非常专业且十分好用的下载工具,也就是大…

docker (九)-进阶篇-dockerfile制作zabbix镜像(带python3环境)

环境说明:根据前文docker (七)部署zabbix进行zabbix告警配置时,发现zabbix没有脚本所需要的python3环境,也没有yum环境 参考 https://www.cnblogs.com/daniel-ming/p/15341636.html Zabbix docker镜像 build …

nifi连接Sql server数据库报错TLS问题

背景: 服务器:Linux nifi版本是:1.21.0 Sql Server版本是:10.50.6000.34 我使用generateTableFetch/queryDatabaseTable连接Sqr Server时报错: (驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接…

【Azure 架构师学习笔记】- Azure Databricks (9) -- UC权限

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (8) --UC架构简介 UC 是Databricks进行数据治理,集中权限管控, 提高大规模数据存储,共享安全性的新工具。通…

Android 11以上获取不到第三方app是否安装

开年第一篇&#xff0c;处理了一下年前的小问题。 问题&#xff1a;本地app跳转到第三方app地图进行导航&#xff0c;获取不到第三方地图是否安装。 解决&#xff1a; 1.添加包名 This can be done by adding a <queries> element in the Android manifest.在app下的…

1408: [宁波25届]方格稿纸

题目描述 小猪在小学中认识了很多的字&#xff0c;终于会写一点作文了。某天小猪买了一张方格稿纸来写作文,n 行m 列,形状如下所示&#xff1a; 上图中nm5 。 某天小猪的邻居小小猪来小猪家玩&#xff0c; 用黑墨水笔把小猪新买的方格稿纸涂黑了很多格子。 每个格子不是完全黑…

psp游戏存档收集SAVEDATA

不想从头开始 ppsspp存档目录 pc&#xff1a;ppsspp解压目录\memstick\PSP\SAVEDATA 安卓&#xff1a;根目录\PSP\SAVEDATA 噬神者2(日版) NPJH50832099c645531020001000 風燐-https://wwl.lanzouq.com/iI1R01owozxa 咲夜-https://wwl.lanzouq.com/id1tX1owp2uf につてのぬ…