支持AVX2指令的计算机,ONNX推理量化模型比推理浮点模型慢?
在 AVX2 平台上,ONNX Runtime 对模型进行 INT8 量化推理时反而比原始的 FP32 推理更慢,主要归因于以下几方面的原因:
概览
虽然 INT8 量化能显著减少模型体积和内存带宽需求,但是在 AVX2 这种不支持专用 8 位乘法指令、量化算子实现尚不成熟的架构上,却会因为额外的量化/反量化(Q/DQ)开销、缺乏指令级加速以及算子融合不到位等原因,导致整体吞吐量低于高度优化的 FP32 路径。下面逐项展开分析。
1. 量化/反量化(Q/DQ)开销
- QDQ 格式与 Operator 格式
ONNX Runtime 的静态量化常用两种表示格式:Tensor-Oriented(QDQ)和 Operator-Oriented(QOperator)。前者会在每个算子前后插入QuantizeLinear
/DequantizeLinear
节点,导致每次运算都要做一次数据类型转换;后者虽然算子本身有量化版本,但并未对所有算子都提供高效实现 。 - 动态量化参数计算
动态量化会在推理过程中实时调用ComputeQuantizationParameters
ÿ