- 题目:FPAP: A Folded Architecture for Energy-Quality Scalable Convolutional Neural Networks
- 时间:2019
- 期刊:TCAS-1
- 研究机构:南京大学
1 缩写 & 引用
- FPAP: folded precision adjustable processor
- FIR: finite impulse response
- BPE: bit-pair encoding
- PP: partial product
- CP: control path
- AP: arithmetic path
- PAMAC; precision-adjustable MAC unit
2 abstract & introduction
减少神经网络冗余度的两个方面有:不同网络层采用不同的量化位宽、以及利用稀疏度跳零
- 以前的很多工作主要是面向其中的一个,比如说Cambricon-X、SCNN、UNPU、Stripes,这篇论文要将二者结合起来,用折叠的技术解决,有点像位串行计算,还不消耗很多资源
- 当然,折叠和位串行会导致处理速度变慢,因此需要优化处理速度,比如说bit-pair encoding,在权重和activation压缩的动态切换
- 如果在某些情况下,比如说电量不足了,它还可以舍弃掉一些不重要的计算,以减少功耗
- kernel重分配策略来解决负载不平衡的问题
3 CNN中的折叠计算
3.1 折叠的MAC
这里提出了bit-pair编码,或者叫改进的Booth算法
首先把一个数用
4
n
4^n
4n的形式表示
这样乘加操作就变成了移位、加法,其中V可以取{-2、-1、0、1、2}
在这里,bit-pair编码的过程叫做“分解”,分解之后会有比特级的稀疏度,可以跳掉0比特的情况,这里他统计了一下Alexnet和VGG16各层分解之后有效的项的次数,发现平均有效次数小于三,可以利用这个稀疏性弥补延时长的问题。
权重和activation相乘,可以分解权重,也可以分解activation,具体分解哪个呢?可以动态决定,每次去计算量最少的那个,可以提前把分解的结果算出来,反正权重和activation都是可以复用的
需要近似计算的时候,只需要算权重比较大的那几项就好,忽略掉不重要的那几项
3.2 折叠的FIR滤波器
常规的滤波器电路是这样:
但是如果遇到0的情况,需要跳掉怎么办?
这里采用折叠的方法,只用一个MAC结构计算这个滤波器,跳掉零不会消耗时钟周期,
4 FPAP架构设计
一共用MxN行个PE,同一行的PE共享相同的input activations,不同行PE对应不同行的input activation;同一列的PE共享相同的kernel,不同列对应不同output channel
上图中一个PE包含了一个FoFIR、两个FIFO、一个activation解码器和一个加法器;
这两个FIFO中,AFIFO来自input activation,因为不同PE的稀疏度不同,计算速度不一样,需要FIFO同步;输出的部分和放到ACCFIFO,有一个column-index在这计算输出坐标。
FoFIR就是为了完成卷积操作,具体结构如下:
上图中的PAMAC就是precision-adjustable MAC unit,完成一个MAC操作,具体结构如下: