量化全方位的理论学习与项目具体实战
随着深入的学习本文的内容会不断丰富的文章目录前言一、量化的原理二、TensorRT中的校准器具体实现前言FP16 不属于「量化压缩整型」只是浮点降精度INT8/INT4/fp8 才是行业常说的量化。目前深度学习模型的参数在训练阶段基本上都是采用32位浮点FP32来表示以便能有更大的动态范围用于在训练过程中更新参数。然而在推理阶段采用FP32的精度会消耗较多的计算资源和内存空间为此在部署模型的时候往往会采用降低模型精度的方法用16位浮点FP16或者8位有符号整型INT8来表示。从FP32转换为FP16一般不会有什么精度损失但是FP32转换为INT8则可能会造成较大的精度损失尤其是当模型的权重分布在较大的动态范围内时。一、量化的原理把模型参数张量从FP32转换为INT8也就是将浮点张量的动态范围映射到[-128,127]的范围可以使用下面的公式其中Clip和Round分别代表截断和取整操作。从上面的公式可以看出把FP32转换为INT8的关键是需要设置一个比例因子来做映射这个映射过程就叫做量化上面的公式是对称量化的公式。量化的关键在于寻找一个合适的比例因子使得量化后的模型精度尽量接近原始模型。对模型进行量化的方式有两种训练后量化Post-training quantizationPTQ是在模型训练好后再通过一个校准Calibration流程去计算比例因子从而实现量化过程。量化感知训练Quantization-aware trainingQAT是在模型训练过程中去计算比例因子允许在训练过程中补偿量化和反量化操作带来的精度误差。二、TensorRT中的校准器在训练后量化过程中TensorRT需要计算模型中每个张量的比例因子这个过程被称为校准。校准过程中需要提供具有代表性的数据以便TensorRT在这个数据集上运行模型然后收集每个张量的统计信息用于寻找一个最佳的比例因子。寻找最佳比例因子需要平衡离散化误差随着每个量化值表示的范围变大而变大和截断误差其值被限制在可表示范围的极限内这两个误差源TensorRT提供了几种不同的校准器IInt8EntropyCalibrator2当前推荐的熵校准器默认情况下校准发生在层融合之前推荐用于CNN模型中。IInt8MinMaxCalibrator该校准器使用激活分布的整个范围来确定比例因子默认情况下校准发生在层融合之前推荐用于NLP任务的模型中。IInt8EntropyCalibrator该校准器是TensorRT最原始的熵校准器默认情况下校准发生在层融合之后目前已不推荐使用。IInt8LegacyCalibrator该校准器需要用户进行参数化默认情况下校准发生在层融合之后不推荐使用。具体实现核心思路两步走第一步模型量化。将微调好的全精度FP32模型转换为低精度如INT8模型这是压缩和加速的关键。第二步部署优化。将量化后的模型通过特定推理引擎如TensorRT、OpenVINO进行部署最大化硬件性能。