4.2. 量化感知训练(QAT)¶
量化是指以低于浮点精度的比特宽度执行计算和存储张量的技术。量化模型使用整数而不是浮点值对张量执行部分或全部操作。与典型的 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 提供的量化训练和部署工具的使用方法。
为行文简洁,文档中代码默认进行了如下别名替换:
import horizon_plugin_pytorch as horizon
- 4.2.1. 术语约定
- 4.2.1.1. Float 模型 / 浮点模型
- 4.2.1.2. Calibration
- 4.2.1.3. Calibration 模型
- 4.2.1.4. QAT / 量化训练
- 4.2.1.5. QAT 模型
- 4.2.1.6. 伪量化
- 4.2.1.7. 伪量化模型
- 4.2.1.8. Quantized 模型 / 定点模型 / 量化模型
- 4.2.1.9. Traced 模型
- 4.2.1.10. TorchScript 模型
- 4.2.1.11. pt 模型
- 4.2.1.12. Bernoulli2,Bayes
- 4.2.1.13. X3,J3,J5
- 4.2.1.14. BPU 架构和处理器的对应关系
- 4.2.2. 环境依赖
- 4.2.3. 快速入门
- 4.2.4. 开发指南
- 4.2.4.1. 浮点模型的要求
- 4.2.4.2. Calibration 指南
- 4.2.4.3. 量化训练指南
- 4.2.4.4. 异构模型指南
- 4.2.4.5. 分析工具使用指南
- 4.2.4.5.1. 总览
- 4.2.4.5.2. 集成接口
- 4.2.4.5.3. fuse 检查
- 4.2.4.5.4. 共享 op 检查
- 4.2.4.5.5. 量化配置检查
- 4.2.4.5.6. 可视化:ONNX 模型可视化
- 4.2.4.5.7. 相似度对比
- 4.2.4.5.8. 统计量
- 4.2.4.5.9. 模型 weight 比较
- 4.2.4.5.10. 分步量化
- 4.2.4.5.11. 单算子转换精度调试
- 4.2.4.5.12. 异构模型部署 device 检查
- 4.2.4.5.13. torchscript 和 hbdk 结果对比
- 4.2.4.5.14. 不同版本 torchscript 模型的结果对比
- 4.2.4.5.15. 模型显存占用分析工具
- 4.2.4.6. 量化训练精度调优建议
- 4.2.4.7. 量化部署 PT 模型的跨设备 Inference 说明
- 4.2.4.8. 常见问题
- 4.2.4.9. 常见使用误区
- 4.2.5. 深入探索
- 4.2.6. API Reference
- 4.2.7. 附录