【文献阅读07】基于ReRAM的DNN加速器中翻转bits共享交叉阵列

标题:Flipping Bits to Share Crossbars in ReRAM-Based DNN Accelerator
时间:2021/ICCD :international conference on computer design
机构:匹兹堡大学
说明:个人使用,图片若侵权可联系

本文并非全文翻译,仅为个人选择性笔记


https://research.com/conference-rankings/computer-science
在这里插入图片描述
此会议集为CCF-B会议
在这里插入图片描述


摘要

剪枝和量化很少应用到基于ReRAM的神经网络加速器中。一方面由于阵列中的单元访问过程是统一的,探索ReRAM中细粒度的剪枝和量化十分困难;另一方面,粗暴的量化结果以及ReRAM中对权重的低精度表示使得识别率低。

本文提出BFlip–一种新型的模型尺寸和计算降低机制,在多个bit矩阵之间共享交叉阵列。BFlip使用相似bit的矩阵,为每bit找到行和列的组合从而最小化到中心簇的距离。我们提出了一种矫正方法来提升精度,同时充分利用基于ReRAM加速器的存储和计算优势。实验表明BFlip有效地降低了模型尺寸,计算精度下降忽略不计。相对于ISSAC,提出的加速器实现了2.45的速度提升和85%的能量减少。


1. 引言

剪枝去除权重矩阵中的接近0的值;量化使用低位宽表示权值,但低于8bit一下的位宽可导致精度的巨大下降。

本问题提出了BFlip来翻转交叉阵列中的bits,从而多个bit矩阵可共用同一个交叉阵列。由于交叉阵列中的bits是统一访问的,分离每个bit会导致大量的元数据和控制逻辑。因此我们提出仅仅翻转行和粒度上的bit。首先我们将相似的矩阵聚集,然后flip他们从而匹配簇的中心bit矩阵。对于每个簇,只有中心bit矩阵会被存储在加速器中,其他bit的矩阵会从中心bit矩阵重建。然而,由于bits只能从行和列的粒度上翻转,bit矩阵不能完全匹配中心矩阵。我们应用一个翻转后的矫正算法,值更新归一化后的层的分布参数来减轻精度损失。最终,提出一个基于ReRAM的加速器可充分利用BFlip的存储和计算优势。

总的来说,本文做出了如下贡献

  • 提出一种新型的bit翻转机制来映射多个bit矩阵到同一个交叉阵列中,来显著降低DNN模型的尺寸和计算量。
  • 提出翻转后校准算法只需调整训练数据的前向校正,无需反向传播和权重更新。因此我们的方法比传统量化和剪枝技术中的重训练和细调制更快。
  • 充分训练的基于ReRAM的DNN加速器被提出充分利用其存储和计算优势。
  • 对最先进的DNNs的大量评估来分析BFlip对精度的影响。

2部分介绍必要的背景;3部分展示BFlip的工作流程;4部分描述工作流程的细节;5部分描述所提出的加速器架构;实验方法和结果在第6和7部分展示。最终8部分总结了相关工作;9部分为总结。


2. 背景

输入为WL的电压,权重为忆阻器阻值。最近研究表明忆阻器最多可存储7bits。然而由于复杂的控制逻辑和低精度,众多基于ReRAM的加速器采用2-bit,一些文章采用单bit。
在这里插入图片描述
至少8bit需要用于表示权重,因此,1个权重用多个bit表示。输入电压使用DAC产生,输出电压用ADC读出。每个位线上仅仅表示部分和。
在这里插入图片描述

3. 概述

在这里插入图片描述

  1. 分解:将每一层的权重展开成bit matrix
  2. 聚集:bit matrices 被分为clusters,每个cluster有一个中心bit matrix
  3. Flipping:找到行或者列的flips组合(metadata)
  4. 重建:根据metadata重建所有行或者列的组合
  5. 校正:重新运行前馈操作减少推理精度的损失
  6. 如果精度不满足,首先检查在Flipiing操作中进行更多的迭代是否可以提升精度,否则增加cluster的数量并重新映射直到满足所需的精度。
