背景
(发现问题):
在基于RRAM的加速器中,自注意力层在收集输入序列信息的过程中,需要所有输入序列词的前一层结果,由于输入实例在不同的时间步上被串行处理。
因此,自注意层一直保持停滞,直到上一层计算的结束。这就是数据危险,增加了在基于RRAM加速器上处理基于bert语言模型的时延。如图所示,bert模型的基本架构
数据冒险存在于Q,K,V生成与内积计算之间,由于BERT模型的每个encoder层都需要进行注意力计算,因此整体时延会大大增加。
并且图4 表明注意力模块占据大量时间。所以,必须要解决数据冒险问题,才能实现BERT模型的加速。
解决办法:
- 提出解决该数据危险的框架,包含算法优化和硬件设计。
- 利用窗口自注意力机制,缩小注意力范围,并且提出了一种窗口搜索算法,找到最优的窗口集合。
- 设计了充分利用该优化算法的硬件。
窗口注意力机制
本文基于以下两点提出了窗口自注意力机制:
- 首先,由于注意力机制集中在与目标词相关的重要词上,因此注意力得分低的词对注意力结果的影响相对较小。因此,排除自注意力计算得分低的单词不会降低算法的准确性。
- 其次,自注意力机制更多地集中在目标单词附近的单词上,这些单词往往比其他单词具有更高的注意力分数。如图6所示,注意力分数高的集中在目标词附近。
- 传统自注意力需要计算目标词与其他所有单词的相关程度,提出的窗口自注意力机制只关注目标词周围的单词,缩小了计算范围。
通过缩小注意力计算的范围,可以有效缓解数据危险,如图9所示。
在传统计算方式中,一个单词需要关注与其他单词的相关程度或者相似性;具体来说就是,w1的内积需要w1-w6的key向量;在应用了窗口注意力机制后,w1只需要w1-w2的key向量。传统方式在T7的时候才能进行内积计算,而应用窗口注意力后再T3就可以进行内积计算,缓解了数据冒险。
算法优化
但是,窗口尺寸的大小会影响计算的速度和模型的准确性,为了平衡这两个因素,文章提出贪心算法来寻找最优的窗口尺寸大小集合。
该算法输入是原始bert(未应用窗口自注意力机制)模型、下游任务、目标精度;最终输出一个最优窗口尺寸大小集合和微调bert模型。
该算法分为两个阶段:
- 首先,在保证模型精度的情况下,根据下游任务的不同,设定一个全局最大窗口尺寸来缩小搜索空间;
- 然后,采用贪心算法逐层搜索每个编码层的最优窗口尺寸。
本文将得到的微调模型在预处理阶段变成到RRAM阵列中,并且提出了支持自注意力计算的通用RRAM阵列硬件设计-ReBERT。
REBERT框架:
REBERT-basic
其中值得注意的是softmax操作是利用LUT实现的。为了防止指数运算结果溢出和LUT表过大,做了如下处理:
为了防止指数运算结果溢出,每一行的元素都减去当前行的最大值,这样指数运算的范围就缩小在0-1之间;
然后,防止LUT表过大,将数据分为LSB和MSB两部分,这样我们可以利用一个小的查找表和一个乘法操作来实现softmax操作。
此外,本文发现REBERT-basic未能完全发挥出窗口自注意力机制的优势,分析原因并做出如下改进。
RRAM-advanced
首先是分析原因:
与传统的自注意力不同,窗口自注意力需要为每次注意力计算提供一个新的key向量。所以在内积计算前,需要数据处理,因此会造成结构冒险。如图所示:
在w2的key向量生成后需要数据准备,占用了RRAM进行内积运算所需的阵列,为此W1的内积运算只能在T4进行;数据准备和内积计算都需要访问RRAM内积计算阵列,造成了结构冒险。
为了解决结构冒险,本文对key向量的生成、innner-product、weighted sum过程进行加速。加速方式如下:将应用了双阵列的结构命名为REBERT-advanced
首先,首先,将单输入数据实例分为两部分( MSBs / LSBs部分)。采用双阵列提高计算速度,效果如上图13c所示。
实验评估
根据窗口搜索算法得到的最优窗口大小集合,以及精度分析。可以看到精度控制在0-1%之间。
在GLUE各种任务中,与其他加速方法的比较
MobileBERT模型采用知识蒸馏,MobileBERT与BERT-base相当,但体积更小,速度更快。
DistillBERT:每隔两层transformer取其中一层的参数来作为DistillBERT的参数初始化,本质上减少了transformer的层数。
图17描述了表II中在基于ReRAM的加速器上处理BERT的各种设计配置的加速比。BERT - ASIC是在文献[ 39 ]的基础上,在ASIC加速器上对BERT进行处理,并将处理结果归一化为GPU的性能。
实验结果分析
速度对比
ReBERT-basic 比 GPU 提高了 22.6× 的性能,比基线提高了 3.4×。然而,由于结构性危险ReBERT-basic 中的加速没有达到从窗口自注意力中获得的理想加速。
而ReBERT-advanced采用双阵列输入,充分利用了窗口自注意力的优势,ReBERT-advanced 的执行速度平均比 GPU 快 24.6×。GLUE 数据集相对于基线/ReBERT-basic 的平均性能提升分别为 3.7×/1.8×。
对于 SQuAD 数据集,ReBERT-advanced 的加速比 GPU 高 8.5×分别比 baseline/ReBERT-basic 高 2.2×/1.9×。
能耗方面的对比
因为窗口自注意力将自注意力范围从 Nseq 减少到 2W + 2,其中 W 比 Nseq 小得多。
如图所示:首先,窗口自注意力平均减少了50%的内积计算,约占注意力计算总能耗的60%。softmax 计算也平均减少了 54%。自注意力的总计算量平均减少了37%。
普适性
除了在原始的BERT模型中加速,还在其他基于 transformer 的语言模型上进行应用:(a) BERT-large 和 (b) RoBERTa-base。
BERT-large 上的 ReBERT-advanced 比基线提高了 9.5× 的性能,而 RoBERTabase 上的 ReBERT-advanced 的性能比基线提高了 7.7×。
总结
分析自注意力机制发现bert的注意力计算时延增加的原因:
存在数据冒险-解决办法:通过窗口注意力减少计算量;
贪心算法寻找最优窗口大小集合。
仍然存在结构冒险:提出双阵列提高计算速度,消除结果冒险,充分发挥窗口自注意力的优势。
提出结合了窗口注意力机制和支持注意力计算的硬件设计-REBERT。文章来源:https://www.toymoban.com/news/detail-843230.html
在GLUE数据集中加速效果明显文章来源地址https://www.toymoban.com/news/detail-843230.html
到了这里,关于A Framework for Accelerating Transformer-Based Language Model on ReRAM-Based Architecture(论文笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!