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 modelQuantStub / DeQuantStub 是否插入合理,前后处理边界是否清晰,模型是否具备量化友好性参考 构建浮点模型
Preparefloat model + 平台策略 + example inputs伪量化模型,以及 model_check_result.txtfx_graph.txtqconfig_dtypes.ptqconfig_dtypes.pt.pyqconfig_changelogs.txt模型检查结果、图结构、量化配置变更记录是否符合预期参考 Prepare 说明构建 QConfig调试产物解读 章节
Calibrationcalib model + calibration data带量化参数的 model必选Calibration 精度是否可接受,与浮点基线差距是否合理,校准数据是否能代表真实输入分布若结果可接受,可直接进入导出与编译。若结果不满足需求,参考 平台差异说明 章节与 精度调优指导 章节
QAT 训练calib model + training dataqat model / checkpoint条件必选QAT 后精度是否提升,训练过程是否稳定参考 量化感知训练精度调优指导 章节
Export / Convertcalib model / qat modelqat.bc / quantized.bcquantized.bc 精度是否达标,导出结果是否与预期一致参考 定点模型转换部署一致性分析说明 章节
Compilequantized.bchbm性能、输入输出形式、部署约束是否符合预期参考 模型编译及性能评测板端评测 等章节
最终验证quantized.bc / hbm可部署模型定点模型精度、板端结果和部署一致性是否满足要求参考 部署一致性分析说明调试产物解读板端评测 等章节

使用建议

结合实际项目经验,我们建议您按如下方式理解和使用这条链路:

  1. 如果当前目标是先验证模型是否能顺利量化、导出、编译并完成基础精度检查,建议您先重点完成 浮点模型改造 -> QConfig -> Prepare -> Calibration 这条最小闭环。

  2. 如果 Calibration 结果已经满足需求,您可以不继续进入 QAT,而是直接阅读 定点模型转换模型编译及性能评测 继续后续流程。

  3. 如果 Calibration 结果不满足需求,建议您先结合 平台差异说明精度调优指导调试产物解读 判断问题主要来自量化配置、数据分布、模型结构还是局部算子,再决定是否进入 QAT

  4. 如果 QAT 后精度仍异常,建议您优先阅读 精度调优指导 章节进行精度调优。

  5. 如果 qat.bc / quantized.bc / hbm 结果与预期不一致,建议您优先阅读 部署一致性分析说明 做进一步定位。

  6. 无论走到哪一步,最终判断是否可上线时,都应以 quantized.bc / hbm 的精度、性能和部署结果为准,而不是只看 calib modelqat model

后续章节中,我们将分别对浮点模型改造、QConfig 配置、Prepare、Calibration、QAT 训练、定点模型转换和模型编译评测进行详细说明。