quantize-linear + matmul + dequantize?量化算子的融合?quantize-linear + matmul + dequantize?
推理时线性层常拆成:quantize(激活 FP→INT8)、matmul(INT8×INT8 或 INT8×INT8 累加)、dequantize(结果 INT→FP 或直接按 scale 还原)。若这三步各自成 kernel,会有多次读写与多次遍历,带宽与 launch 开销大;且 quantize/dequant 可与相邻运算合并,减少中间结果落地。
融合:把 quantize-linear + matmul + dequantize 合成一个或少量 kernel,使激活只读一次、量化后立即参与乘加、结果在寄存器或共享内存中按 scale 还原后再写回或交给下一层。这样减少全局内存访问与 kernel launch,提升吞吐、降低延迟。实现方式:手写 CUDA/ Triton kernel、或依赖框架/库(如 ONNX Runtime 的 QLinearMatMul、TensorRT 的 INT8 层、cuBLASLt 的 scaled matmul)自动融合。
融合是量化推理的常规优化;需保证数值与分离实现一致(scale 传递、round 方式)。面试可提:Q-DQ 与 matmul 融合是 INT8 推理的标配优化;TensorRT/ONNX Runtime 等都会做此类融合;手写 kernel 时可进一步与激活、LayerNorm 等前后算子融合。
| 返回模块 | 返回总览 |