ai-infra-interview-305

第 12 题:如何实现模型的量化感知训练(QAT)?torch.ao.quantization的workflow是什么?

题目

如何实现模型的量化感知训练(QAT)?torch.ao.quantization的workflow是什么?


完整讲解

一、QAT 在做什么?

量化感知训练(QAT):在训练阶段就模拟量化(float → 量化再反量化),让权重和激活在「舍入 + 缩放」的误差下更新,这样训出的模型在真正部署成 INT8 时精度损失更小。和 PTQ(训练后量化) 的区别是:PTQ 不训练、只校准;QAT 会反向传播、更新参数,专门适应量化误差。


二、核心组件(torch.ao.quantization)


三、典型 workflow(PyTorch 官方风格)

  1. 定义 float 模型,在入口/出口加 QuantStub()DeQuantStub()(若用 eager 模式)。
  2. 设 qconfigmodel.qconfig = get_default_qconfig('qnnpack')(或 ‘fbgemm’ for server)。
  3. prepare_qatmodel_prepared = prepare_qat(model, inplace=False),得到带 fake quant 和 observer 的模型。
  4. 训练若干 epoch:正常 loss.backward() 等,observer 会更新。
  5. 转成推理量化模型model_prepared.eval()model_quantized = convert(model_prepared),得到真正 int8 的模型,可保存、在 C++/ONNX 里用。

(若用 FX Graph Mode,则用 prepare_qat_fxconvert_fx,不依赖 Stub,按图自动插入 fake quant。)


四、要点小结


面试要点


记忆要点

  1. QAT = 训练阶段模拟量化(fake quant),反向传播适应量化误差;convert 后变真实 int8。
  2. 流程:qconfig → prepare_qat → 训练 → convert。
  3. Fake quant = 前向 round+scale 用 float 算可导;observer 收集统计量供 convert 用。
返回模块 返回总览