4. BFLIP 细节
  1. 分解
  • 阵列规模: n × n n \times n n×n
  • 最大数量的bit matrix可以共享同一个交叉阵列:m
  • 分区尺寸: ( n − 2 m ) × ( n − 2 m ) (n-2m) \times (n-2m) (n2m)×(n2m)
  1. 聚集
  • Clustering决定哪个bit matrices可以共享同一个交叉阵列
  • Hamming Distance作为指标来测量距离
  • Kmeans来分组,共分K组
  • 中心bit matrix通过取同一个cluster中的bit matrices的平均值实现
  1. Flipping
  • 最小化cluster中的其他矩阵到中心矩阵的距离。简单的方式是找到两个矩阵中不匹配的bit,只Flip这些bit使得其与中心矩阵相同。然而这种方式需要大量的坐标存储需要。另一个问题是阵列中同时激活所有的单元,单次flipping每个bit将会打破规则的访问模式与复杂的逻辑开销
  • 因此我们在行和列的粒度下提出flip bits。每行每列仅需要1个bit来记录是否被flipped。对于一个 t × t t \times t t×t的bit矩阵。只有 2 t 2t 2t bits 的metadata数据,每个bit的开销为 2 / t 2/t 2/t。我们用 t b i t t bit tbit的向量记录flip状态,并称其为RFV(row flip vector)和CFV(column flip vector)。在bit matrix中flip bit A来匹配中心矩阵C。首先通过计算A和C的异或值来得到矩阵B。B中,1代表着A和C之间存在不匹配。在B的每行每列中定义分数变量s来表示不匹配的数量。当flipping 行或者列中的值时,1行或者1列中相应的s变为t-s。找到A中行或者列的组合来匹配C,等价于在B中找到行或列的组合最小化总分数。然而,找到最优的flip模式可以被抽象为SVP问题(Shortest Vector Problem ),被广为人知的是NP问题。因此,我们提出一种贪婪算法可以使得两个矩阵尽可能相近。
  • 我们首先计算B中每列的1的个数,如果任何分数比 t / 2 t/2 t/2大,接着我们翻转这列并在CFV中记录此列已经被翻转,随后我们计算所有行和列的分数,接着在行中执行同样的操作。在行Flip之后,此前s小于t/2后又大于t/2的可能性是存在的,因此我们迭代地执行行检查或者列检查。
    在这里插入图片描述
  • 尽管在行或者列检查后所有的分数都小于t/2,仍然 可能会有优化的区间。例如在图4中total scores=20时,同时翻转第2行和第2列得分会更小。实际上,除了同时翻转1行1列,我们也可同时翻转多行多列来进一步减少得分。总之,对于列C和行R,同时翻转这些行或者列在满足如下公式时可以减少得分
    • sc和sr是列和行的得分
    • R是行数,t是bit矩阵的大小
    • t1是行列交叉点的bit值为1的个数
    • t0是行列交叉点bit值为0的个数
    • 整体的算法在Algorithm 1中
      在这里插入图片描述
  1. 重建矩阵
  • CFV和RFV在此前的步骤中记录了如何最小化每个矩阵到中心矩阵的距离。重建过程如图5所示。深色背景展示了Fllip bits。由于Flipping步骤没有保证flip pattern使得A和C相同。重建的A‘只是A的近似。不匹配的地方用红色标记了。同样的,我们可以从1个cluster的中心矩阵中重建其他矩阵的近似。结果是我们得到了新的修改后的DNN模型,包含所有重建的bit矩阵。
    在这里插入图片描述
  1. 校正修改后的DNN
  • 许多最近的DNN包含Batch Normalization 来加速训练并且提升精度。然而计算每一层的均值mean和标准差standard deviation会引入大量的计算开销。所以BN层基于数据分布一致的假设,使用从训练数据中收集来的数值(mean & std).由于在前一步中修改后的DNN模型对权重产生了噪声,改变了数据分布,假设不再成立。如果在推理阶段直接使用修改后的DNN模型,模型精度从76.13%下降到71.528%。我们通过更新BN中的数据分布来解决这个问题。此处值得注意的是我们仅仅只是更新数据分布而非重新训练参数。
  • 对于没有BN层的网络,我们在卷积和全连接之后增加了BN层来减轻权重噪声的影响。表1展示了VGG16在有和没有权重的情况下的精度。增加BN层不仅增加了baseline精度,也有效减轻了权重噪声的影响。
    在这里插入图片描述

