INT16乘累加防溢出量化训练——Overflow-aware Quantization

简介

  • 参考论文:https://arxiv.org/abs/2005.13297
  • OAQ (Overflow-aware Quantization)利用量化比特位宽的表示冗余,借助INT16单元寄存中间、与最终乘累加结果,在ARM平台上实现计算加速;

INT16乘累加防溢出量化训练——Overflow-aware Quantization

 

基本原理

  • 文章基于TF-Lite的非对称量化训练算法,提出了INT16乘累加防溢出条件:

INT16乘累加防溢出量化训练——Overflow-aware Quantization

  • 总体来说,要求整数的中间乘累加、与最终累积结果不能溢出INT16范围;
  • 文章通过引入可调整的alpha因子,提出了整数量化范围的自适应调整机制:

    INT16乘累加防溢出量化训练——Overflow-aware Quantization

INT16乘累加防溢出量化训练——Overflow-aware Quantization

  • 在量化训练期间,通过对比INT32乘累加结果、与INT16乘累加结果,判断INT16计算是否溢出;并统计溢出数量No,进而自适应的调整alpha因子:

INT16乘累加防溢出量化训练——Overflow-aware Quantization

  • 如果No大于零,则适当增加alpha因子,以压缩整数量化范围,降低INT16溢出风险,此时量化分辨率下降:

    INT16乘累加防溢出量化训练——Overflow-aware Quantization

  • 如果No等于零,说明无INT16溢出,则适当减小alpha因子,确保量化分辨率:

    INT16乘累加防溢出量化训练——Overflow-aware Quantization

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计算加速;
上一篇:基于HMI串口屏的协议(STM32)


下一篇:Redis之整数集合