PyTorch 模型量化基本流程
在前文的模型量化编译-总览 和 PyTorch 模型量化简介 章节中,我们已经对 PyTorch 模型量化的链路做了整体的一些概要介绍。 接下来,本章将进一步结合实际使用流程,为您介绍 PyTorch 模型量化从浮点模型改造、QConfig 配置、Prepare、Calibration,到 QAT、导出、定点化、编译和最终验证的完整主线。
如果您希望先体验一次最小闭环,我们建议您优先阅读 PyTorch 模型快速上手 章节。
如果您希望进一步体验部署侧基础示例,也可参考 OE 包 samples/ai_toolchain/horizon_model_train_sample/plugin_basic 路径下我们提供的基础示例。
PyTorch 模型量化整体过程如下图所示:
阶段说明
整体PyTorch模型详细的量化流程关键步骤包括:浮点模型改造、Prepare(含 QConfig 配置)、Calibration、QAT训练、Export/Convert、Compile 以及 quantized.bc / hbm 精度验证几个阶段, 为了方便您在实际使用时快速定位当前所处阶段、需要重点检查的内容,以及出现问题后该继续看哪里,我们整理了下表供参考:
| 阶段 | 输入 | 主要输出 / 产物 | 是否必选 | 重点检查 | 不满足需求时建议查看 |
|---|---|---|---|---|---|
| 浮点模型改造 | float model | 可量化的 float model | 是 | QuantStub / DeQuantStub 是否插入合理,前后处理边界是否清晰,模型是否具备量化友好性 | 参考 构建浮点模型 |
| Prepare | float model + 平台策略 + example inputs | 伪量化模型,以及 model_check_result.txt、fx_graph.txt、qconfig_dtypes.pt、qconfig_dtypes.pt.py、qconfig_changelogs.txt | 是 | 模型检查结果、图结构、量化配置变更记录是否符合预期 | 参考 Prepare 说明、构建 QConfig 和 调试产物解读 章节 |
| Calibration | calib model + calibration data | 带量化参数的 model | 必选 | Calibration 精度是否可接受,与浮点基线差距是否合理,校准数据是否能代表真实输入分布 | 若结果可接受,可直接进入导出与编译。若结果不满足需求,参考 平台差异说明 章节与 精度调优指导 章节 |
| QAT 训练 | calib model + training data | qat model / checkpoint | 条件必选 | QAT 后精度是否提升,训练过程是否稳定 | 参考 量化感知训练 与 精度调优指导 章节 |
| Export / Convert | calib model / qat model | qat.bc / quantized.bc | 是 | quantized.bc 精度是否达标,导出结果是否与预期一致 | 参考 定点模型转换 和 部署一致性分析说明 章节 |
| Compile | quantized.bc | hbm | 是 | 性能、输入输出形式、部署约束是否符合预期 | 参考 模型编译及性能评测 和 板端评测 等章节 |
| 最终验证 | quantized.bc / hbm | 可部署模型 | 是 | 定点模型精度、板端结果和部署一致性是否满足要求 | 参考 部署一致性分析说明、调试产物解读 和 板端评测 等章节 |
使用建议
结合实际项目经验,我们建议您按如下方式理解和使用这条链路:
-
如果当前目标是先验证模型是否能顺利量化、导出、编译并完成基础精度检查,建议您先重点完成
浮点模型改造 -> QConfig -> Prepare -> Calibration这条最小闭环。 -
如果
Calibration结果已经满足需求,您可以不继续进入QAT,而是直接阅读 定点模型转换 和 模型编译及性能评测 继续后续流程。 -
如果
Calibration结果不满足需求,建议您先结合 平台差异说明、精度调优指导 和 调试产物解读 判断问题主要来自量化配置、数据分布、模型结构还是局部算子,再决定是否进入QAT。 -
如果
QAT后精度仍异常,建议您优先阅读 精度调优指导 章节进行精度调优。 -
如果
qat.bc / quantized.bc / hbm结果与预期不一致,建议您优先阅读 部署一致性分析说明 做进一步定位。 -
无论走到哪一步,最终判断是否可上线时,都应以
quantized.bc / hbm的精度、性能和部署结果为准,而不是只看calib model或qat model。
后续章节中,我们将分别对浮点模型改造、QConfig 配置、Prepare、Calibration、QAT 训练、定点模型转换和模型编译评测进行详细说明。
