- 注意:隐式量化已被弃用。建议使用 TensorRT 的量化工具包来创建具有显式量化的模型。
量化网络可以通过两种(互斥的)方式进行处理:使用隐式量化或显式量化。这两种处理模式的主要区别在于是否需要显式控制量化,或者让 TensorRT 构建器选择哪些操作和张量进行量化(隐式)。以下部分提供了更多详细信息。隐式量化仅在量化到 INT8 时受支持。它不能与强类型一起使用(因为类型不会自动调整,唯一将激活值转换为 INT8 或从 INT8 转换回的方法是通过量化(Q)和反量化(DQ)操作符)。
当网络包含 QuantizeLayer 和 DequantizeLayer 层时,TensorRT 使用显式量化模式。当网络中没有 QuantizeLayer 或 DequantizeLayer 层,并且在构建器配置中启用了 INT8 时,TensorRT 使用隐式量化模式。隐式量化模式仅支持 INT8。
在隐式量化的网络中,每个候选量化的激活张量都有一个通过校准过程推导出的或通过 API 函数 setDynamicRange
分配的关联比例因子。如果 TensorRT 决定量化该张量,它将使用此比例因子。
在处理隐式量化的网络时,TensorRT 在应用图优化时将模型视为浮点模型,并在优化层执行时间时机会性地使用 INT8。如果一个层在 INT8 下运行得更快,并且其数据输入和输出已分配量化比例因子,则该层将分配一个 INT8 精度的内核。否则,将分配一个高精度浮点(FP32、FP16 或 BF16)内核。在需要高精度浮点以确保精度而牺牲性能的情况下,可以使用 API Layer::setOutputType
和 Layer::setPrecision</