更新记录
- 2021-05-06:初步调研现状,确定短期内的工作。
0. 前言
-
本文介绍模型压缩所包含的研究方向、现状以及后续研究安排。
-
注意:本文内容仅面向算法层优化,不考虑硬件、框架优化。
1. 方向与现状
研究方向 | 基本内容 | 应用现状 | 个人评价 |
---|---|---|---|
结构优化 | 使用矩阵分解、权重共享等手段,设计实现轻量化网络结构 | 使用现成的轻量化网络,或使用NAS获取轻量化网络 | 短期内不考虑,但未来肯定要学习 |
量化 | 使用更少的bits来表示一个参数,一般分为PTQ(训练后量化)和QAT(量化感知训练) | 几乎所有部署框架都支持PTQ;QAT支持较少 | 短期研究PTQ;长期角度看一定要研究QAT |
知识蒸馏 | 使用大模型训练小模型 | 基本模型压缩都会使用该方法,大小模型基本都会使用NAS构建 | 短期内不考虑,但未来肯定要学习 |
剪枝 | 修改原有模型结构 | 使用较少,使用NAS替代 | 不考虑该方案 |
2. 短期计划
- 短期计划就是实现模型量化,PTQ(Post Training Quantization)和QAT(Quantization Aware Training)的对比如下。
量化方法 | PTQ | QAT |
---|---|---|
模型精度 | 下降较多,不可控 | 下降较少,可控 |
推理速度 | 没有区别 | 没有区别 |
实现难度 | 低 | 高 |
框架支持程度 | 所有推理框架都支持 | 支持框架较少,需要大量编码 |
注意事项 | FP16量化对于硬件有要求,INT8量化需要进行校准。 | 需要修改训练代码,包括模型构建代码以及训练细节 |
- 下标介绍各个框架对于模型量化的支持程度
框架 | TensorFlow | PyTorch | Paddle | TensorRT | NCNN | MNN |
---|---|---|---|---|---|---|
是否支持PTQ | 是 | 是 | 是 | 是 | 是 | 是 |
是否支持QAT | 是 | 是 | 是 | 否 | 否 | 是 |
是否支持量化结构转换为ONNX | 是 | 否 | / | 否 | 否 | 否 |
支持设备 | CPU/GPU | CPU/GPU | CPU/GPU | GPU | CPU | CPU |
个人评价 | 没有了解细节,感觉对部署支持较好,NVidia也支持相关QAT功能。 | 官方量化功能不支持模型转换,NVidia发布了大量工具,但都不支持QAT | 支持一整套训练、压缩、部署工具。但除了官方,其他资料几乎没有 | 使用方便,但量化后模型精度下降较多 | 只支持INT8量化 | 只支持INT8量化,支持QAT |
- 后续工作主要有以下几方面:
- 训练代码中添加量化后模型精度测试功能。
- 研究 TensorRT 相关工具。
- 研究 Paddle 相关工具。
- 研究 MNN 相关工具。
长期工作安排
- 调研 TensorFlow 模型压缩现状。
- 跟进 PyTorch 官方量化工具的模型部署现状。
- 跟进 PyTorch 非官方量化工具QAT现状。
- 调研 NAS 工具以及现状。
- 调研知识蒸馏工具以及现状。
- 调研 TVM 模型压缩、部署现状。