在深度学习领域,模型的性能通常与其大小成正比。然而,大型模型在部署时面临资源限制和高效率要求的挑战,尤其是在移动设备和边缘计算设备上。这时,模型量化就显得尤为重要。
模型量化是指将神经网络的浮点算法转换为定点。
文章目录
1. 什么是模型量化
模型量化是一种减少深度学习模型大小的技术,通过减少模型中参数的位数来降低模型的存储需求和计算复杂性。这通常涉及将浮点数参数转换为低位数的整数,例如从32位浮点数到8位整数。
模型量化的作用:
- 减小模型大小: 如INT8相对于FP32减少了75%
- 加速推理:访问一次 32 位浮点型可以访问四次 int8 整型,整型运算比浮点型运算更快,CPU对INT8计算更快
- 用于只支持INT8计算硬件
- 压缩网络参数,提升速度,降低内存占用
2. 量化的主要类型
1. 量化阶段
1. 静态量化
静态量化在模型训练后进行,不涉及重新训练。它通常用于不需要细粒度调优的场景。
2. 动态量化
动态量化在模型推理时进行,对权重进行量化,但保留中间激活的浮点数表示。它适用于那些需要保持较高推理精度的应用。
PyTorch动态量化入门教程可参考我撰写的另一篇博文:Dynamic Quantization PyTorch官方教程学习笔记
3. 量化感知训练
量化感知训练在训练过程中将量化考虑在内,通过模拟低精度的效果来训练模型。这种方法可以最大限度地减少量化对模型精度的影响。
2. 模型量化方案
-
datafree:不使用校准集,传统方法直接将浮点数转为量化数,准换损失通常较大 ,但是高通最新的论文 DFQ 不使用校准集也得到了很高的精度。
-
calibration:基于校准及方案,通过输入少量真是数据进行数理统计分析,很多芯片厂商都提供这样的功能,如 tensorRT、高通、海思、地平线、寒武纪
-
finetune:基于训练finetune的方案,将量化误差在训练时仿真建模,调整权重使其更适合量化 优点是能到来精度提升,缺点要修改模型训练代码开发周期长
3. 量化方法
量化是否一定能加速计算?回答是否定的,许多量化算法都无法带来实质性加速。
已知提速概率较大的量化方法主要有如下三类
-
二值化,其可以用简单的位运算来同时计算大量的数。对比从 nvdia gpu 到 x86 平台,1bit 计算分别有 5 到128倍的理论性能提升。且其只会引入一个额外的量化操作,该操作可以享受到 SIMD(单指令多数据流)的加速收益。
-
线性量化(最常见),又可细分为非对称,对称和 ristretto 几种。在 nvdia gpu,x86、arm 和 部分 AI 芯片平台上,均支持 8bit 的计算,效率提升从 1 倍到 16 倍不等,其中 tensor core 甚至支持 4bit计算,这也是非常有潜力的方向。线性量化引入的额外量化/反量化计算都是标准的向量操作,因此也可以使用 SIMD 进行加速,带来的额外计算耗时不大。
与非线性量化不同,线性量化采用均匀分布的聚类中心,原始浮点数据和量化后的定点数据存在一个简单的线性变换关系,因为卷积、全连接等网络层本身只是简单的线性计算,因此线性量化中可以直接用量化后的数据进行直接计算。 -
对数量化,一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。目前 nvdia gpu,x86、arm 三大平台上没有实现对数量化的加速库,但是目前已知海思 351X 系列芯片上使用了对数量化。
3. 量化的挑战和应对策略
3.1 精度损失
量化可能会导致模型精度的降低。为了缓解这一问题,可以采用更精细的量化策略,如混合精度训练,或者使用量化感知训练来优化模型。
3.1.1 精度层级
低精度模型表示模型权重数值格式为 FP16(半精度浮点)或者 INT8(8位的定点整数),但是目前低精度往往就指代 INT8。
常规精度模型则一般表示模型权重数值格式为 FP32(32位浮点,单精度)。
混合精度(Mixed precision)则在模型中同时使用 FP32 和 FP16 的权重数值格式。 FP16 减少了一半的内存大小,但有些参数或操作符必须采用 FP32 格式才能保持准确度。
混合精度训练是一种同时使用单精度(32位)和半精度(16位)浮点数进行训练的技术。这种方法可以在减少计算资源需求的同时,保持或仅轻微影响模型的精度。在混合精度训练中,模型的关键部分,如权重更新,使用更高精度的计算来保证训练稳定性和模型质量,而其他部分则使用低精度计算以提高效率。
参考资料:
还没读:大模型基础(20)
3.2 硬件兼容性
并非所有的硬件都支持低精度的计算。因此,在进行量化时需要考虑目标硬件的兼容性。一些专用硬件和加速器被设计来支持低精度运算,从而加速量化模型的推理。
4. 模型量化的应用
模型量化在许多领域都有应用,例如:
- 移动设备:在资源受限的移动设备上部署轻量化模型。
- 边缘计算:在接近数据源的地方快速处理数据。
- 云计算:减少存储和计算资源的需求,提高效率。
5. 最新进展
近年来,随着人工智能的迅速发展,模型量化领域也在不断进步。一些最新的研究集中在自动量化技术上,这些技术可以智能地选择最佳的量化策略。此外,一些研究致力于开发新的量化算法,以进一步减少精度损失和提高运行效率。
(2023 微软) FP8-LM: Training FP8 Large Language Models:FP8混合精度训练
在这篇文章中,我们简要介绍了模型量化的基本概念、主要类型、面临的挑战、应用场景和最新进展。这一领域的迅速发展正推动着深度学习模型在更广泛场景的应用,同时也为模型优化提供了新的方向。希望这篇文章能帮助你更好地理解模型量化,并在你的项目中找到合适的应用。
6. 参考资料
还没读懂:
- 闲话模型压缩之量化(Quantization)篇_ariesjzj的博客-CSDN博客_模型压缩量化
- 模型量化综述及应用-云社区-华为云
- Overview of natively supported quantization schemes in 🤗 Transformers
已经将内容融入本文: