1、使用校准(Calibrator)的PTQ (Post-Training Quantization)
注意:本节描述了已弃用的API。建议使用显式量化。
校准仅适用于INT8量化
在PTQ量化中,TensorRT会为网络中的每个张量计算一个缩放值。这个过程称为校准,需要你提供具有代表性的输入数据,TensorRT在这些数据上运行网络以收集每个激活张量的统计信息。
所需的输入数据量取决于具体应用,但实验表明,大约500张图像足以校准ImageNet分类网络。
给定激活张量的统计信息后,确定最佳缩放值并不是一门精确的科学——它需要在量化表示中的两种误差源之间进行平衡:离散化误差(随着每个量化值表示的范围增大而增加)和截断误差(将值限制在可表示范围内)。因此,TensorRT提供了多种校准器,它们以不同的方式计算缩放值。较旧的校准器还会在GPU上进行层融合,以在校准前优化掉不需要的张量。这在DLA(深度学习加速器)上可能会出现问题,因为融合模式可能不同,并且可以使用kCALIBRATE_BEFORE_FUSION
量化标志来覆盖。
校准批次大小也会影响IInt8EntropyCalibrator2
和IInt8EntropyCalibrator
的截断误差。例如,使用多个小批次的校准数据进行校准可能会导致直方图分辨率降低和缩放值不准确。对于每个校准步骤,TensorRT会更新每个激活张量的直方图分布。如果遇到激活张量中的值大于当前直方图最大值,直方图范围会以2的幂次增加以容纳新的最大值。这种方法在大多数情况