写点什么

如何在英特尔® 平台上实现高效的大语言模型训练后量化

英特尔公司 陆崟彤、何欣、郭恒、程文华、王畅、王梦妮、沈海豪

  • 2023-07-03
    北京
  • 本文字数:3005 字

    阅读完需:约 10 分钟

如何在英特尔® 平台上实现高效的大语言模型训练后量化

本文介绍了可提升大语言模型的训练后量化表现的增强型 SmoothQuant 技术,说明了这项技术的用法,并证明了其在准确率方面的优势。此方法已整合至英特尔® Neural Compressor(1) 中。英特尔® Neural Compressor 是一个包含量化、剪枝(稀疏性)、蒸馏(知识提炼)和神经架构搜索等多种常用模型压缩技术的开源 Python 库。目前,诸如 TensorFlow、英特尔® Extension for TensorFlow(2)、PyTorch、英特尔® Extension for PyTorch(3) 、ONNX Runtime 和 MXNet 等主流框架,都能与之兼容。

 

英特尔® Neural Compressor 已经支持多款英特尔®架构的硬件,比如英特尔®至强®可扩展处理器(4)英特尔®至强® CPU Max系列(5)英特尔®数据中心GPU Flex系列(6)英特尔®数据中心GPU Max系列(7)。本文涉及的实验基于第四代英特®至强®可扩展处理器(8)进行。

大语言模型


大语言模型(Large Language Model, LLM)需基于海量数据集进行训练,可能拥有数十亿权重参数。其先进的网络结构和庞大的参数量,使它们能够很好地应对自然语言本身的复杂性。完成训练后的大语言模型,可针对各种下游的自然语言处理(NLP)和自然语言生成(NLG)任务进行调优,让其更适合对话式聊天机器人(如 ChatGPT)、机器翻译、文本分类、欺诈检测和情感分析等任务场景。

大语言模型部署面临的挑战


大语言模型在执行自然语言处理和自然语言生成任务方面表现出色,但其训练和部署颇为复杂,主要面临以下挑战:

 

· AI与内存墙(9)瓶颈问题:算力每两年提高 3.1 倍,内存带宽却只提高 1.4 倍;

· 网络带宽挑战:训练大语言模型需要采用分布式系统,这对网络带宽提出了较高要求;

· 系统资源有限:训练后的模型往往会部署在算力和内存资源均有限的系统上。

 

因此,采用训练后量化的方法来为大语言模型瘦身,对于实现低时延推理至关重要。

大语言模型的量化


量化是一种常见的压缩操作,可以减少模型占用的内存空间,提高推理性能。采用量化方法可以降低大语言模型部署的难度。具体来说,量化是将浮点矩阵转换为整数矩阵:

其中 X_fp32、S 和 Z 分别为输入矩阵、比例因子和整数零点。

 

有关每通道(per-channel)量化策略虽然可能会减少量化损失,但不能用于激活值量化的原因,请参看SmoothQuant相关文档(10)。不过,激活值量化误差损失却是导致模型量化准确率下降的重要因素。为此,人们提出了很多方法来降低激活值量化损失,例如:SPIQ(11)Outlier Suppression(12)SmoothQuant(13)。这三种方法思路相似,即把激活值量化的难度转移到权重量化上,只是三者在转移难度的多少上有所不同。

增强型 SmoothQuant


SmoothQuant 引入了一个超参数α作为平滑因子来计算每个通道的量化比例因子,并平衡激活值和权重的量化难度。


其中 j 是输入通道索引。



对于 OPT 和 BLOOM 等大多数模型来说,α=0.5 是一个能够较好实现权重和激活值量化难度分割的平衡值。模型的激活异常值越大,就越需要使用更大的α值来将更多的量化难度转移到权重上。

 

原始的 SmoothQuant 旨在通过针对整个模型使用一个固定值α来分割权重和激活值的量化难度。然而,由于激活异常值的分布不仅在不同模型之间存在差异,而且在同一模型的不同层之间也不尽相同,因此,本文推荐使用英特尔® Neural Compressor 的自动调优能力,逐层获取最佳α值。

 

相关方法包括以下五个主要步骤(伪代码如下所示):

1. 通过特殊的回调函数 register_forward_hook 捕获(hook)模型各层的输入和输出值。

2. 根据用户定义的α范围和步长生成一个α值列表。

3. 根据给定的α值重新计算平滑因子并调整参数(权重值和激活值)。

4. 对权重执行每通道量化与反量化(quantization_dequantization),对输入值执行每张量(per-tensor)量化与反量化,以预测与给定α值对应的每层输出值。

5. 计算相对实际输出值的均方损失,将调整后的参数恢复回来,并保存每层的最佳α值。


本文提出的方法支持用多个标准(如最小值、最大值和平均值)来确定 Transformer 块的输入层归一化(LayerNorm)操作的α值。实验发现,将α范围设为[0.3, 0.7],步长设为 0.05,对大多数模型来说都能达到很好的平衡。

 

这一方法有两个显著特点:一是全自动化,二是比原始方法支持的融合模式多。

 

下图提供了在 BLOOM-1b7 模型上执行 SmoothQuant α值自动调优的样例代码:


启用增强型 SmoothQuant 的样例代码

 

用户只需传递一个模型名称(model_name)和一个数据加载器。值得注意的是,模型分析主要依靠的是 Torch JIT。用户可以在加载Hugging Face模型(14)时将 torchscript 设置为 True,或将 return_dict 设置为 False。更多信息请参阅英特尔® Neural Compressor文档(10)

结果


本文提出的增强型 SmoothQuant 的主要优势在于提高了准确率。

 

经过对多种主流大语言模型的评估,具备自动调优能力的 INT8 SmoothQuant 最后一个词元(last-token)的预测准确率要高于原始 INT8 SmoothQuant 和 FP32 基线方法。详见下图:



FP32 基线方法、INT8(启用和不启用 SmoothQuant)以及 INT8(启用本文提出的增强型 SmoothQuant)的准确率对比

 

从上图可以看出,在 OPT-1.3b 和 BLOOM-1b7 模型上,本文提出的增强型 SmoothQuant 的准确率比默认的 SmoothQuant 分别高 5.4%和 1.6%。量化后的模型也缩小到 FP32 模型的四分之一,大大减少了内存占用空间,从而有效地提升大模型在英特尔®平台上的推理性能。

 

更全面的结果请见GitHub存储库(10)。同时,也欢迎您创建拉取请求或就GitHub问题(15)发表评论。期待听到您的反馈意见和建议。

 

作者:

英特尔公司人工智能资深架构师沈海豪、英特尔公司人工智能资深软件工程师程文华、英特尔公司人工智能软件工程师陆崟彤、何欣、郭恒、王畅、王梦妮,他们都在从事模型量化及压缩的研究与优化工作。

 

注释:

1、 英特尔® Neural Compressor

https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/neural-compressor.html

2、 英特尔® Extension for TensorFlow

https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/optimization-for-tensorflow.html

3、 英特尔® Extension for PyTorch

https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/optimization-for-pytorch.html

4、 英特尔®至强®可扩展处理器

https://www.intel.cn/content/www/cn/zh/products/details/processors/xeon/scalable.html

5、英特尔®至强® CPU Max 系列

https://www.intel.cn/content/www/cn/zh/products/details/processors/xeon/max-series.html

6、英特尔®数据中心 GPU Flex 系列

https://www.intel.cn/content/www/cn/zh/products/details/discrete-gpus/data-center-gpu/flex-series.html

7、英特尔®数据中心 GPU Max 系列https://www.intel.com/content/www/us/en/products/details/discrete-gpus/data-center-gpu/max-series.html

8、第四代英特®至强®可扩展处理器

https://www.intel.cn/content/www/cn/zh/events/accelerate-with-xeon.html

9、AI 与内存墙

https://medium.com/riselab/ai-and-memory-wall-2cb4265cb0b8

10、SmoothQuant 相关文档/英特尔® Neural Compressor 文档 / GitHub 存储库

https://github.com/intel/neural-compressor/blob/master/docs/source/smooth_quant.md

11、SPIQ

https://arxiv.org/abs/2203.14642

12、Outlier Suppression

https://arxiv.org/abs/2209.13325

13、SmoothQuant

https://arxiv.org/abs/2211.10438

14、Hugging Face 模型

https://huggingface.co/models

15、GitHub 问题

https://github.com/intel/neural-compressor/issues

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-07-03 11:361967

评论

