【文献阅读11】ReRAM引擎:压缩神经网络中激活值和稀疏值的综合利用

标题:Effective Zero Compression on ReRAM-based Sparse

来源:DAC-2022 /首尔国家大学

DNN Accelerators

摘要

利用模型的稀疏性减少无效的计算是DNN推理加速器中实现高能效被广泛使用的方案。然而由于紧耦合的交叉阵列结构,利用基于ReRAM的神经网络加速器是很少被探索的领域。现有的基于ReRAM的架构研究假定所整个交叉阵列可在一个周期内被激活。然而,鉴于对推理精度的考量,矩阵向量乘计算在实际中必须在小的粒度下进行,称为OU(操作单元)。一个基于OU的架构创造了利用DNN稀疏的新的机会。本文中,我们第一个提出了联合利用权重和激活稀疏性的实际的稀疏ReRAM引擎。我们的评估结果表明所提出的方案在消除无效计算中是有效的,并显示了性能和能量节省上的显著提升。

(简要翻译)

1. 引言

  • 图像分类、目标检测、语义识别中DNN被广泛运用。现代DNN模型参数量巨大。一些研究表明ReRAM可用于卷积和全连接层的加速,但仍处于初级阶段。首要的关注在于如何利用稀疏性。由于许多函数利用ReLU进行激活处理,因此权重和激活值都有很多稀疏。ReRAM可以利用细粒度的稀疏——bit级别的稀疏,因为bit密度和WL数量的限制。对于性能和能耗来说,稀疏性都十分重要。

结构剪枝算法被提出规整0值,因此全0的行和列可被找到。SNrram寻求细粒度列压缩,代价为引入高输出寻址消耗。

  • 现存的稀疏解决方案基于过于理想的ReRAM交叉架构,大多现存的基于ReRAM的DNN加速器忽视了每个单元的电流偏移对推理精度的影响,因此假定可同时开启128×128或256×256的阵列。然而实际中,512×512的阵列中仅仅9个WL和8个BL可在1个周期被激活。因此相比于类似ISSAC和PRIME这样过于理想的设计,基于OU的实际的ReRAM加速器极有可能有显著的低功耗。

  • 本文提出了一种细粒度的权重重排机制,可以有效利用ORC(Operation Unit-based row compression)与非结构化剪枝带来的高稀疏度。通过利用重排的灵活度和细粒度OU映射的,我们的机制显著提高了权重压缩率,消除了单列中的权重压缩不平衡的问题,可以更好地将压缩的权重转化为阵列资源的节省。并且,我们也引入了一个非压缩的0权重恢复机制在不增加阵列使用的情况下恢复模型精度。根据对3种常用DNN的评估,我们的想法与基准架构(2016年的ISACC)相比节省了3.27-4.26倍的的阵列资源。

2. 背景

  1. 基于RRAM的DNN推理加速器
  2. 在基于RRAM的DNN加速器中探索权重稀疏度
  • 结构剪枝:消除基于交叉阵列中0值的方式是结构剪枝。通过通道剪枝可以消除一列的权重,通过对所有卷积核的同样位置进行剪枝可以消除一行的值。虽然简单但有效。但在相同精度约束的条件下,结构剪枝压缩率低。
  • 0值对齐的权值压缩:介绍利用K-means聚类算法制造全0的行。然而技术有限,因为难以用成百列的0值来填满整个行。
  • 细粒度的权重压缩。SRE近来引入了在操作单元级别下消除全0行。然而,在有效的0值压缩机制下,权重剪枝并未完全贡献给权重压缩。再者,权重压缩并未完全地导致阵列压缩。由于权重压缩率在每个卷积核中不同,从而卷积核的长度不同带来了不平衡。

3. 有效0值压缩

3.1 概述

  • 需要在 OU中获得更多的全0行。卷积核重排可以聚集分散的0值。为了有效地聚集0权重,我们允许卷积核在一个子卷积核的尺度下在水平方向灵活地重排。与此同时,点乘运算在OU的尺度下进行。1个OU中的列权重必须来自于同一个卷积核保证准确度。因此,我们提出一种按OU的映射策略,在子卷积核的粒度下实现OU敏感的重排。
    • 映射卷积核中的权重到OU中
    • OU映射到阵列
    • 由于OU级别的子卷积核重排比卷积核重排提供了更大的灵活度,可以产生更多的额外的全0行。从而提升了阵列的压缩率。
  • 即便在细粒度的重排之后,仍然存在0值由于同一行中的非0值而无法被压缩。利用这个机会,我们提出了一种非0值恢复机制在维持同样的阵列压缩率时来进一步提升精度。
    在这里插入图片描述

在这里插入图片描述

3. 2 按OU的权重映射