在这里插入图片描述由于所有的矩阵需要从中心矩阵中重建,所以我们只需要存储中心矩阵和metadata。如果一个cluster有大于m个矩阵,此cluster会拆分成sub-cluster使得矩阵数量不大于m。

图6中,由于交叉阵列只存储中心bit矩阵,来自交叉阵列的输出(O0-O5)是输出I和中心矩阵C的乘累加结果。在应用0值在WL时,顶部的metadata并不参与计算。为了获得I和A‘之间的乘累加结果,需要额外的步骤来调整结果。A‘中的bit被标注为Bi。深色背景存储的是1-Bi。RFV中的相应bit为1。我们在相应的输入中施加相反的电压。从而O0,O2, O4, O5的CFV是1,输出为
在这里插入图片描述
可以从O7中减掉这些输入。对于CFV中O1和O3为0,输出为
在这里插入图片描述
可以通过加上O6来调整输出。调整后的输出为I和A‘的乘积

6. 架构

在这里插入图片描述

  • 本节展示BFlip 加速器。加速器通过PCIe总线集成,作为一个接受来自CPU任务的DNN处理器。顶层模块结构遵循通用的基于ReRAM的加速器设计,包含图7中的许多tile。tile之间通过片上的集中mesh互联。图7右侧展示了每个tile的细节。每个tile有eDRAM缓存器来存储DNN的输入值,输出缓存针对输出aggregation和移位加来组成完整的结果。池化和激活单元实现实现非线性的激活函数。计算分布到PE中。每个PE有一系列ReRAM阵列来实现MVM计算。每个交叉阵列被分为4个区域。顶部的CFV和RFV。右侧存储RFV和RFV!。左部分存储中心矩阵。输入和权重都是2的补码形式。
  • MVM对1个bit矩阵的乘累加分为3部分。第1部分,RFV向量和CFV相同从交叉阵列的顶部读出。CFV存储在Buffer1中,RFV向量加载到WL驱动的RFV缓存中。接着,共中心矩阵的结果存储在Buffer2中,RFV和RFV!的结果存储在Buffer3中。第3部分,ALU调整以上3个Buffer的结果来获得MVM结果。
7. 方案
  • 精度模型:MNIST,SVHN, Cifar10,ImageNet。针对SVHN和Cifar10定制了神经网络结构。结构的细节在表2中。对MNIST,在LeNet5上实现。对ImageNet,在5个不同的网络实现,VGG16,ResNet50, ResNeXt,GoogLeNet和DenseNet,以上这些网络在机器学习中都十分流行。
  • 硬件模型:针对BFlip实现了一个定制的精确到周期的仿真器。硬件参数如表3所示
    在这里插入图片描述许多参数值采用ISSAC中的值。对BFlip加速器中的组件,我们使用CACTI和NVSIM来模拟SRAM和ReRAM阵列。SRAM和逻辑使用32nm工艺。交叉阵列使用单bit SRAM。写和读分别需要4.4ns和52.2ns。DAC精度为1bit。ADC精度为7bit。我们使用ISSAC中相同的ADC设计。我们比较与BFlip和ISSAC,SRE。ISSAC是最为广泛使用的基于ReRAM的加速器比较基准。性能和能耗可方便地归一化从而与其他基于ReRAM的加速器比较。SRE是最先进的利用ReRAM阵列加速稀疏模型的加速器之一。ISAAC和SRE均使用2bit单元。为了更公平地比较,我们修改了以上2个基准来使用单bit单元。

在这里插入图片描述

8. 结果
  • BFlip的评估分为2节。首先评估BFlip在不同的m值下对精度的影响。关于压缩率,在BFlip中使用不同的压缩率与量化中使用不同的bit宽度有相同的结果。表IV展示了对不同的m等效的量化宽度。假设交叉阵列的尺寸为128*128。在第2部分,我们分析了BFlip在性能提升和能耗减少上的优点。
    在这里插入图片描述

  • 精度:
    在这里插入图片描述

  • 能耗
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值