简介

量化根据是否需要重训练,分为训练后量化(Post-Training Quantization)和量化感知训练(Quantization-Aware Training),当前仅支持训练后量化

训练后量化(Post-Training Quantization,简称PTQ),是指在模型训练结束之后进行的量化,对训练后模型中的权重由浮点数(当前支持Float32)量化到低比特整数(当前支持int8),并通过少量校准数据基于推理过程对数据(activation)进行校准量化,从而尽可能减少量化过程中的精度损失。通常,训练后的模型权重已经确定,因此可以根据权重的数值离线计算得到权重的量化参数。而通常数据是在线输入的,因此无法准确获取数据的数值范围,通常需要一个较小的有代表性的数据集来模拟在线数据的分布,利用该数据集执行前向推理,得到对应的中间浮点结果,并根据这些浮点结果离线计算出数据的量化参数。

其运行原理如图1所示。量化过程请参见执行量化(训练后量化不支持多个NPU同时运行)。

训练后量化,根据量化对象不同,又分为•数据(activation)量化•权重量化

当前昇腾AI处理器支持数据(Activation)做对称/非对称量化,权重(weights)仅支持做对称量化(量化根据量化后数据中心点是否为0可以分为对称量化、非对称量化,详细的量化算法原理请参见量化算法原理)。

由于软件约束(动态shape场景下暂不支持输入数据为DT_INT8),量化后的部署模型使用ATC工具进行模型转换时,不能使用动态shape相关参数,例如--dynamic_batch_size和--dynamic_image_size等,否则模型转换会失败。

图1 训练后量化原理

各功能以及功能实现过程中所使用的术语解释如下: