60 秒回答模板

我会先区分公式。对称量化通常写成 x ≈ scale * q,zero point 为 0;非对称量化写成 x ≈ scale * (q - zp),其中 zp 用来把真实的 0 映射到整数范围里的某个位置。它的好处是能更好覆盖非零中心或偏移明显的分布,例如激活值全为非负或 min/max 不对称时,可以减少动态范围浪费。但计算时会更复杂。以矩阵乘为例,C = A * B 如果 A、B 都是非对称量化,则每一项是 (qA - zpA) * (qB - zpB),展开后不仅有 qA*qB 的整数乘加,还有 -zpB * sum(qA)、-zpA * sum(qB) 和 K*zpA*zpB 这些修正项。权重是静态时,某些列和或通道和可以预计算;激活随请求变化,行和往往要动态算。额外项会增加 epilogue、内存读写和 kernel 复杂度,也可能影响 Tensor Core/INT8 高效路径。精度上,非对称量化对偏移分布更友好,0 能精确表示,范围利用率更高;但 zero point、rounding、clipping 和 scale 粒度仍会引入误差。工程实践里常见策略是权重用对称 per-channel,激活按场景用非对称或动态量化,最终用模型精度、吞吐、延迟和实现复杂度来取舍。

考点 zero point
难度 真实面经题
回答目标 让候选人能从 zero point 公式推导到整数 GEMM 修正项,并能平衡非对称量化的精度收益与计算开销。

深入解析

01

先区分两个量化公式

对称量化通常让真实 0 对应整数 0,公式接近 x_hat = s * q。非对称量化引入 zero point,公式是 x_hat = s * (q - z)。这里 z 是整数零点,用来表示真实值 0 在量化整数范围中的位置。这个差异会直接改变后续计算。

02

非对称量化提升范围利用率

当数据分布不是以 0 为中心时,对称量化会把正负范围强行做成对称,可能浪费一侧动态范围。非对称量化用 min/max 或校准范围确定 scale 和 zero point,可以更充分覆盖偏移分布,尤其是非负激活或明显偏正/偏负的张量。

03

矩阵乘会出现额外修正项

以整数量化 GEMM 为例,真实乘加近似为 sA * sB * sum((qA - zA) * (qB - zB))。展开后是 sA * sB * [sum(qA*qB) - zB*sum(qA) - zA*sum(qB) + K*zA*zB]。所以非对称量化不是只多存一个 zero point,而是会改变整数计算或 epilogue 修正逻辑。

04

哪些项可以预计算

如果 B 是静态权重,sum(qB) 可以按列、通道或输出维度预先算好,运行时直接读取;但 activation A 通常每个 batch 都不同,sum(qA) 往往需要动态计算。若只有 activation 非对称、权重对称,修正项会少很多;若两边都非对称,计算和元数据处理都会更重。

05

性能影响来自算子路径复杂化

额外 row/column sum、zero point 修正、scale 处理和 requant/dequant epilogue 都可能增加指令、寄存器、访存和 kernel 融合难度。某些硬件或库对 symmetric INT8 路径支持更直接,非对称路径如果不能很好融合,可能吞吐下降或延迟变差。

06

取舍要用精度和端到端指标判断

非对称量化可能降低偏移分布的量化误差,但不一定让整个模型更快或更准。需要比较校准集误差、下游任务指标、per-tensor/per-channel 粒度、是否有 outlier、kernel 吞吐、端到端延迟和显存带宽。面试中应把 GEMM 展开作为通用计算原理,而不是来源事实本身。

易错点

  • 只说非对称量化多了 zero point,没有展开计算时为什么会多出修正项。
  • 把 scale 和 zero point 都说成浮点比例,混淆了整数平移和浮点缩放。
  • 认为非对称量化永远更准,不讨论数据分布、outlier、校准和模型指标。
  • 忽略性能代价,以为公式多一项不会影响 GEMM epilogue、寄存器和访存。
  • 不会区分静态权重 sum 可预计算和动态激活 sum 需要运行时计算。
  • 把通用矩阵乘展开说成某家公司内部实现细节,超出了 source 支持范围。

面试官追问

为什么很多权重量化更偏好对称量化?

权重分布常相对接近 0 中心,对称量化公式简单,没有 zero point 修正项,更容易走高效 INT8 GEMM 或 epilogue 路径。精度不够时再考虑 per-channel、outlier 或更复杂策略。

非对称量化的 zero point 必须是浮点数吗?

通常 zero point 是整数,因为它表示真实 0 对应的量化整数位置;scale 是浮点比例。计算时用 q - zero_point 把整数值平移回以真实 0 为中心的量。

如果只有 activation 非对称、weight 对称,公式会怎样简化?

若 weight zero point 为 0,则与 zB 相关的项消失,只需要处理 activation zero point 对 weight sum 的修正。相比两边都非对称,计算和预计算会简单很多。

非对称量化一定比对称量化精度高吗?

不一定。它对偏移分布更有优势,但还受 calibration、scale 粒度、outlier、rounding 和 clipping 影响。如果分布本来接近对称,收益可能很小,额外计算反而不划算。

反量化和 requantization 分别关注什么?

反量化是把整数结果按 scale 和 zero point 还原到浮点近似;requantization 是把累加结果重新映射到下一层需要的整数格式。两者都要处理 scale、zero point、rounding 和 saturation。