量化是指以低于浮点精度的比特宽度执行计算和存储张量的技术。量化模型使用整数而不是浮点值对张量执行部分或全部操作。 与典型的 FP32 模型相比,量化之后的模型可以节省计算资源,以 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 提供的量化感知训练和部署工具的使用方法。
为行文简洁,文档中代码默认进行了如下别名替换:
量化感知训练需要对浮点模型进行必要的改造,请确保深度理解 BPU 的部署概念,熟悉浮点模型的结构和相关代码。建议训练相关浮点模型的算法工程师参与到量化感知训练中。