什么是模型量化
在CV、DL的语境下:
模型:特指卷积神经网络(用于提取图像/视频视觉特征)
量化:将信号的连续取值近似为有限多个离散值的过程。
模型量化有什么好处
- 压缩参数
- 提升速度
- 降低内存占用
模型量化对速度的影响
许多量化算法都无法提升速度。
理论峰值性能:单位时钟周期内能完成的计算个数 * 芯片频率
什么样的量化方法可以带来潜在的、可落地的速度提升:
- 该量化数的计算在系统上峰值性能更高
- 引入的额外计算少
目前已知提速概率较大的量化方法:
- 二值化
- xnor + popcount理论峰值比float32高
- 引入额外的quantizer,可用SIMD方式加速
- 线性量化(对称、非对称、Ristretto)
- arm/x86/nvGPU均支持高效的8-bit计算,TensorCore支持4bit计算
- 引入额外的quantizer/de-quantizer,可用SIMD方式加速
- 对数量化
可将乘法转变为加法,加法转变为索引
模型量化降低运行时内存
许多量化算法都无法降低内存占用
降低运行时内存占用比降低参数量更重要
- 降低访存量 --> 继续提升速度
- 处理更多图像/视频路数
- 训练更大模型
内存占用构成:
- 少部分是参数(weight)
- 大部分是激活值(activation)
- 绝大部分量化算法只关注卷积
如何用量化降低内存占用:
- 将尽可能多的layer的激活值都进行量化
- Fully Quantized Network for Object Detection, Li Rundong, CVPR2019
- 可能引入更大的精度损失
量化模型的生产方式
如何将浮点模型转变为量化模型
- data free,直接将浮点参数根据某种手工规则转成量化
- calibration,通过少量输入数据进行统计分析
- finetune,将量化误差在训练时仿真建模,调整权重使其更适合量化
量化模型精度实用性
是什么阻碍了量化模型的落地
精度挑战大:
- 线性量化对分布的描述不精确
- 8bit to 1bit:比特数越低,精度损失越大
- 分类 to 检测 to 识别:任务越难,精度损失越大
- 大模型 to 小模型:通常认为模型越小,精度损失越大
- Depthwise对量化不友好
- Merge BN,Fully Quantized
软硬件支持程度:
- 不同硬件高效支持的低比特指令不一样
- 不同软件库提供的量化方案不一样
- 不同软件库对于不同layer的量化位置不一样