ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

11 · QAT 还是 PTQ?MCU 量化感知实测:PTQ 仅损失 0.9%

11 · QAT 还是 PTQ?MCU 量化感知实测:PTQ 仅损失 0.9% 11 · QAT 还是 PTQMCU 量化感知实测PTQ 仅损失 0.9%English version:en/11-quantization-awareness.md本篇对应源码tools/legacy/train_moe_qat.py·tools/legacy/verify_q2.py·tools/convert_minueza.py目标讲清楚技术点 2λ_q 量化感知训练为什么判否——PTQ 直接量化已经足够QAT 反而略差。这是「实测胜于推论」的又一案例。一、技术点 2 设计假设「训练后量化PTQ精度损失大」用 λ_q 平滑过渡做量化感知训练QATW_eff (1-λ_q)·W_fp32 ⊕ λ_q·round(W/d)·d λ_q: 0 → 1fake-quant 与convert_minueza.py的 q4_0 规则位级一致每块 32 元素d max_abs/8q round(w/d)截断 [-8,7]straight-through 反传梯度。实现用torch.nn.utils.parametrize对所有 Linear/Embedding 的 weight 注册 fake-quantclassQ4Param(nn.Module):defforward(self,w):ifself.lam_q0.0:returnw wqq4_0_ste(w)# 前向量化值反向恒等传回 fp32return(1.0-self.lam_q)*wself.lam_q*wq二、硬数据QAT 无增益方案ppl相对 fp32 损失fp32 基线12.73—PTQ直接量化12.840.9%QATλ_q 退火 2000 步12.901.4%结论QAT1.4%不优于PTQ0.9%反而略差。判定标准「QAT 明显优于 PTQ」→ FAIL。三、为什么 PTQ 就够了ffn_e128 的 MoE 模型对 q4_0天然鲁棒——dmax_abs/8规则在这个模型上精度损失极小。QAT 的 straight-through 梯度噪声 对已收敛模型的扰动反而大于量化收益。工程含义走 PTQ 即可省掉 QAT 这套复杂机制。这又是「实测胜于推论」——理论上 QAT 应该更好实测 PTQ 已经足够。四、一个实现坑脚本保留作工具train_moe_qat.py在最后保存时踩过一个坑remove_parametrizations不能对顶层 model 调用必须逐个模块处理# 错误model 顶层没有 weight parametrization会抛异常P.remove_parametrizations(model,weight,leave_parametrizedFalse)# 正确逐个模块移除formoduleinmodel.modules():ifP.is_parametrized(module,weight):P.remove_parametrizations(module,weight,leave_parametrizedFalse)五、结论项值判定❌ QAT 判否最终量化方案PTQ直接 q4_0 量化ppl 损失0.9%几乎无损省掉的东西QAT 训练 fake-quant 机制对应源码文件关键符号 / 位置支撑本文哪部分tools/legacy/train_moe_qat.pyQ4Param、q4_0_ste、set_lam_q一、λ_q 量化感知训练实现tools/legacy/train_moe_qat.py参数--lam_q_floor、remove_parametrizations二、QAT 退火与四、保存实现坑tools/legacy/verify_q2.pyquantize_to_intq2/q3 有损量化精度边界验证tools/convert_minueza.pyq4_quantize一、q4_0 量化规则d max_abs/8《Kestrel-MCU 手记》· 全系列 28 篇在 ESP32-P4 上从零训练并部署 32M~64M 参数 MoE 大模型5.7~6.4 tok/s源码、权重、训练脚本与全部文章开源可复现。仓库https://gitee.com/pei-xiaoguang/kestrel-llm-mcu · 觉得有用欢迎 Star
返回列表