【文献阅读06】ReRAM共享:基于ReRAM的深度神经网络加速器的权重共享
个人文献阅读记录,ReRAM稀疏神经网络加速器
标题:ReRAM-Sharing: Fine-Grained Weight Sharing for ReRAM-Based Deep Neural Network Accelerator
时间:2021
机构:上海交通大学
说明:个人使用,图片若侵权可联系
- 深度神经网络加速器在近年来的各种应用中获得了强劲的增长。与此同时,多层网络中的大量存储和计算导致了大量的矩阵乘累加操作。ReRAM天然地适合进行乘累加操作。因此,基于ReRAM的加速器被广泛用于DNN的部署。研究者致力于压缩DNN来加速基于ReRAM的深度神经网络加速器。然而,现存的工作基于ReRAM交叉阵列级别的压缩。一些粗粒度的剪枝在高压缩率下缺乏灵活性。
- 本文展示了ReRAM共享来探索基于ReRAM加速器的细粒度的权重共享压缩方案,ReRAM共享是一个软硬件协同机制。由于ADC带宽和数量的限制,在ReRAM中DNN的计算在小细粒度级别进行,称为OU(operation unit)。基于此,本文提出了ReRAM共享来降低DNN计算的冗余,同时维持表达能力【精度吗?】。再者,ReRAM分享算法与传统的剪枝技术正交。本文可以集成他们来进一步缩小神经网络的尺寸。接着,本文提出了ReRAM共享的架构,在基于ReRAM的加速器中介绍了索引表和加法器,来支持更多的ReRAM共享算法。实验结果表明,所提出的ReRAM共享分别在CIFAR-10和ImageNet中实现了59.39倍和14.47倍的压缩率提升,并只有微小的精度损失。
1. 引言
- DNN在许多应用中取得了巨大成功,然而锁着DNN的深度加深,计算量增长巨大。一些硬件架构被提出来加速DNN计算。ReAM是一种新型且具有潜力的存内计算架构,用于处理DNN计算,可通过消除存储和处理之间的数据搬移实现高速。
- 神经网络压缩方法可显著降低DNN的负载。一种有效的压缩方式为剪枝算法,可正则和减掉DNN中不重要的权重。传统的剪枝算法会在权重矩阵中导致随机分布的0.然而这些zero-out的剪枝算法难以在ReRAM加速器中实现,因为DNN推理在交叉阵列级别难以实现。
- 一些工作提出了结构剪枝方案,利用细粒度级别的交叉阵列。然而,交叉阵列级别的细粒度太大,缺少压缩灵活度。尽管PIM-Prune被提出同时坚实行和列,并映射压缩权重到交叉阵列中,但关注点仍旧在交叉阵列级别的细粒度上。
- 最新的SRE中,指出了只有忆阻器阵列的一部分可被同时激活,因为收到了ADC带宽的限制。激活单元为OU。SRE提出了基于OU的剪枝方案。然而,包括SRE,现存的剪枝方案只专注于减少权重参数的数量,而这将会降低模型的表达能力。
- 权重分享算法将权重分组,并且是一种逐渐兴起的方案。相比与权重剪枝算法,权重分享可以降低模型的容量,并维持模型的表达能力。然而,现存的权重分享算法将权重分成不规则的模式,与基于ReRAM的加速器不兼容。一种定制的权重分享方案急需被探索。再者,权重分享与剪枝技术正交。本文集成了剪枝在精度损失可忽略的情况下实现了模型的压缩。
- 本文提出了一个前瞻的研究来设计基于ReRAM的在OU级别的细粒度权重分享机制。据我们所知,我们是第一个试图应用权重分享到基于ReRAM的加速器的。如下,我们总结了我们的贡献。
- 提出了细粒度的权重分享算法,应用权重分享到OU级别的ReRAM加速器,为了维持网络的精度,我们利用了可代替方向的的乘法器(ADMM-alternative direction method of multiplier)训练方案。此算法将权重分组和权重训练过程解耦合,可实现更好的压缩率和精度。
- 提出了ReRAM共享实现架构使得在细致的分享机制下的高效的神经网络处理。设计了索引表记录共享模式和恢复输出顺序。也设计了计算流来计算细粒度的权重分享.
- 进行了实验评估所提出的ReRAM共享的性能。试验结果展示了ReRAM共享可在CIFAR-1和ImageNet上实现近59.39倍和14.47倍的压缩率。此外,性能提升上,ReRAM共享在CIFAR-10和ImageNet上显示了超过了最先进的PIM-Prune 139%和306%的提升。我们也展示了能量和面积效率上ReRAM均超过现存的剪枝方案。
2. ReRAM共享算法
-
此部分中,我们将介绍基于ReRAM加速器的细粒度的权重共享方案。被ADC带宽和交叉阵列中ADC的数量限制。每个周期我们仅激活1个OU单元。此种细粒度的压缩使得压缩权重时实现更高的压缩率上更加灵活。
-
ReRAM共享的关键算法在于在OU级别分享权重。我们将相似的OU聚集成1个OU。为了在DNN层中应用权重分享算法,我们利用K-Means算法找到相似的OU可分享同样的输入。假设1个卷积神经网络的的卷积层尺寸为ssio,s,i,o表示卷积尺寸,输入通道和输出通道数。为了映射到交叉阵列中,首先折叠权重为NM矩阵,N=ssi,M=o。假定OU尺寸为hw大小,权重可被映射到nm 个OU中,N=nh,m=mw。将同1行的OU分组为k个簇。对于每个簇,计算OU的均值作为共享OU,我们只需在芯片上存储共享OU。总的压缩率为m/k。我们可调制k来调整压缩率。共享的OU被移到左侧,被映射到阵列中。如图1中的4所示。可注意到,在压缩之后,同样BL的输出不能直接被累加。主要是因为余下的OU被移到左边,输出会发生错误。我们定义此问题为输出不对齐问题。以图1中4为例。OU6移到左侧,占据了OU4的位置,但OU6的输出不能不OU3所加,因为OU3需要和OU4相加。在第3部分中,我们提出索引表来记录分享模式,并解决输出不对齐问题。在下一部分讨论这个问题。
-
如图1的1所示。假设OU尺寸为2×2,OU1分享了OU5和OU7的权重,OU2分享了OU4的权重,OU6分享了OU8的权重。所以我们仅需要存储芯片中OU1,OU2,OU3和OU6的权重。再者,OU5,OU7,OU4的OU8的计算被避免了。我们定义分享关系为分享模式。在此情况下,第1行的ReRAM交叉阵列中,分享模式为{1:1,5,7},{3:3};第2行的分享模式为{2:2,4},{4:6,8}。
-
为了维持精度,我们需要重新获得共享权重。直接训练方案过于粗暴并导致精度退化。正则训练被提出用于适配一个紧凑的模型(GMM或K-Means),同时保持更少的精度损失。尽管如此,同时聚集和训练权重使得训练过程不稳定。我们因此应用基于ADMM的训练方案来就和权重聚集和权重正则化步骤来解决训练过程中的稳定性问题。图1中的2和3表示,我们的基于ADMM的训练算法会交替地执行权重聚集和权重正则训练,直到其收敛。我们添加了现有权重和聚集权重之间的距离作为正则化项集成到损失函数中。所提出的训练算法使得在正则化项数的的帮助下权重和质心更灵活的搜索,因而可获得更好的模型精度和压缩率。
3. 架构设计
本文中,我们提出了基于ReRAM的权重分享来支持ReRAM共享算法啊,解决输出不对齐问题。
A. 架构层面
-
我们提出的设计是SRE的延伸。如图2所示,芯片包含多页,在每页上,128个tile通过共中心的网格互连,使用IO接口和片外的DRAM以及其他的页面通信。1个tile包含128个在线乘累加(IMA, in-situ multiply-accumulate)单元,其中包含阵列,eDRAM缓存,移位加和输出寄存器。eDRAM缓存被设计用于缓存输入,输出数据和对每个IMA的指令。移位加聚集计算结果并在输出寄存器中缓存。每个tile包含1个池化单元和非线性单元支持tanh和sigmoid操作。池化单元包含1个比较器,加法器和乘累加来方便池化功能。
-
每个IMA包含1个ReRAM交叉阵列,连接到DAC,ADC和移位加,索引表,加法器,输入寄存器和输出寄存器。索引表存储了共享模式,指出了属于同一个输出寄存器的共享OU。我们在每个IMA上装配了额外的寄存器来暂存输出结果。每个IMA中增加了额外的加法器求和激活值和共享OU短暂结果。我们将讨论我们在第3-B部分所提出的计算流。
B. 计算流
-
在此部分,我们首先介绍了本架构所提出索引表。如图3(a)所示,传统NN推理中,同一个bitline中的OU输出需要被求和。例如OU3和OU4,然后存储OU3和OU4在R2寄存器中。在应用ReRAM分享算法后,输出不对齐问题出现了。同1列的输出不能被直接累加。索引表记录了共享模式,因而我们可以恢复输出。对于OU共享同1行,每个IMA的索引表只需记录1行的OU指数。例如图3(b)中,索引表存储了共享模式为{1:1,5,7},因此OU1的输出应被写入到OU5和OU7的寄存器中。即,我们分配OU1的输出不仅属于R1,也属于R3和R4。
-
在每个周期,每个IMA的计算流程按如下组织:(1)激活,共享OU计算,输出结果至IMA中的额外寄存器中;(2)加法器从索引表中读出寄存器数量,从相应的寄存器中取值;(3)加法器将取来的值与额外寄存器中的值相加;(4)加法器写结果至与索引表相联系的相应寄存器中。
-
我们展示了图3左侧的例子。在ReRAM共享后,只有OU1,OU2,OU3和OU6的权重被映射到交叉阵列中。映射后的OU被顺序执行。第1个周期,OU1的输出被写入寄存器R1’中,即O1应当被写入R1,R3,R4寄存器中。加法器将O1余寄存器R1,R3,R4中的结果分别相加。加法结果重新被写入寄存器R1,R3,R4中。以上过程一直重复指导神经网络推理完成。
C. 硬件分析
- 我们所提出的ReRAM共享架构介绍了加法寄存器,索引表以及额外的加法器集成到传统的基于ReRAM的架构中支持ReRAM共享算法。我们将讨论每个IMA中的硬件消耗。对于1个128×128的交叉阵列。我们装配了1个32bit的额外寄存器来短暂地存储输出作为1个周期中仅仅一个激活的OU值。索引值包含了1簇中激活OU的索引模块。具体上,假定每个索引在分享模式中需要abit,索引模式包含b指数。索引表需要a×b bits。索引的bit位宽与每行的OU值相关。例如在ResNet-18中,每行的OU数量最高1024,因此我们需要10bit(a=10)来记录OU的数量。索引的数量1簇中最大的OU相关。如在我们实验中测量的一样,1簇OU中的最大数量是12,因此b=12。因此,对于ResNet-18,我们需要120bits的索引表。为了支持3-B部分的额外描述,我们也装配b个32-bit加法器。像以上讨论描述的一样,ResNet-18中b=12。总的来说,所引入的硬件消耗可忽略。
4. 实验
A. 实验配置
- 我们在最先进的CNN模型上评估了ReRAM共享方案,包含ResNet-18和VGG16,紧密的模型包含ShuffeleNet_v2和MobileNet_v2。为了验证所提出的ReRAM共享算法的准确性,我们测试了ImageNet和CIFAR-10数据集。在Pytorch框架下实现了我们的训练方法。
- 我们使用LSReRAM,XCS以及PIM-Prune作为基准。当与PIM-Prune相比,我们比较了以上提出的3中方案:行方向列稀疏(SR+XCS),列方向阵列行稀疏(SC+XCS),记忆基于模块的剪枝算法。由于SRE在剪枝后没有提供精确度,我们无法提供与它公平的比较。再者,由于LSReRAM没有在ImageNet上提供精确结果,我们无法和它在ImageNet数据集上比较。我们为我们所提出的架构建立了1个仿真器,使用了SRE中同样的配置。默认的交叉尺寸为128×128,每个忆阻器单元存储1bit。
B. 实验结果
-
表1展示了CIFAR-10数据集上的结果。我们注意到我们的方法可压缩ResNet-18和VGG-16近60倍,精确度损失为1%。余PIM-Prune相比,可进一步实现2倍的压缩率并且精确度提升。这证明了通过ReRAM共享得到的稀疏确实帮助进一步提升而来模型压缩率,精度损失下降较少。为了进一步压缩NN模型,我们应用8bit的量化。此模型可进一步被压缩4倍。总的来说,通过集成剪枝、量化和ReRAM共享,我们实现了超过200倍的压缩率,并且没有精度衰退。
-
表2展示了ImageNet数据集上的实现结果。我们注意到剪枝算法导致了更严重的模型精度损失,并且压缩率有限。具体地,对于ResNet-18模型,我们的方案实现了超过4倍的压缩率,甚至在精确度上有所提升以及精确度损失可忽略的情况下实现了14.47倍可忽略的精确度的损失。当与PIM-Prune算法向比较,我们的方案实现了3倍以上的压缩率。结果表明我们所提出的ReRAM共享算法更灵活,对原始模型的损害更少。我们也测试了ShffeleNet_v2和MobileNet_v2模型。结果显示我们的模型在精度损失可忽略的情况下实现了6倍和8倍的压缩。
-
我们也探索了不同OU粒度下的压缩率。如图4所示,当OU粒度更小时压缩率更高,因为小的OU导致了更细粒度的压缩。我们注意到当粒度保持一致时,更多WL的压缩率高于更多BL的。因为同一个输入通道的权重相比不同输入通道的有更多冗余。再者,我们方案的压缩率在不同的粒度下比PIM-Prune提升了2倍。
-
图5展示了能量和面积效率在ResNet-18和VGG-16中的情况,能效被归一化到没有剪枝的模型,标记为无剪枝(Non Sparse)。我们的方案在ResNet-18和VGG-16上提升了15倍的能效。面积在ResNet-18和VGG-16上提升了6.7和6.8倍。总的来说,能量和面积均超过了基准方案。
- 总结
本文提出了针对神经网络的新型的ReRAM共享算法来探索基于ReRAM的网络的稀疏度。我们所提出算法基于实际的设计中1个周期内只有一些行和列被选中。因此我们有机会探索基于细粒度的DNN稀疏。为了有效地执行我们所提出的ReRAM共享算法,我们设计了ReRAM共享架构,只带来了可忽略的硬件消耗。我们的实验表明我们的方案显著提高了模型压缩率,在CIFAR-10和ImageNet中只有很少的精度损失。再者,我们的方案相比最先进的方法有更高能量和面积效率。
更多推荐
所有评论(0)