术语、约定及基本原理介绍
Float 模型 / 浮点模型
符合量化感知训练要求的浮点模型。
Calibration
使用校准数据得到量化参数的过程。
Calibration 模型
Calibration 之后得到的伪量化模型。
QAT / 量化感知训练
量化感知训练(QAT)是指在模型训练或微调过程中模拟低精度计算,以减小模型量化带来的精度损失。由于定点数无法直接用于反向梯度计算,实际训练时通常不会直接对模型做真实量化,而是在某些算子前插入伪量化节点(Fake Quantization Nodes),用于在前向过程中模拟量化效果,并统计数据的截断范围和量化参数。 这样,模型可以在接近部署时的低精度条件下进行 finetune,通过持续优化精度获得更优的量化参数,从而提升量化模型的最终效果。由于该过程涉及模型训练与量化参数联合优化,因此对操作人员的技术能力要求较高。
QAT 模型
量化感知训练之后得到的伪量化模型。
伪量化
将浮点数据先量化,再反量化的过程,在网络模型中一般通过伪量化节点实现。
伪量化模型
带有伪量化节点的模型,一般通过 Calibration 或者 QAT 得到。
Quantized 模型 / 定点模型 / 量化模型
通过参数转换把伪量化模型中的浮点参数转换成定点参数,并且把浮点算子转换成定点算子,该转换后的模型称为 Quantized 模型 / 定点模型 / 量化模型。
HBIR 模型
以部署为目的导出的模型,一般由 QAT 模型导出,可用于精度仿真和编译上板。
量化原理
模型量化的核心思想是:用低精度的数值(例如 INT8)来表示和计算原本用高精度数值(例如 FP32)训练的模型参数和激活值。
量化一个张量的基本步骤如下:
-
统计该张量的数值范围,从而确定与之对应的缩放系数(scale)。
-
使用缩放系数对张量进行缩放,使缩放后的数值范围落在低精度 dtype 可以表示的区间,然后 cast 到低精度的 dtype。
以 int8 量化为例,计算过程为:。
静态量化 VS 动态量化
静态量化需要在数据集上统计模型各处激活值的分布,为每处激活计算固定的缩放系数(此过程称为“校准”或“calibration”);动态量化不需要校准过程,而是在模型推理过程中实时统计当前张量的数值范围,实时计算缩放系数并完成到低精度的转换。
当前工具链仅支持静态量化,为此工具需要在模型中插入统计节点,详见 Prepare说明。
支持算子范围
基于 BPU 对算子的限制,我们仅支持 工具链算子支持约束列表 章节所列出的算子以及基于 BPU 限制而内部特殊定义的特殊算子。
