← 返回题目列表

QAT 和 PTQ 有什么区别?

高频 中等 第 8 / 25 题 更新于 2026/09/18
模型压缩量化蒸馏剪枝

简化版

PTQ 在训练完成后用校准数据估计 Scale/Zero Point 并量化,成本低、上线快,适合 INT8 或对量化不敏感的模型。QAT 在训练中插入 Fake Quant,让前向模拟舍入/裁剪,反向用近似梯度,使权重主动适应低比特误差,通常更适合 INT4、更低位宽或严格质量要求。

QAT 不是部署时真的用整数训练:训练多用浮点参数,部署才导出整数/低比特格式。选型顺序通常是先做 PTQ 基线,不达标再用混合精度、算法型 PTQ,最后考虑 QAT;两者都必须在目标硬件上验收。

详细版

PTQ: FP model -> calibration -> quantize -> deploy
QAT: FP model -> fake quant forward + STE backward
              -> fine-tune -> export integer/low-bit -> deploy
维度PTQQAT
是否训练否/少量优化需要微调
数据无标签可用通常需训练目标
成本
极低位宽质量较难通常更好
迭代速度

QAT 要匹配真实量化粒度、裁剪、舍入和 Kernel;Fake Quant 配置与部署不一致会产生“模拟通过、上线退化”。

完整版教学

1. PTQ 做了什么

Post-Training Quantization 固定已训练权重,通过权重统计与校准激活确定量化参数,有些算法会做局部误差补偿,但不做完整任务训练。

优势是快速、数据要求低,适合作为第一基线。

权重 Min-Max、SmoothQuant、GPTQ、AWQ 都可归入广义 PTQ 路线,但它们使用的统计与局部优化不同,不能把 PTQ 误解为只有一种算法。

2. QAT 做了什么

Quantization-Aware Training 在前向插入量化—反量化模拟,让 Loss 感知有限精度;主参数通常仍保存浮点。

训练更新权重与可学习 Scale,使模型在量化格点附近找到更稳解。

Observer 负责统计范围,Fake Quant 负责模拟部署数值;部分方案让 Scale 可学习,部分固定统计值,流程应与最终导出器一致。

3. Fake Quant 公式

q = clip(round(x / s) + z, q_min, q_max)
x_hat = s × (q - z)

前向使用 x_hat,模拟部署误差;导出时保存真正低比特 q 与量化参数。

4. STE 为什么需要

round 的真实梯度几乎处处为零,直接反向无法训练。Straight-Through Estimator 在有效范围内近似令梯度通过。

d round(x) / dx ≈ 1  (surrogate)

它是近似,会带来优化噪声,因此学习率和训练稳定性很重要。

5. 什么时候 PTQ 足够

INT8 Weight-only、模型冗余大、质量容忍度高或数据不可用时,PTQ 往往性价比更高。

先用代表校准集和 GPTQ/AWQ 等方法测试,若关键切片均达标,没有必要承担 QAT 复杂度。

6. 什么时候考虑 QAT

INT4/更低位宽、Activation 量化、边缘硬件强约束,或 PTQ 在安全/长尾上无法达标时,QAT 更有价值。

教师蒸馏可在 QAT 中提供稳定目标,帮助小模型或极低位模型恢复能力。

7. 数据要求有什么不同

PTQ 校准重分布覆盖,通常不需标签;QAT 需要可优化 Loss 的训练数据,并防止微调导致灾难性遗忘。

混合目标任务、通用回放和安全数据,验证集与训练/校准严格隔离。

若只有无标签线上输入,可结合教师蒸馏构造目标,但仍需授权、过滤和独立金标验证,避免把教师错误固化进量化模型。

8. 训练流程如何稳定

从已收敛 FP 模型开始,先启用较温和位宽或只量化权重,再逐步打开 Activation/更低位;使用较低学习率。

可先冻结 Observer 收集范围,再冻结 Scale,避免统计与权重同时剧烈漂移。具体顺序依框架验证。

9. 粒度与范围要一致

训练 Fake Quant 的 per-channel/group size、对称性、Zero Point、裁剪与部署格式必须相同。

不一致后果
训练 per-channel,部署 per-tensor误差骤增
Group size 不同权重布局不匹配
训练 INT8,部署 INT4模拟无效
舍入规则不同边界值偏差

导出后需重新跑整数 Kernel 评测。

10. QAT 有哪些成本

Fake Quant 增加训练算子和内存,低比特模拟可能变慢;还需数据、算力、超参数和发布新权重。

训练成本必须与部署生命周期节省比较。低流量短期模型未必值得做 QAT。

11. QAT 会损伤浮点模型吗

模型为了适应格点可能牺牲部分 FP 表现,所以验收对象应是导出的量化模型;同时保留原 FP 检查点用于回滚。

不要用训练中 Fake Quant 的单一分数代替真实导出结果。

训练阶段同时记录浮点主权重路径和 Fake Quant 路径,有助于判断退化来自任务微调还是量化模拟;最终发布仍以真实低比特推理结果为准。

12. 与混合精度如何结合

先用敏感度识别关键层保留 INT8/FP16,其余层做 INT4 QAT,可减少训练难度并保持硬件收益。

精度岛过多会增加 Cast,配置仍需在目标运行时测端到端性能。

13. 如何做公平比较

PTQ 与 QAT 使用同一基座、目标格式、硬件和评测集;报告 QAT 额外训练数据/算力,以及部署质量、延迟、显存和功耗。

上线按 quant_config 灰度,监控长尾、安全、格式和人工接管,保留 PTQ/FP 回滚路径。

QAT 的价值是让模型在训练中适应部署时必然发生的量化误差,而不是让训练过程本身变成整数计算。

14. 常见误区与追问

  • 误区:QAT 就是用 INT4 做反向训练。 通常用浮点参数与 Fake Quant。
  • 误区:QAT 一定优于 PTQ。 成本更高,且高位宽 PTQ 可能已足够。
  • 误区:训练模拟过就能直接上线。 必须验证真实导出与 Kernel。
  • 误区:PTQ 完全不需要数据。 Activation 统计和部分算法仍需校准。
  • 误区:QAT 不会遗忘原能力。 窄数据微调仍可能退化。
  • 追问:为什么需要 STE? round 不可正常求导,需要近似梯度。
  • 追问:选型顺序是什么? PTQ 基线→优化 PTQ/混合精度→必要时 QAT。

15. 加强记忆

  1. 先分阶段:PTQ 训练后,QAT 训练中模拟。
  2. 再分数据:PTQ 重校准覆盖,QAT 需要训练目标。
  3. 再记 Fake Quant:浮点模拟低比特舍入裁剪。
  4. 再记 STE:近似让梯度通过 round。
  5. 再守一致:粒度、位宽、裁剪、舍入与部署相同。
  6. 再做选型:先 PTQ,关键不达标再 QAT。
  7. 最后验收:真实整数 Kernel 上看质量与性能。