Nvidia TensorRT Document-- int8量化部分

1. 量化介绍

TensorRT支持使用8位整数来表示量化的浮点值。量化方案是对称均匀量化——量化值用带符号的INT8表示,从量化值到非量化值的转换只是一个简单的乘法。相反转换则使用scale的倒数,并通过rounding和clamping。

量化方案包括激活的量化和权重的量化。

激活的量化方案取决于所选择的校准算法,以找到一个scale s,这个scale s最好地平衡了特定数据的舍入误差和精度误差。TensorRT在下一章节( Post-Training Quantization Using Calibration)详解了支持的不同校准方案。

权重的量化方案通过公式,这里需要找到权值张量的浮点最大值和浮点最小值。

要启用任何量化操作,必须在构建器配置中设置INT8标志。

1.1 量化工作流(workflow)

创建量化网络有两个工作流程:

PTQ:训练后量化(PTQ)是在网络经过训练后得到的尺度因子Scale。TensorRT为PTQ提供了一个称为calibration的工作流。当网络在有代表性的输入数据上执行时,它测量每个激活张量中的激活分布,然后使用该分布来估计张量的scale。

QAT:量化感知训练(QAT)在训练过程中计算尺度因子scale。允许训练过程补偿量化和去量化操作的影响。

TensorRT的Quantization Toolkit(量化工具包)是一个PyTorch库,可以帮助生成可以由TensorRT优化的QAT模型。你也可以使用工具包的PTQ在PyTorch中执行PTQ并导出到ONNX。

1.2 隐式量化和显示量化

量化网络可以用两种方式表示:

在隐式量化网络中,每个量化张量都有一个相关的scale。当读写张量时,scale用于隐式量化和去量化。

当处理隐式量化网络时,TensorRT在应用图优化时将模型视为浮点模型,并适时的使用INT8来优化层执行时间。如果一个层在INT8中运行得更快,那么它就在INT8中执行。否则使用FP32或FP16。在这种模式下,TensorRT只对性能进行优化,你几乎无法控制INT8的使用位置——即使你在API级别显式地设置了一个层的精度,TensorRT也可能在图优化过程中将该层与另一层融合,并丢失它必须在INT8中执行的信息。TensorRT的PTQ能力生成一个隐式量化网络。

在显式量化网络中,在量化值和非量化值之间转换的缩放操作由图中的IQuantizeLayer (C, Python)和IDequantizeLayer (C, Python)节点显式表示——这些节点今后将称为Q/DQ

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值