发布
暂无评论
发现更多内容

「技术直播」分布式数据库订阅功能的原理及实现

TDengine

数据库 tdengine 时序数据库

从0到1介绍一下开源大数据比对平台dataCompare

诸葛子房

大数据 开源 低代码

首汽约车驶向极速统一之路!出行平台如何基于StarRocks构建实时数仓?

StarRocks

数据库

可以一学的代码优化小技巧:减少if-else冗余

华为云开发者联盟

JavaScript 前端 代码 华为云 企业号 1 月 PK 榜

快速构造String对象及访问其内部成员的技巧

阿里技术

Java jdk FASTJSON2

湖南卫视携手华为云 打造跨年晚会“最炫科技风”

Geek_2d6073

喜报|3DCAT入选“灵境杯”深圳市最佳元宇宙案例!

3DCAT实时渲染

虚拟现实 元宇宙 增强现实 实时云渲染 元宇宙开发

可观测性之Log4j2优雅日志打印原创

宋小生

日志 可观测性 log4j2

缓存与数据库双写时的数据如何保证一致性?

风铃架构日知录

Java 程序员 后端 开发工程师 后端开发工程师

2022年度回顾 | 这一年,LigaAI写了10万字

LigaAI

程序员 产品经理 敏捷开发 2022年终总结 企业号 1 月 PK 榜

分久必合?数据库进入“超”融合时代 | 爱分析调研

YMatrix 超融合数据库

数据库 数字化转型 案例分享 超融合数据库 YMatrix

做产品质量“守护神” 华为云CodeArts TestPlan测试管理平台解读

科技热闻

软件测试/测试开发丨接口管理工具YApi怎么用?颜值高、易管理、超好用

测试人

软件测试 接口测试 YAPI 测试开发

iOS不想上架

雪奈椰子

ios打包

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

阿里巴巴云原生

Java 阿里云 容器 云原生

浅析华为云基于HBase MTTR上的优化实践

华为云开发者联盟

大数据 后端 华为云 企业号 1 月 PK 榜

上架苹果

雪奈椰子

ios打包

“数据库内核从入门到精通 ”系列课开讲!

阿里云数据库开源

开源数据库 polarDB PolarDB-X 阿里云数据库 PolarDB for PostgreSQL

灵雀云入选2022 EDGE AWARDS「创新场景50」年度最佳场景实践榜单

York

云原生 数字化转型 业务思维 科技创新

软件测试/测试开发丨接口测试该怎么做?持证上岗的Charles,可以帮你做什么?

测试人

软件测试 自动化测试 接口测试 charles 测试发开

关于 Serverless 应用架构对企业价值的一些思考

阿里巴巴云原生

阿里云 Serverless 云原生

广西首次!3DCAT实时云渲染助力南宁数字气象科普馆上线

3DCAT实时渲染

云计算 云渲染 元宇宙 3DCAT 虚拟数字气象馆

消息收发弹性——生产集群如何解决大促场景消息收发的弹性&降本诉求

阿里巴巴云原生

阿里云 RocketMQ 云原生

喜报 | 瑞云科技荣获“第四届天鸽奖十大创新企业”等两项大奖

3DCAT实时渲染

元宇宙 3DCAT 瑞云渲染

版本控制 | 一文了解虚拟制作,进入影视制作新赛道

龙智—DevSecOps解决方案

版本控制 版本控制软件 虚拟制作

ITSM | 权威指南发布,高速IT服务管理团队是什么样子的?

龙智—DevSecOps解决方案

数字化 ITSM IT服务管理中心

软件测试/测试开发丨你以为Shell只是命令行?读懂这篇文,给你的工作赋能

测试人

Shell 软件测试 命令行 自动化测试 测试开发

npm 包 chalk-next 被开发者投毒,导致 SRC 目录被删

墨菲安全

npm 投毒 npm chalk-next chalk-next 投毒

【架构设计】如何让你的应用做到高内聚、低耦合?

JAVA旭阳

Java 架构

CodeArts TestPlan:一站式测试管理平台

华为云开发者联盟

云计算 后端 华为云 企业号 1 月 PK 榜

ios新游上架

雪奈椰子

ios打包

如何在英特尔® 平台上实现高效的大语言模型训练后量化_AI&大模型_InfoQ精选文章