量化是指以低于浮点精度的比特宽度执行计算和存储张量的技术。量化模型使用整数而不是浮点值对张量执行部分或全部操作。与典型的 FP32 模型相比,horizon_plugin_pytorch 支持 INT8 量化,从而使模型大小减少 4 倍,内存带宽需求减少 4 倍。对 INT8 计算的硬件支持通常比 FP32 计算快 2 到 4 倍。量化主要是一种加速推理的技术,量化运算只支持前向计算。
horizon_plugin_pytorch 提供了适配 BPU 的量化操作,支持量化感知训练,该训练使用伪量化模块对前向计算和反向传播中的量化误差进行建模。请注意,量化感知训练的整个计算过程是使用浮点运算执行的。在量化感知训练结束时,horizon_plugin_pytorch 提供转换函数,将训练后的模型转换为定点模型,在 BPU 上使用更紧凑的模型表示和高性能矢量化操作。
本章内容为您详细介绍地平线基于 PyTorch 开发的 horizon_plugin_pytorch 的量化感知训练工具。
horizon_plugin_pytorch 基于 PyTorch 开发,为了降低用户的学习成本,horizon_plugin_pytorch 参考了 PyTorch 关于量化感知训练的设计。本文档对于 PyTorch 文档已经包含的内容不再赘述,对于想了解工具细节的用户推荐阅读 官方代码 或者本工具的 Python 源码。为保证使用的流畅性,用户应首先阅读 PyTorch 的相关文档,熟悉 PyTorch 提供的量化感知训练和部署工具的使用方法。
为行文简洁,文档中代码默认进行了如下别名替换:
7.1. 术语约定
7.1.1. Float 模型 / 浮点模型
7.1.2. Calibration
7.1.3. Calibration 模型
7.1.4. QAT / 量化感知训练
7.1.5. QAT 模型
7.1.6. 伪量化
7.1.7. 伪量化模型
7.1.8. Quantized 模型 / 定点模型 / 量化模型
7.1.9. Traced 模型
7.1.10. TorchScript 模型
7.1.11. pt 模型
7.1.12. Bernoulli2,Bayes,Bayes-e
7.1.13. X3,J3,X5,J5
7.1.14. 处理器,BPU 架构,代码中 enum 的对应关系
7.2. 环境依赖
7.3. 快速入门
7.3.1. 基本流程
7.3.2. 获取浮点模型
7.3.3. Calibration
7.3.4. 量化感知训练
7.3.5. 转定点模型
7.3.6. 模型部署
7.4. 开发指南
7.4.1. 浮点模型的要求
7.4.2. qconfig 详解
7.4.3. Calibration 指南
7.4.4. 量化感知训练指南
7.4.5. 异构模型指南
7.4.6. 精度调优工具使用指南
7.4.7. 量化部署 PT 模型的跨设备 Inference 说明
7.4.8. 常见问题
7.4.9. 常见使用误区
7.5. 深入探索
7.5.1. FX Quantization 原理介绍
7.5.2. RGB888 数据部署
7.5.3. 模型分段部署
7.5.4. 算子融合
7.5.5. Adaround(实验性功能)
7.5.6. 自动校准(实验性功能)
7.6. API Reference
7.6.1. March
7.6.2. qconfig
7.6.3. 伪量化算子
7.6.4. QAT
7.6.5. ONNX
7.6.6. TorchScript 模型保存和加载
7.6.7. Horizon 算子
7.6.8. 模型编译
7.7. 附录
7.7.1. Eager 模式
7.7.2. 支持的公版算子