前言:本文主要是对深度学习模型量化的知识进行讲解
定义:量化是指定点与浮点等数据之间建立一种数据映射关系,即将TensorFlow/PyTorch等等DL框架训练得到的float32精度的模型,转换为float16或者int8的模型。
1. PTQ、QAT量化
模型量化主要分为两类:PTQ与QAT量化
训练后量化 PTQ :是使用一批校准数据对训练好的模型进行校准,将训练过的FP32模型直接转换为定点计算的模型,过程中无需对原始模型进行任何训练。 只对几个超参数调整就可完成量化过程,且过程简单快速,无需训练,因此此方法已被广泛应用于大量的端侧和云侧部署场景,我们优先推荐您尝试PTQ方法来查看是否满足您的部署精度和性能要求 。
量化感知训练 QAT :是将训练过的模型量化后又再进行重训练。由于定点数值无法用于反向梯度计算,实际操作过程是在某些op前插入伪量化节点(fake quantization nodes),用于在训练时获取流经该op的数据的截断值, 便于在部署量化模型时对节点进行量化时使用。我们需要在训练中通过不断优化精度来获取最佳的量化参数。由于它需要对模型进行训练,对操作人员技术要求较高。
模型量化详解
- Quantize节点用于将模型float类型的输入数据量化至int8类型,其计算公式如下:
qx=clamp(round(x/scale)+zeropoint,−128,127)q_x = clamp(round(x/scale) + zero_{point}, - 128, 127)qx=cl