039、Quant Dialect:量化算子的表示与精度控制
MLIR与算子中间表示:从理论到实践039 Quant Dialect:量化算子的表示与精度控制一、从一次“精度翻车”说起去年在给一个端侧NPU做量化推理加速时,遇到一个诡异现象:同一份ResNet-50,用TensorRT量化跑FP16精度正常,换成INT8后,某个特定层的输出直接变成全零。排查了三天,最后发现是量化算子的scale和zero_point在IR传递过程中被“悄悄”截断了——MLIR的Quant Dialect里,scale用浮点表示,但某个pass在转换时用了float32转float16再转回float32,精度损失导致量化区间完全偏移。这个坑让我意识到:量化算子的表示,远不止“把浮点变成定点”这么简单。MLIR的Quant Dialect之所以设计得如此复杂,是因为它要同时解决三个问题:如何描述量化参数、如何保证精度传递、如何让硬件后端能正确解析。二、Quant Dialect的“三件套”:UniformQuantizedType、QuantizedValue、Quantize/DequantizeMLIR的量化体系核心是类型系统,而不是操作。这意味着量化信息附着在值的类型上,而不是像某些框架那样用额外的