模型量化是什么?方法有哪些?简短总结

1.模型量化是什么

模型量化是指将神经网络的浮点算法转换为定点。

  • 低精度模型表示模型权重数值格式为 FP16(半精度浮点)或者 INT8(8位的定点整数),但是目前低精度往往就指代 INT8
  • 常规精度模型则一般表示模型权重数值格式为 FP32(32位浮点,单精度)。
  • 混合精度(Mixed precision)则在模型中同时使用 FP32 和 FP16 的权重数值格式。 FP16 减少了一半的内存大小,但有些参数或操作符必须采用 FP32 格式才能保持准确度。

2.模型量化的作用

2.1减小模型大小: 如INT8相对于FP32减少了75%

2.2加速推理:访问一次 32 位浮点型可以访问四次 int8 整型,整型运算比浮点型运算更快,CPU对INT8计算更快

2.3用于只支持INT8计算硬件

压缩网络参数,提升速度,降低内存占用

3.模型量化方案

3.1datafree:不使用校准集,传统方法直接将浮点数转为量化数,准换损失通常较大 ,但是高通最新的论文 DFQ 不使用校准集也得到了很高的精度。

3.2calibration:基于校准及方案,通过输入少量真是数据进行数理统计分析,很多芯片厂商都提供这样的功能,如 tensorRT、高通、海思、地平线、寒武纪

3.3finetune:基于训练finetune的方案,将量化误差在训练时仿真建模,调整权重使其更适合量化 优点是能到来精度提升,缺点要修改模型训练代码开发周期长

4.量化方法

量化是否一定能加速计算?回答是否定的,许多量化算法都无法带来实质性加速。

已知提速概率较大的量化方法主要有如下三类

4.1二值化,其可以用简单的位运算来同时计算大量的数。对比从 nvdia gpu 到 x86 平台,1bit 计算分别有 5 到128倍的理论性能提升。且其只会引入一个额外的量化操作,该操作可以享受到 SIMD(单指令多数据流)的加速收益。

4.2线性量化(最常见),又可细分为非对称,对称和 ristretto 几种。在 nvdia gpux86arm 和 部分 AI 芯片平台上,均支持 8bit 的计算,效率提升从 1 倍到 16 倍不等,其中 tensor core 甚至支持 4bit计算,这也是非常有潜力的方向。线性量化引入的额外量化/反量化计算都是标准的向量操作,因此也可以使用 SIMD 进行加速,带来的额外计算耗时不大。

        与非线性量化不同,线性量化采用均匀分布的聚类中心,原始浮点数据和量化后的定点数据存在一个简单的线性变换关系,因为卷积、全连接等网络层本身只是简单的线性计算,因此线性量化中可以直接用量化后的数据进行直接计算。

4.3对数量化,一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。目前 nvdia gpux86arm 三大平台上没有实现对数量化的加速库,但是目前已知海思 351X 系列芯片上使用了对数量化。

你可能感兴趣的:(人工智能,机器学习,深度学习,边缘计算)