Sparsity & Quantization 之自我理解

Sparsity & Quantization 之自我理解


DNN的最初的动力是以precise为中心,但随着DNN在Edge的推广,Latency和Throuput则成了inference过程中关心的问题;为了后者,即使损失些精度,都是可以接受的。

Inference的时间消耗主要分两部分: Computing 和 Data move。如何在这两部分节约时间,则就各显神通。如果就Ineference本身而言,目前常用的方法也就是Sparsity和Quantization。


Sparsity

其中Sparsity处于比较尴尬的位置。公司的VPU处理器的一个卖点就是Sparsity,但是推广时被问得最多的就是Sparsity能带来多大的性能收益。因为DNN在训练阶段,考虑到Edge端资源受限,会采用各种剪枝技术紧凑网络,最后生成的网络weights中很少有能够压缩的成分。至于Activation sparsity,在图像处理方面,少有用武之地。

就Sparsity技术本身而言,能减少数据搬移量(值为0的数据不搬移),且减少数据计算量(值为0的数据不计算),但也需要额外的硬件支撑,并且还需要有额外的meta数据做管理。所以也只有在Sparsity rate达到一定的阀值时,可能才有收益。


Quantization

而Quantization在Edge端则被广泛使用。数据位宽的变小,在Computing 和 Data move这两个方面都会有明显的性能提高,但对网络模型的要求就比较高了。

由于一般的DNN都是float数据类型,为int8/int4等数据类型,常用的做法是用工具将网络模型转换为支持Quantilization的模型。转换的过程,其实就是线性压缩和平移的算术过程。

Quantization有per layer和per channel两种方式,但是基于和normalization同样的道理,per channel的物理意义更清楚。Float转int8所固有的问题也是Quantization的问题,由于表示的数据范围变小,如何做数据映射则成了避不开的问题。这方面的资料挺多,就不展开了,主要提带来的问题。

在VPU上使能一个网络模型时,一般以在CPU的准确度为基准;经过Quantization后,会在VPU上得到自己的准确度。有时两者相差比较大,问题一般就出在min/max超出了阀值;或者某些layer的activation分布得不均匀,无法以线性的方式做压缩。就需要手工调节,修改scale和shift,或者针对特殊layer,修改数据映射方法。

一个比较完备的 神经网络模型量化综述, 记录下来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值