对自己接触的pytorch模型量化方法做一个简单评估,欢迎补充指正。
pytorch1.4版本之后自带的量化工具
pytorch在1.4版本之后就添加了量化的功能。具体量化方案可以参见这篇官方的教程。
(EXPERIMENTAL) STATIC QUANTIZATION WITH EAGER MODE IN PYTORCH
优点
- 毕竟是官方自己放出来的,实现简单,要量化自己的模型只需要改几行代码就可以实现;
- 适用于想了解量化功能的初学者(?我自己好像也只是初学者),想对图像分类模型进行量化的。
缺点
- 目前只能在CPU下进行,量化后评估也只能在CPU下进行;
- 量化后对每层权重会增加很多奇怪的参数,导致一些error,比如我在量化自己YOLO模型的时候没办法加载权重,就只能看看量化后的权重是什么样子,没办法进行量化后的推理。
distiller 提供的量化工具
Intel开源的神经网络压缩框架distiller也提供了量化工具,包括训练后量化和量化感知训练。具体细节可参见distiller官方文档:
Distiller Documentation
优点
- 量化后可以进行推理,对量化后对精度性能影响进行评估;
缺点
- distiller 安装以及使用需要一个入门的过程,包括改代码和定义量化schedule都相对麻烦一些;
- 量化后的模型也就只能看看精度,推理速度会变慢,官方自己的说法是权重虽然看起来被量化到int8(比如),但存储的时候依然是按照fp64存储的,没办法进行实际应用。
总之我还没有找到完美的量化工具对我的YOLO模型做量化,欢迎大佬们提建议。