• PTQ量化和QAT量化


    目录

    1--PTQ量化

    2--QAT量化


    1--PTQ量化

    PTQ量化表示训练后量化(Post Training Quantization)。使用一批校准数据对训练好的模型进行校准,将训练好的FP32网络直接转换为定点计算的网络,过程中无需对原始模型进行任何训练,而只对几个超参数调整就可完成量化过程。(计算每一层的scale)

            TensorRT提供的PTQ算法包括:EntropyCalibratorV2、MinMaxCalibrator、EntropyCalibrator和LegacyCalibrator。

            通过上述算法进行量化时,TensorRT会在优化网络时尝试使用INT8精度。当某一层在INT8进度下速度优于默认精度,则会优先使用INT8。

            由于TensorRT是以速度为优先的,因此用户无法控制某一层的精度。

            同时TensorRT还会进行图优化,当一个OP设置为Int8精度,但其与另一个OP合并会导致速度更快时,TensorRT就会将两个OP合并,并忽略用户设置的INT8精度。

    2--QAT量化

            QAT量化表示量化感知训练(Quantization Aware Training),将训练过的模型进行量化并再训练。  

            使用QAT量化时,会为权重值和激活值插入Q节点(量化节点,FP32→INT8)和DQ节点(反量化节点,INT8→FP32)来模拟量化的过程。  

            TensorRT在QAT量化时会插入FQ算子,其作用是将输入先进行量化为INT8,再反量化为FP32,在逻辑上表现为QDQ节点。

            插入QDQ节点后,QDQ节点会模拟量化和反量化的过程,并记录对应的scale和zero_point等信息。

            导出带有QDQ节点的模型为ONNX后,在TensorRT解析上述ONNX模型时,会动态调用Q节点和DQ节点的位置。

            尽管最后所有的Q节点和DQ节点会形成匹对,但不同位置的Q节点和DQ节点会造成一定的精度损失。

            此外,TensorRT还会将某些OP与插入的Q节点和DQ节点进行融合,形成对应的Q算子和DQ算子。

            TensorRT一般遵循的优化规则是: 尽可能将DQ算子推迟,推迟反量化操作和尽可能将Q算子提前,提前量化操作。即让INT8的范围尽可能大,提高推理速度。
            TensorRT在优化网络的时候会把CONV、BN、RELU算子一同合并,来加快推理速度。

  • 相关阅读:
    RocketMQ 版本升级测试
    linux系统编程
    好用的软件测试框架有哪些?测试框架的作用是什么?
    Element UI库 之 el-input 赋值后不能删除,修改,输入
    java计算机毕业设计会员商城管理系统MyBatis+系统+LW文档+源码+调试部署
    3.5 动态定位shellcode
    X-VLM: Multi-Grained Vision Language Pre-Training
    MQTT基础--MQTT 客户端和代理以及 MQTT 服务器和连接建立说明:第 3 部分
    设计模式(c++)
    堆-c语言实现
  • 原文地址:https://blog.csdn.net/weixin_43863869/article/details/133935623