术语、约定及基本原理介绍

Float 模型 / 浮点模型

符合量化感知训练要求的浮点模型。

Calibration

使用校准数据得到量化参数的过程。

Calibration 模型

Calibration 之后得到的伪量化模型。

QAT / 量化感知训练

量化感知训练(QAT)是指在模型训练或微调过程中模拟低精度计算,以减小模型量化带来的精度损失。由于定点数无法直接用于反向梯度计算,实际训练时通常不会直接对模型做真实量化,而是在某些算子前插入伪量化节点(Fake Quantization Nodes),用于在前向过程中模拟量化效果,并统计数据的截断范围和量化参数。 这样,模型可以在接近部署时的低精度条件下进行 finetune,通过持续优化精度获得更优的量化参数,从而提升量化模型的最终效果。由于该过程涉及模型训练与量化参数联合优化,因此对操作人员的技术能力要求较高。

QAT 模型

量化感知训练之后得到的伪量化模型。

伪量化

将浮点数据先量化,再反量化的过程,在网络模型中一般通过伪量化节点实现。

伪量化模型

带有伪量化节点的模型,一般通过 Calibration 或者 QAT 得到。

Quantized 模型 / 定点模型 / 量化模型

通过参数转换把伪量化模型中的浮点参数转换成定点参数,并且把浮点算子转换成定点算子,该转换后的模型称为 Quantized 模型 / 定点模型 / 量化模型。

HBIR 模型

以部署为目的导出的模型,一般由 QAT 模型导出,可用于精度仿真和编译上板。

量化原理

模型量化的核心思想是:用低精度的数值(例如 INT8)来表示和计算原本用高精度数值(例如 FP32)训练的模型参数和激活值。

量化一个张量的基本步骤如下:

  • 统计该张量的数值范围,从而确定与之对应的缩放系数(scale)。

  • 使用缩放系数对张量进行缩放,使缩放后的数值范围落在低精度 dtype 可以表示的区间,然后 cast 到低精度的 dtype。

以 int8 量化为例,计算过程为:quantized_x=clip(round(x/scale),128,127)quantized\_x = clip(round(x / scale), -128, 127)

静态量化 VS 动态量化

静态量化需要在数据集上统计模型各处激活值的分布,为每处激活计算固定的缩放系数(此过程称为“校准”或“calibration”);动态量化不需要校准过程,而是在模型推理过程中实时统计当前张量的数值范围,实时计算缩放系数并完成到低精度的转换。

注解

当前工具链仅支持静态量化,为此工具需要在模型中插入统计节点,详见 Prepare说明

支持算子范围

基于 BPU 对算子的限制,我们仅支持 工具链算子支持约束列表 章节所列出的算子以及基于 BPU 限制而内部特殊定义的特殊算子。