INT16乘累加防溢出量化训练——Overflow-aware Quantization
作者:互联网
简介
- 参考论文: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计算加速;
标签:INT16,ms,Quantization,OAQ,量化,Overflow,累加,溢出 来源: https://blog.csdn.net/nature553863/article/details/112479364