首个支持4-bit浮点量化的LLM来了,解决LLaMA、BERT等的部署难题
本篇文章给大家分享《首个支持4-bit浮点量化的LLM来了,解决LLaMA、BERT等的部署难题》,覆盖了科技周边的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
大语言模型 (LLM) 压缩一直备受关注,后训练量化(Post-training Quantization) 是其中一种常用算法,但是现有 PTQ 方法大多数都是 integer 量化,且当比特数低于 8 时,量化后模型的准确率会下降非常多。想较于 Integer (INT) 量化,Floating Point (FP) 量化能更好的表示长尾分布,因而越来越多的硬件平台开始支持 FP 量化。而这篇文章给出了大模型 FP 量化的解决方案。文章发表在 EMNLP 2023 上。

- 论文地址:https://arxiv.org/abs/2310.16836
- 代码地址:https://github.com/nbasyl/LLM-FP4
要了解本文,必须要先具备基本的有关 Floating Point Format 以及 Floating Point Quantization 的知识,首先 Floating Point Number 可以用以下公式表示:

s 代表正负符号位 (sign bit),m 代表尾数位 (mantissa bits),e 代表指数位 (exponent bits)。p 是一个介于 0 到 2^e - 1 之间的值,用来表示当前数字该被划分到哪一个指数区间,d 取 0 或 1 的值,用来表示第 i 个 mantissa bit。b 是 bias,一个用来调整 exponent 区间的整数值。
在接下来的部分中,我们将介绍浮点数量化是如何工作的。首先,输入值必须经过一个称为“scale and clip”的步骤。这个步骤首先将输入值裁剪到浮点数能够表示的最大范围(±Qmax),具体计算公式如下:

可以看到类似于 integer 量化,FP 量化也会加入一个 full-precision 的缩放因子 (scaling factor) 来缩放 input 到合适的区间。而缩放因子在运算矩阵乘法的时候,和低比特的矩阵乘法分开计算,所以并不会造成很大的 overhead。融入了这个 full-precision 的缩放因子之后,不同的 quantized tensor 能够被相应地 clip 到不同的最大最小值区间。在实际使用过程中,会根据输入 tensor 的值域确定需要的量化区间,然后利用公式 (4) 推导出相对应的 bias。注意公式 (4) 里的 bias 可以被用作实数值的缩放因子,见公式 (2)(3)。
浮点数量化的下一个步骤是将决定好的量化区间内的值分配到相应的量化区间中,这个过程被称为比较和量化:

上图直观说明了量化的过程,当前的输入值,在用公式 5 比较过后,量化到不同的量化区间中。
在得到量化过的 activation 和 weight 后,这里的 scaling factor 提到前面先计算,而达到如下的 efficient matrix multiplication,完成矩阵乘法的加速:

接着本文指出 FP 量化的准确度,和 exponent bits 的设定以及量化的区间息息相关。
在之前的论文中,已经验证了不同的FP格式(即浮点数的指数位/尾数位设定)之间存在巨大的量化误差差异。只有当选择合适的FP格式时,FP量化能够比INT量化更好地表示长尾分布

这篇文章提出了一个解决方案,即采用基于搜索的浮点量化算法,以综合搜索的方式确定最适合的浮点数的指数位和尾数位设定以及相应的量化区间
除此之外,在各种不同类别的Transformer模型(Bert, LLaMA, ViT)中,还存在一个现象严重影响量化的难度:即模型的激活中不同通道之间的数量级差异很大,而同一通道之间的数量级非常一致。之前的研究LLM.int8和SmoothQuant也发现了类似的现象,但本文指出这个现象不仅存在于LLM中,其他Transformer模型(如下所示,LLaMA、BERT和DeIT-S)的激活分布也发现了类似的现象:

从图中可以看到,那些异常大的 channel 都比剩余的 channel 大很多,所以在量化 activation tensor 的过程中,量化的精度很大程度会被这些异常值决定,从而抑制其他 channel 值的量化区间,最终降低整体影响量化精度。这会导致量化的最终结果崩坏,尤其当比特数降到一定程度的时候。值得注意的是,只有 tensor-wise 和 token-wise 量化可以在 efficient matrix multipilication 的时候将 scaling factor 提取出来,而 channel-wise 量化是不支持 efficient matrix multipilication 的,见下图。

为了同时解决问题并保持高效率的矩阵乘法,本文使用少量的校正数据集来预先计算激活每个通道的最大值,并计算缩放因子。然后将缩放因子拆分为一个针对每个张量的实数乘以每个通道的2的幂。这个2的幂可以用FP中的指数偏差表示。整个过程可以通过以下公式表示:

进一步地,在 calibration 完成之后,这个 per-channel exponent bias 就不再变化,因此可以和 weight quantization 一起进行预计算 (pre-compute),将这个 per-channel exponent bias 整合进量化后的 weights 中,提高量化精度。完整的过程如以下公式:

在预偏移之后,可以观察到原本激活函数中的每个通道的全精度偏置的位置变成了一个基于张量的实数缩放因子,同时将被分解的整数偏置移到了权重中原本整数偏置的位置,具体见公式4
从而这个方法 (pre-shifted exponent bias) 能在维持 efficient matrix multiplication 的原则下,更好得提高量化精度,方法的直观展示如下图所示:

最后本文展示 Floating Point Quantization (FPQ) 方法,在 LLaMA, BERT 以及 ViTs 模型上,4-bit 量化皆取得了远超 SOTA 的结果。特别是,这篇文章展示了 4-bit 量化的 LLaMA-13B 模型,在零样本推理任务上达到平均 63.1 的分数,只比完整精度模型低了 5.8 分,且比之前的 SOTA 方法平滑量高出了 12.7,这是目前少数已知可行的 4-bit 量化方案了。

好了,本文到此结束,带大家了解了《首个支持4-bit浮点量化的LLM来了,解决LLaMA、BERT等的部署难题》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多科技周边知识!
诛仙3九黎之路:如何选择八肱(走哪条路线)
- 上一篇
- 诛仙3九黎之路:如何选择八肱(走哪条路线)
- 下一篇
- 了解JavaScript中的every函数,检查数组中的所有元素是否都满足条件
-
- 科技周边 · 人工智能 | 16小时前 |
- RAG 文档切片怎样决定 overlap
- 278浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- ONNX 导出怎样声明动态 batch 和序列长度
- 131浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- RAG 检索结果怎样设置召回和重排的 Top K
- 491浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 | LoRa PEFT merge_and_unload adapter unload disable_adapter delete_adapter
- PEFT 怎样卸载 adapter 并保留基础模型
- 485浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- Accelerate mixed_precision 怎样选择 fp16 或 bf16
- 386浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- Accelerate 怎样配置梯度累积
- 356浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 | skip take Hugging Face Datasets streaming IterableDataset shard
- IterableDataset 只有一个 shard 时怎么继续切分数据
- 441浏览 收藏
-
- 科技周边 · 人工智能 | 17小时前 | JSON split Hugging Face dataset Datasets
- Hugging Face Datasets 怎样从 JSON 加载数据集
- 266浏览 收藏
-
- 科技周边 · 人工智能 | 17小时前 |
- Transformers 生成文本怎样理解 past_key_values 缓存
- 370浏览 收藏
-
- 科技周边 · 人工智能 | 17小时前 | 人工智能 · 文本生成 Transformers Python线程 TextIteratorStreamer 流式生成
- Transformers TextIteratorStreamer 怎样流式读取生成结果
- 485浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 483次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 540次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 562次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 514次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 331次使用
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览
-
- Canva手机闪退解决方法及适配指南
- 2026-05-25 501浏览
