ai-infra-interview-305

第 129 题:量化算子的融合?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 等前后算子融合。


面试要点


记忆要点

  1. 量化线性 = Q + matmul + DQ;融合 = 合并为少 kernel,减访存与 launch。
  2. 融合是 INT8 推理标配;框架或手写 kernel 均可做。
  3. 数值需与分离实现一致(scale、round)。
返回模块 返回总览