【一】量化的基本概念
在深度学习模型的优化中,量化(Quantization)是一种重要技术,它将浮点模型转换为低精度的整数模型,从而减少计算开销和存储需求。
- 什么是量化
量化公式(quant):
其中,r为量化前数值,S为缩放因子,q为量化后数值,Z表示零点。
(tips:问题S、Z如何得到?PTQ在模型推理中得到?那QAT呢?)
反量化公式(dequant):
-
对称量化和非对称量化
- 非对称量化
- 对称量化
tips:clamp(min,max,in)返回min和max之间的值。
【二】量化的方式
量化的两种主要方法是训练后量化(Post-Training Quantization, PTQ)和量化感知训练(Quantization-Aware Training, QAT)
- 非对称量化
-
PTQ
- 定义
PTQ是在模型训练完成后,对模型参数和激活值进行量化的技术。由于无需修改训练过程,其实现简单且开销低。然而,PTQ会在量化过程中引入近似误差,可能导致模型精度下降。 - 实现
按【一】中提到的原理,将float32转换为int8(通常情况下),包括quant和dequant。
(1)模型训练:先用标准的浮点精度训练模型,得到一个性能良好的浮点模型。
(2)收集激活值的统计信息:使用校准数据集运行模型的前向传播,收集各层激活值的分布统计信息。
(3)计算缩放因子和零点:根据激活值的最小值和最大值确定量化范围,并计算缩放因子(S)和零点(Z)。
(4)量化权重和激活值:使用量化公式将浮点权重和激活值转换为定点整数。
(5)推理优化:量化后的模型直接用于推理时,所有计算都使用整数运算,可通过硬件加速器或优化库(如TensorRT、ONNX Runtime)实现高效推理。
- 定义
-
优缺点
-
优点:
实现简单:无需重新训练模型。
性能提升:通过定点运算显著提高推理速度。
适用于大多数场景:当量化误差较小时,模型精度损失可忽略。 -
缺点:
精度下降:对于某些对精度要求高的任务,PTQ的效果可能不理想,尤其是在激活值动态范围大的情况下。 -
QAT
-
定义
QAT通过在训练过程中模拟量化操作,让模型逐步适应量化误差,从而在量化后仍能保持较高精度。其训练过程与标准训练类似,但在每次前向传播中引入了量化和反量化操作。 -
实现
前向传播中的量化模拟:插入模拟量化操作,按照PTQ的量化公式进行量化和反量化。量化感知的反向传播:针对量化的非连续性引入直通梯度估计(Straight-Through Estimator, STE),即对量化的梯度传递直接设为1。动态范围调整:量化范围((S)和(Z))可以根据权重和激活值分布的变化而动态调整。
(1)准备浮点模型:使用标准方法训练一个浮点模型作为QAT的初始模型。
量化感知的前向传播:每次前向传播时,将权重和激活值模拟为量化后的整数值,对权重使用静态量化,对激活值使用动态量化。
(2)误差优化:通过反向传播计算梯度并更新模型参数,量化误差会逐步被模型参数优化吸收。
(3)生成量化模型:训练完成后,生成完全量化的模型,在推理过程中使用定点运算。
参考连接
- 优缺点
- 优点:
精度较高:显著减少量化带来的精度损失。
更适用于复杂模型:对于大模型或激活值动态范围大的任务,QAT更能保证精度。 - 缺点:
训练开销大:需要重新训练模型,时间和计算成本较高。
复杂性增加:需要调整训练流程,开发成本较高。
一些模型量化的数据
【三】量化的对象
weight或activation?
【四】量化的实现形式
?