简介
- 参考论文:https://arxiv.org/abs/2005.13297
- OAQ (Overflow-aware Quantization)利用量化比特位宽的表示冗余,借助INT16单元寄存中间、与最终乘累加结果,在ARM平台上实现计算加速;
基本原理
- 文章基于TF-Lite的非对称量化训练算法,提出了INT16乘累加防溢出条件:
- 总体来说,要求整数的中间乘累加、与最终累积结果不能溢出INT16范围;
- 文章通过引入可调整的alpha因子,提出了整数量化范围的自适应调整机制:
- 在量化训练期间,通过对比INT32乘累加结果、与INT16乘累加结果,判断INT16计算是否溢出;并统计溢出数量No,进而自适应的调整alpha因子:
- 如果No大于零,则适当增加alpha因子,以压缩整数量化范围,降低INT16溢出风险,此时量化分辨率下降:
- 如果No等于零,说明无INT16溢出,则适当减小alpha因子,确保量化分辨率:
MNN OAQ
- MNN支持对称量化形式的OAQ计算加速,ResNet18的加速效果如下表所示:
- 在中低端机型上面,加速效果明显;相比于Normal INT8实现,最高加速比约1.6倍;
- 通过OAQ计算,使得ARMv7 32位INT8计算的Latency,与ARMv8.1 64位INT8计算基本相当;
量化方式 |
小米6 |
小米9SE |
K20Pro |
|||
ARMv7 (32位) |
ARMv8.1 (64位) |
ARMv7 (32位) |
ARMv8.1 (64位) |
ARMv7 (32位) |
ARMv8.1 (64位) |
|
FP32 |
74.89ms |
66.56ms |
120.4ms |
90.33ms |
31.20ms |
29.25ms |
Normal INT8 |
66.73ms |
51.08ms |
155.8ms |
114.4ms |
36.08ms |
35.03ms |
OAQ INT8 |
54.58ms (1.22倍) |
43.87ms (1.16倍) |
95.71ms (1.63倍) |
77.06ms (1.48倍) |
35.39ms |
34.71ms |
PAI量化训练
- PAI模型压缩工具,集成了MNN OAQ量化训练算法;量化训练生成的模型与量化表,能够对接MNN Runtime,实现移动端OAQ计算加速;