← 返回题目列表

QAT 和 PTQ 有什么区别?

高频 中等 第 8 / 25 题 更新于 2026/09/25
QATPTQFake QuantSTE
学习 AI 实战项目

简化版

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 配置与部署不一致会产生“模拟通过、上线退化”。

完整版教学

一、PTQ 做了什么

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

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

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

二、QAT 做了什么

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

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

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

三、Fake Quant 公式

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

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

四、STE 为什么需要

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

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

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

五、什么时候 PTQ 足够

当模型冗余较大、目标位宽较温和且校准集覆盖真实分布时,PTQ 往往能在无需训练的情况下达到要求。判断标准不是“行业通常可以”,而是候选产物在核心任务、长尾切片和安全集上均未越过回归门槛,同时目标硬件确有吞吐或显存收益。

例如 W8A8 相对 FP16 只下降 0.2 分、显存下降 45%、吞吐提升 60%,继续投入 QAT 的训练成本通常不划算;若 INT4 在代码或长上下文切片下降 4 分,则说明 PTQ 不足。

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

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

六、什么时候考虑 QAT

目标位宽低到 4 bit 或更低、激活离群明显、模型较小且冗余有限,或者 PTQ 已无法满足质量门槛时,才值得用 QAT 让参数适应量化噪声。QAT 也适合有明确部署格式且可获得代表性训练数据的场景,因为训练中的 Fake Quant 必须与最终 Kernel 的粒度、对称性和舍入规则一致。

代价是训练算力、数据治理和再次过拟合的风险;如果部署端最后改用另一种 Scale 或算子,训练收益可能消失。因此先锁定导出格式并做小规模敏感度实验,再决定是否全量训练。

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

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

七、数据要求有什么不同

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

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

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

八、训练流程如何稳定

通常从可用的 FP16 或 PTQ 检查点开始,先冻结或小学习率训练敏感模块,再逐步开放参数;Fake Quant 的观察器先收集范围,稳定后冻结 Scale,避免目标在训练后期持续漂移。学习率应低于常规微调,并同时监控浮点代理损失和真实导出模型的任务指标。

若训练 Loss 下降而部署 INT4 产物变差,优先检查训练—部署量化参数是否一致,而不是盲目增加 Epoch。每个阶段保存可导出的检查点,用真实 Kernel 定期回归,才能尽早发现 STE、裁剪范围或 BatchNorm 统计带来的偏差。

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

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

九、粒度与范围要一致

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

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

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

十、QAT 有哪些成本

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

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

十一、QAT 会损伤浮点模型吗

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

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

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

十二、与混合精度如何结合

QAT 不要求所有层使用同一位宽。可以把大多数线性层训练为 INT4,把敏感的 Embedding、输出头、归一化和离群通道保留 INT8/FP16;位宽分配依据逐层消融和硬件支持,而不是只看参数量。

训练时每组参数使用与部署一致的 Fake Quant,导出后核对算子图,防止高精度层之间插入大量 Cast。混合精度的目标是以很小的显存增量换回关键质量,但如果目标加速器不能融合这些组合,复杂度和延迟可能反而上升。

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

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

十三、如何做公平比较

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

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

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

十四、常见误区与追问

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

十五、加强记忆

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