假设2个filter在单个OU中是相邻的

  1. 矩阵重排。首先,设置1个基准fitlter,随后贪婪搜索能产生最多0行的filter。此为一次性搜索。有数量最多的未映射权重的矩阵被选为base filter来平衡所有列的压缩率。图3展示了所提出权重映射算法的运行示例。最左侧的表格展示了给定层的weight mask。最左侧为weight index。

  2. 压缩和OU映射。在filter重排之后,所有的0行会在OU的粒度下被压缩。非0行会被映射到OU上。此过程被重复直到获得同样数量的非0行来映射到单个OU中。为了在1个更小的粒度下获得同样数量的非0行,并非在整个filter的粒度下进行搜索,从而input index是必要的。同时,由于filter的排布对于每个OU都是不同的,因此output index也是不同的。input/output index的开销在第4部分被讨论。Filter 1和4来到OU1,Filter 2和3被映射到OU2。所有的0行(标记成绿色)被compressed out。非0行被复制到右侧的OU table中。
    OU1和OU2完成后,重复同样的步骤继续下一轮。
    对于剩下的weight mask中7-11的部分,选择filter2为基准filter。随后重复以上步骤,对于缺失的部分补0.得到OU3和OU4

  3. 阵列映射:一旦所有的权重重排,压缩,映射到OU后,我们将OU映射到1个或者多个交叉阵列中。由于我们产生了第1个OU并且压缩这些OU到单列中。图3最右侧的子阵列展示了阵列映射的结果。OU在水平方向经历了重排和垂直方向的压缩,我们可以正确地执行点乘,我们可以在合适的输入和输出上正确地执行点乘。

3.3 非压缩的0权重恢复

  • 图3展示了 阵列映射的例子。即便在compression之后,仍旧存在着很多被剪枝但还没有被压缩的例子。2个权重在单个OU行的例子中,00组合可被消除,但10和01不会。
  • 基于以上观察,我们提出在这些行中恢复未被压缩的10和01组合,在保持阵列压缩率的同时维持精度。由于我们知道未被压缩权重的行和列上的index,我们可以修订最初在非结构化剪枝中的mask。在图3中,Filter1的index4,Filter2的Index10,Filter3中的index3, 5, 8以及Filter中的Index4是未映射的。(没懂)

4. 硬件架构

  • 输入寻址:input index buffer
    • b编码:delta coding,存差额
    • bit packing
  • 输出寻址
  • 数据流:在PE中提出的基于ReRAM架构的数据流如图5所示
    在这里插入图片描述
    eDRAM buffer 用于存储输入激活和输入输出寻址。为了喂右侧的输入值到每个OU中,我们同eDRAM buffer中获取PE中的地址随后解码成相应的地址。使用这些地址,输入激活值被取到,并送入输入寄存器中同时被传送到相应的WL上,一旦相应的WL激活,则电流值会在每个bitline上被采样保持电路读出。接着,模拟输出被ADC采样成数字输出。如果相同filter的部分和的数据已经被存储到输出寄存器中,我们可以从输出寄存器中得到相应的数字输出并被合适地移位。与此同时,为了在输出寄存器中存储新产生的部分和,控制逻辑产生了带有输出寻址的寄存器的地址。

5. 评估

5.1 方案

  • 工作量:定制的仿真器;3种DNN模型:VGG-16,ResNet-18HE GoogleLeNet。在CIFAR-100上剪枝,稀疏度不同。输入和权重被量化为16bit固定浮点数。

  • 比较设计: 表1展示了基于ISAAC的加速器配置,作为本文基准。保守地增加32KB在PE的存储缓存中来存储输入和输出索引(总量为96KB)。ISAAC并未利用任何的稀疏。此外,我们与我们的机制和ISAAC和SRE中的机制进行比较。我们也比较了SRE中的小批量结构剪枝。公平起见,我们在相同的损失精度下比较这些机制。
    在这里插入图片描述

  • 5.2 性能和能耗

  • 阵列压缩率:3.27-4.26倍(2.49-3.70倍)

  • 能耗:即便寻址和输入缓存消耗,与基准相比,只消耗了基准的0.25-0.32x。原因在于只消耗了更少的PE。SRE比较我们的方案需要更多的PE

  • 敏感性分析:我们基于ResNet-18识别CIFAR-100数据集评估了3中OU高度下的阵列压缩率,能耗以及bit消耗,由于OU的高度取决于ReRAM单元的可靠性。我们实现了更高的阵列压缩率。
    在这里插入图片描述

在这里插入图片描述

5.3 寻址开销

所提出的架构在寻址时需要额外的存储和解码器来寻址。例如317KB需要用于在利用ResNet-18识别CIFAR-100的情况,然而SRE需要图8中几乎500KB的缓存。为了评估面积和功耗,我们用Verilog实现了寻址并用TSMC 40nm工艺综合。总面积为0.0015mm2和0.3mW,在我们的配置中几乎可忽略,在5.2部分的能量评估中,我们缩放这个结果到32nm工艺。

6. 总结

  • 本文提出一种新的卷积核重排的权重映射机制。利用基于DNN的稀疏和基于OU的行压缩操作。介绍了从未压缩0权重的恢复机制。我们有效地将权重的压缩率转换为阵列的压缩率,导致了更高的吞吐量,减轻了列之间压缩率不平衡的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值