模型量化--超详细解惑

目录

什么是模型量化?

为什么要进行模型量化?

        压缩参数

        提升速度

降低内存      

模型量化的分类

二值化

线性量化

对数量化


1.什么是模型量化?

               量化就是把高位宽(Float32)表示的权值或者激活值用较低位宽来近似表示(INT8, INT4,……),在数值上的体现就是将连续的值离散化。简单说:即原来表示一个权重需要使用float32表示,量化后只需要使用int8位。

2.为什么要进行模型量化?

                卷积神经网络具有很好的精度,甚至在一些任务上比如人脸识别、图像分类,已经超越了人类精度。但其缺点也比较明显,具有较大的参数量,计算量,以及内存占用。而模型量化可以缓解现有卷积神经网络参数量大、计算量大、内存占用多等问题,具有为神经网络压缩参数提升速度、降低内存占用等“潜在”优势。为什么“潜在”是加引号的呢?因为想同时达到这三个特性并不容易,在实际应用过程中存在诸多限制和前提条件。

2.1压缩参数

                模型量化在最初的定义里是为了压缩模型参数,比如韩松在ICLR2016上获得best paper的论文,首次提出了参数量化方法。其使用k-mean聚类,让相近的数值聚类到同一个聚类中心,复用同一个数值,从而达到用更少的数值表示更多的数,这是量化操作的一种方案。反过来,从量化数变到原始数的过程,称之为反量化,反量化操作完之后,模型就可以按照原来的方式进行正常的计算。

2.2提升速度

                即对大多数处理器而言,整型运算的速度一般(但不总是)要比浮点运算快,访问一次 32 位浮点型可以访问四次 int8 整型。

2.3降低内存      

                模型量化还有一个潜在的好处是降低运行时内存占用,这个特性无论是在移动端还是云端都是具有现实意义的。如果降低内存占用,可以得到如下好处:

1、降低访存量,存在提升速度的可能 。

2、在同样硬件环境下,同时处理更多视频或者视频路数 。

3、训练更大的模型。

我们分析下运行时内存都是被什么东西占用的,大家关心的参数weight只占很少一部分, 大部分内存占用来自激活值activation。如果你做低比特量化只关注卷积的话(很多论文其实也是只量化了卷积),那么是无法带来内存占用降低的。

如何才能用量化降低内存占用,只有一个方式: 将尽可能多的layer的激活值都进行量化 。

                

3.模型量化的分类

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

3.1二值化量化

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

具体可参考论文:

IR-Net: Forward and Backward Information Retention for Highly Accurate Binary Neural Networks

(CVPR 2020)

3.2线性量化

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

这里我们用 r 表示浮点实数,q 表示量化后的定点整数。

浮点和整型之间的换算公式:

其中,S是 scale,表示实数和整数之间的比例关系,Z 是 zero point,表示实数中的 0 经过量化后对应的整数,它们的计算方法为:

rmax 、 rmin 分别是r的最大值和最小值, qmax、 qmin 同理 。 

3.2.1对称量化

                对称量化的浮点值和 8 位定点值的映射关系如下图,从图中可以看出,对称量化就是将一个 tensor 中的\left [-max\left (|x| \right ) ,max\left ( |x| \right ) \right ]内的 FP32值分别映射到 8 bit 数据的 [-128, 127] 的范围内,中间值按照线性关系进行映射,称这种映射关系是对称量化。可以看出,对称量化的浮点值和量化值范围都是相对于零对称的。

当上面公式中的Z=0时即为下图中的对称量化

3.2.3非对称量化

                因为对称量化的缩放方法可能会将 FP32 零映射到 INT8 零,但我们不希望这种情况出现,于是出现了数字信号处理中的均一量化,即非对称量化

当上面公式中的Z=min(x)时即为下图中的非对称量化

3.3对数量化

                一个比较特殊的量化方法。可以想象一下,两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。但没有看到有在三大平台上实现对数量化的加速库,可能其实现的加速效果不明显。只有一些专用芯片上使用了对数量化。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值