简短总结"/>
模型量化是什么?方法有哪些?简短总结
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 gpu
,x86
、arm
和 部分 AI
芯片平台上,均支持 8bit
的计算,效率提升从 1
倍到 16
倍不等,其中 tensor core
甚至支持 4bit
计算,这也是非常有潜力的方向。线性量化引入的额外量化/反量化计算都是标准的向量操作,因此也可以使用 SIMD
进行加速,带来的额外计算耗时不大。
与非线性量化不同,线性量化采用均匀分布的聚类中心,原始浮点数据和量化后的定点数据存在一个简单的线性变换关系,因为卷积、全连接等网络层本身只是简单的线性计算,因此线性量化中可以直接用量化后的数据进行直接计算。
4.3对数量化,一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。目前 nvdia gpu
,x86
、arm
三大平台上没有实现对数量化的加速库,但是目前已知海思 351X
系列芯片上使用了对数量化。
更多推荐
模型量化是什么?方法有哪些?简短总结
发布评论