当前位置: 首页 > news >正文

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算子一同合并,来加快推理速度。

http://www.lryc.cn/news/198636.html

相关文章:

  • 【Django 02】数据表构建、数据迁移与管理
  • 一天吃透Java集合面试八股文
  • 高级深入--day36
  • Jmeter接口测试工具的一些使用小技巧
  • 黄金眼PAAS化数据服务DIFF测试工具的建设实践 | 京东云技术团队
  • 深入了解RPA业务流程自动化的关键要素
  • CSS记录
  • Kotlin中类型转换
  • P7557 [USACO21OPEN] Acowdemia S
  • 如何确认栈中申请的变量地址
  • 【STM32】--基础了解
  • join、inner join、left join、right join、outer join的区别
  • 小程序中如何使用自定义组件应用及搭建个人中心布局
  • pyest+appium实现APP自动化测试,思路全总结在这里
  • ES6 Set数据结构
  • Semaphore(信号量)
  • InnoDB 与 MyISAM的比较(含其他存储引擎)
  • 系统韧性研究(2)|系统韧性如何关联其他质量属性?
  • 电脑桌面记事本便签软件哪个好?
  • 可视化(Visual) SQL初探
  • 多目标权重融合方式
  • 软件工程与计算总结(二十)软件交付
  • 02 开闭原则
  • LamdaUpdateWapper失效问题
  • “权限之舞:Linux安全之道”
  • Visual Studio Code官网下载、vscode下载很慢、vscode下载不了 解决方案
  • URL、域名和网址的区别
  • 【oceanbase】centos7/kylinv10部署oceanbase(x86版本)
  • 论文导读 | 支持事务与图分析的图存储系统
  • Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )