PTQ和QAT的区别

  • Post-training-quantization(PTQ)
  • Quantization-aware-training(QAT)

Post-training-quantization(PTQ)是目前常用的模型量化方法之一。以INT8量化为例,PTQ处理流程为:

1
2
3
1. 首先在数据集上以FP32精度进行模型训练,得到训练好的baseline模型。
2. 然后使用小部分数据对FP32 baseline模型进行calibration,这一步主要是得到网络各层weights以及activation的数据分布特性。再根据数据分布特性计算出网络各层的量化参数。
3. 使用量化参数对FP32 baseline进行量化得到INT8模型。

可以看出如果PTQ中模型训练和量化是分开的,而QAT则是在模型训练时加入了伪量化节点,用于模拟模型量化时引起的误差。以INT8量化为例,QAT处理流程为:

1
2
3
1. 首先在数据集上以FP32精度进行模型训练,得到训练好的baseline模型。
2. 在baseline模型中插入伪量化节点,得到QAT模型,并且在数据集上对QAT模型进行finetune(伪量化节点会模拟推理时的量化过程并且保存finetune过程中计算得到的量化参数)。
3. 使用量化参数对QAT模型进行量化得到INT8模型。

伪量化实际上是quantization+dequantization的结合,通过quantization+dequantization操作模拟量化引起的误差。

伪量化的操作看起来输入输出没变,但是实际上在其中模拟了量化round操作,将这种误差当做一种训练的噪声,在QAT finetune的同时,模型会去适应这种噪声,从而在最后量化为INT8时,减少精度的损失。