lnn-quant-training
Installation
SKILL.md
LNN 量化训练
核心工作流
把量化训练视为带签收标准的工程闭环,而不是在浮点训练脚本末尾调用一次 linger.init。除非用户只要求其中一个阶段,否则按下面顺序推进。
- 冻结验收条件:记录任务指标、浮点基线、允许的精度下降、输入 shape/range、预处理、目标平台、位宽、时延和内存约束。目标平台缺失时仍可做通用 8/8-bit QAT,但不得给出部署兼容结论。
- 审计结构:检查算子、分支、归一化、激活、动态 shape 和输出形式。设计或修改网络前读取
references/model-design.md;目标平台部署约束交给同级$lnn-model-designskill 复核。 - 建立浮点基线:保存最优 float checkpoint、固定验证集和评测脚本,并保留一组可重复的 golden inputs/outputs。没有同数据、同预处理、同 metric 的 float baseline 时,不判断量化损失。
- 快速导图预检:在长时间训练前,用随机权重或 float checkpoint 完成一次
trace_layers -> init -> forward -> linger.onnx.export,确认结构能导出。预检只证明图可生成,不证明量化效果。 - 约束训练:从 float checkpoint 开始,按需执行一次
linger.trace_layers(...),调用linger.constrain(...),重建 optimizer,再做短周期约束微调。先确认 constrained-vs-float 指标差,再进入 QAT。 - 量化初始化:在同一结构变换顺序下调用
linger.init(...),随后加载匹配 checkpoint 并再次重建 optimizer。MOM 让训练 forward 初始化running_data/scale;TQT 任务必须先读取../doc/tutorial/tqt_training.md,按其中的后端选择、单次校准、optimizer 覆盖和首个 backward 梯度审计执行。 - QAT 微调:通常从浮点学习率的约
0.1x起步,以实际曲线为准;同时记录 float、constrained、QAT 指标和量化器状态,保存完整 QATstate_dict。完整实现顺序读取references/training-workflow.md。 - 效果诊断:先排除 checkpoint、预处理、BN/eval、量化器未初始化和样本不一致,再定位首个高误差层。量化效果不达标时必须读取
references/accuracy-recovery.md;涉及 mixed precision、局部 clamp、const_module或quant_module时还必须读取references/mixed-precision.md,按低风险到高风险顺序迭代。 - 导图与验证:严格重建训练时的结构和配置,加载 QAT checkpoint,执行真实输入 warm-up,切换
eval(),用torch.no_grad()包裹linger.onnx.export(...)。完整导图和验证流程读取references/export-and-validation.md。 - 签收:用
references/report-template.md输出阶段指标、差值、配置、命令、artifact、未决风险和下一步。只有 ONNX checker、量化图审计和目标 runtime consistency 都通过时,才称为部署闭环。