论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

论文精读-ReTransformer: ReRAM-based Processing-in-Memory Architecture for Transformer Acceleration

优点:

1、基于新型存储器ReRAM实现Transformer模型加速,并设计了一个新的PIM结构ReTransformer,其分为三种类型的功能组件,处理子阵列、缓冲子阵列、内存子阵列。

2、使用矩阵分解解决缩放点积中的数据依赖,减少了中间结果频繁重写,降低了计算延迟。

3、实现了低功耗混合softmax函数,通过在新型存储器ReRAM上实现选择和比较操作,并利用函数变形+查找表得到softmax结果,降低了计算功耗。

4、通过矩阵拆分,将输入数据流分割成更小的部分,以实现更细粒度的流水线设计。这种方法相较于传统的层流水设计,显著提升了crossbar的利用率和加速器的计算性能。

概述

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。尽管研究人员已经成功地应用了基于基于ReRAM的内存中处理(Processing-in-Memory, PIM)来加速卷积神经网络(cnn)和递归神经网络(rnn),但Transformer中缩放点积注意力的独特计算过程使得这些设计难以直接应用。此外,如何处理矩阵-矩阵乘法(MatMul)中的中间结果以及如何在Transformer的更细粒度上设计管道仍未得到解决。在这项工作中,我们提出了ReTransformer -一种基于ReRAM的变压器加速PIM架构。ReTransformer不仅可以使用基于ReRAM的PIM加速Transformer的缩放点积注意力,而且可以使用所提出的矩阵分解技术避免编写中间结果,从而消除一些数据依赖性。此外,我们提出了一种新的用于多头自关注的子矩阵管道设计。实验结果表明,与GPU和Pipelayer相比,ReTransformer的计算效率分别提高了23.21倍和3.25倍。相应的整体功耗分别降低1086倍和2.82倍。

背景介绍

一个杰出的基于自注意的模型transformer[28]显著减少了远程依赖关系之间的路径长度,从而在许多转导任务中实现了最先进的性能。

然而,由于NLP序列的复杂性,已经为简单性进行了优化的Transformer模型仍然需要大量的计算资源。例如,[28]中提出的原始Transformer模型是许多设计的支柱[1,30,34],它有65M参数。再举一个例子,流行的预训练模型BERT[6]有108M参数。ALBERT[16]提出对参数进行修剪,将总参数数减少到12M,精度下降2.2%。结构级的优化也被开发出来,比如用平均注意力模型[34]代替顺序模型,探索非自回归解码器[9],在相邻层[30]之间共享权重。然而,结构调整要么会导致模型中固有词依赖关系的丧失,要么会导致更复杂的训练过程。而且,这些加速方法没有考虑硬件特征。

为了在不牺牲精度的情况下提高Transformer推理性能,移动和嵌入式系统开始采用节能的特定领域硬件加速器。一个主要的性能瓶颈——在自回归解码器[30]中大量使用点积注意力,需要在加速过程中进行特殊处理。其次,频繁来回移动中间数据存储器和处理单元之间也应该减少,以提高能量效率。

加速器设计

Transformer模型分析

Transformer模型结构

核心:前馈网络(FFN),多头自注意力(MSA)
(LN+MSA,LN+MLP)

变压器由一个编码器堆栈和一个解码器堆栈组成,它们共享相似的模块结构。以[28]中的结构为例,编码器具有6个相同模块的堆栈,如图1(a)所示。每个块由两大功能模块组成:多头自注意和前馈,分别由图1(b)中的浅红色块和蓝色块所示。在这两个主要功能模块之后,都有一个残差块来添加输入和输出,并执行层范数计算,如图1(b)中的绿色块所示。多头注意层从输入嵌入或之前的编码器块中获取输入。解码器堆栈也由6个相同的块组成,但每个解码器块由三个主要功能层组成,包括两个多头自注意层和一个前馈层,如图1©所示。与编码器块相比,解码器块有一个额外的编码器-解码器自注意模块,该模块有一个输入与编码器堆栈的输出相连。

image-20240505180045915

Transformer计算

image-20240505180146108

image-20240505180206719

image-20240505180220813

image-20240505180235912
核心包括点积计算,缩放除法和softmax中的e^x指数运算。
前馈网络输出:

image-20240505180327558

基于ReRAM的存内计算设计

1、基于ReRAM向量矩阵和矩阵矩阵乘法

image-20240505180621966

以上的VMM操作可以在一个读取周期内完成。为了执行MatMul,可以将输入矩阵分离为输入向量,然后执行多个vmm以获得MatMul结果。
基于物理定律模拟计算。区别传统计算基于布尔逻辑数字计算。

2、基于ReRAM的内存逻辑

基于ReRAM的内存NOR逻辑的工作原理。单元格”A”和”B”的电导值表示输入。在下面表格中,”1”表示高电导,”0”表示低电导,”X”表示未知状态。首先将输出单元初始化为”1”。在周期1中,输入单元的Pterminals被设置为执行电压V(0,NOR),而输出单元的 terminal则接地。因此,P如果单元”A”和”B”之间至少存在一个”1”,则输出单元将被编程为”0”。类似地,XOR实现如(b)所示。周期1和周期2使用的执行电压分别为V(0,OR)和V(0,NAND)。

image-20240505180859262

(通过多个周期更新变化值,初始值不变)
设计NOR和XOR的主要原因是为了后面混合softmax中实现了基于reram的选择和比较逻辑电路。

3、过去基于ReRAM的PIM设计

基于ReRAMPIM设计加速了神经网络模型的执行,具有很高的功率效率。PRIME[4]和ISAAC[24]设计利用ReRAM来加速cnn的推理。Pipelayer[27]支持ReRAM神经网络训练,并通过使用流水线阶段和平衡计算资源进一步优化计算延迟。基于ReRAM的RNN [20] PIM设计扩展到使用乘法器阵列和特殊函数单元来处理元素乘法和非线性函数的RNN加速。

体系结构设计

image-20240505182627578

1、Processing子阵列是数据处理引擎,用于执行缩放点积注意力和前馈的计算。更具体地说,它们由ReRAM crossbar阵列、计算控制器电路以及模拟/数字接口电路[4]组成。
2、Buffer子阵列作为计算单元的缓存。其大小由应用需求决定。
(1)它们从内存子数组接收数据,并将数据传递给处理子数组的WLs。-输入数据缓存。
(2)它们从BLs收集结果并存储数据。-中间数据缓存。
3、Memory子阵列是用来存储原始输入数据和最终计算结果的专用存储器。

ReTransformer设计动机与设计优化

1、中间结果保存?

Q:Transformer在执行过程中需要保留许多中间结果。如图4(a)所示,图1(d)中MatMul的两个操作数Q和KT都是由前几层生成的中间结果。为了计算后续的Q·KT,必须将这两个矩阵中的一个作为电导矩阵加载到ReRAM阵列中以执行PIM MatMul。然而,由于编程驱动电路的限制,将矩阵编程为ReRAM数组通常是逐列完成的,典型的延迟为7.2NS/column[25]。具有多列的Q和KT矩阵在将中间结果加载到ReRAM数组中时会导致相当长的延迟,并导致计算停滞。此外,多头自关注模块的迭代计算不可避免地会导致ReRAM单元的频繁重写,从而导致较高的写入能耗。

A:优化的MatMul

image-20240505212649227

我们进一步分析了ReRAM-based PIM实现中FC/CONV层和MatMul层的计算步骤。如图4(b)所示,FC/CONV层的计算主要是vmm,其操作数为输入和权值矩阵。经过训练的权重矩阵,如W1、W2和W3,在推理期间保留在ReRAM横条中(crossbar需要写入才能长期保存)。因此,对ReRAM交叉条的写访问总数由初始化次数决定,通常远小于对ReRAM交叉条的读访问总数(或在其上执行的计算)。相反,在计算过程中,MatMul操作中的中间结果KT经常被写入ReRAM crossbar中。将中间结果存储在其他介质中,例如片上SRAM或片外DRAM,可能会减轻对ReRAM crossbar的写访问的大量开销,但会带来额外的硬件成本或性能开销

直到前一个线性层(K = X·Wk))的计算完成后,中间结果(KT)的写入过程才能开始。请注意,必须存在一个映射方案,将前一个线性层K的输出以转置格式映射到ReRAM横杆上,即KT。显然,MatMul (Out = Q·KT)的计算要等到KT写入完成后才能进行。这种计算-写-计算(CWC)依赖关系是线性层和MatMul层之间固有的,将在ReTransformer中通过分解Q和KT两个乘法步骤之间的MatMul来解决
(ps:因为k是计算出来的,所以无法提前写入crossbar中,所以KT在后一个阶段必须写入到crossbar中,它无法通过计算中转)

image-20240505213022377

image-20240505213357626
上式中,XWK和(XWK)^T之间存在耦合,有先后依赖关系。通过矩阵计算分解,对关系式解耦,避免了中间结果KT的存储写入过程。 (计算展开优化)
因此,避免将中间结果写入ReRAM交叉条的可能方法如下:
在进程开始时,我们分别用WQ和WkT(而不是WK))初始化两个ReRAM交叉条。

(1)在存储WQ的ReRAM横杆上计算Q =X·WQ。同时,我们用XT初始化另一个ReRAM交叉条。

(2)在存储WkT的ReRAM横杆上计算R = Q·WkT。

(3)在存储XT的ReRAM交叉条上执行Out = R·X T。

整个过程如图6(b)所示。解决了由中间结果KT引起的CWC依赖,消除了将KT写入ReRAM交叉条的长延迟。

(ps:利用计算代替写入,将过程中的计算结果直接带入下一步的crossbar中继续计算,不存在等待写入过程。主要原因在于各个计算间的W(WQ,WkT)和XT不存在依赖关系,可以各自提前写入到crossbar中。)

对于Res = S.V,S( = softmax(out) )和V之间的MatMul计算过程可以用类似的方式进行优化。但是,如果需要同时执行Wk和Wv的计算线程,则必须分别保留XT(Wk使用)和X(Wv使用)的副本。为了避免对ReRAM交叉条进行写访问的巨大开销,我们建议只使用X的一个副本按顺序执行Out = Q·X T和P = S·X。在这里,必须实现ReRAM crossbar[18]的双访问设计,以支持X和XT在同一交叉棒上的乘法。另外,P = S·X的计算要等到Out = Q·XT的计算完成后才能进行。

2、算术运算?

Q:缩放点积注意力中的其他运算,如scale和softmax,需要除法和指数计算,而现有的基于ReRAM的PIM设计不支持这些。

除法( /sqrt(dk) )和指数运算( e^x)

A:基于reram的混合Softmax

softmax运算,基于reram的混合Softmax,首先,论文调整了softmax表达式,以避免softmax计算的溢出问题,并避免使用除法运算,因为其会导致昂贵的数字电路实现和非常高的设计复杂性。特别是,我们在指数阶跃中使用负对数代替除法运算。每个元素XI (𝑖 = 0, …, 𝑑𝑘 − 1)减去该向量中最大的元素,即𝑥𝑚𝑎𝑥 := 𝑚𝑎𝑥(𝑥0, …, 𝑥𝑑𝑘−1)。通过以上设计,新的softmax计算为:
image-20240505212919094

1、使用查找表实现exp和log函数

2、通过引入内存逻辑以最小功耗来搜索出Xmax参数,特别的实现了基于ReRAM的比较和选择逻辑。

image-20240505215246020

Scale 运算:

image-20240505232430489

指的是Eq.(2)中尺度因子1/sqrt(DK)缩放后的点积注意力。[28]中常见的设置为DK是64。(1/sqrt(64)=1/8=左移3位,大端序,高地址存低位)因此,相应的缩放操作是通过使用3位左移来实现的,因此结果被存储到ReRAM crossbar中以供进一步处理。当DK的平方根不是2的幂时,我们可以将位移位与常数乘法(将常数值存储在ReRAM交叉栏数组中,并将常数与相关矩阵相乘)结合起来构造缩放操作

(通过移位和常数乘法构造除法)

3、低crossbar利用率?

Q:当Transformer在基于ReRAM的PIM设计上运行时,层粒度的DNN模型的传统流水线将导致ReRAM交叉条的低利用率。

A:Sub-Matrix Pipeline (子矩阵计算流水线)

为什么传统的层粒度会导致处理子阵列的利用率较低?如果流水线阶段安排在层粒度上,层内的计算细节就无法得到有效处理。对于这个MatMul层,准备了两个计算资源(用WKT和XT表示)。首先将输入矩阵Q馈入资源WkT以计算R(步骤1),然后将R馈入资源XT以计算Out(步骤2)。只有在步骤1和2完成后,才会释放WkT和XT。但是,XT在步骤1期间是空闲的,WkT在步骤2期间是空闲的,这导致对这两个资源(即存储WKT和XT的处理子数组)的低效利用。

为了抑制处理子阵列的空闲时间并使它们保持繁忙状态以获得更好的系统吞吐量和更高的功率效率,我们建议将缩放点积注意力内的MatMul操作的输入矩阵切片为小段向量,以获得更细的管道粒度。

(不改变器件设计(不增加多余的crossbar存储),而是改变数据流的长度,每次只计算整个数据的一部分,让数据流动起来)

Snipaste_2024-05-05_22-08-23

(ps:剩余资源可以不用或用于其他设计,而不是等待下次输入。)

下图显示了这个子矩阵管道,它最小化了处理子数组的空闲时间。

image-20240505221154993

流水线设计本质上就是减少一个Cycle周期的计算量,无论是对计算操作拆分,还是对数据流拆分,实际效果都是类似的。

实验结果

image-20240505231753649

image-20240505231809173
性能提升1.32,1.16倍
image-20240505231823632
功耗降低32.45%
image-20240505231835391
image-20240505231901929

QA

Q:规模化点积注意机制(缩放点积注意力)?

A:“规模化点积注意机制”(Scaled Dot-Product Attention Mechanism)是深度学习中的一种注意力机制,通常用于序列到序列(Seq2Seq)模型中。这种机制允许模型在处理序列数据时动态地聚焦于输入序列的不同部分。它在自然语言处理(NLP)任务中尤为重要,比如机器翻译、文本摘要、问答系统等。规模化点积注意机制的关键步骤包括:

  1. 计算键(Key)和查询(Query)的点积:首先,模型会计算输入序列中每个元素的键和查询的点积。查询通常来自当前处理的位置,而键则来自序列中的所有位置。
  2. 应用缩放因子:由于点积可能会非常大,特别是在长序列中,因此会通过除以一个缩放因子(通常是键向量的维度的平方根)来减少数值的稳定性问题。
  3. 应用softmax函数:缩放后的点积会通过softmax函数进行归一化,得到每个位置的注意力权重,这些权重表示模型应该在序列的哪个部分聚焦。
  4. 计算加权和:最后,每个位置的值(Value)会根据计算出的注意力权重进行加权求和,得到最终的输出。

这种注意力机制的"规模化"(Scaled)部分指的是通过除以缩放因子来调整点积的大小,以避免数值问题,同时保持模型的表达能力。

下面是一个简化的数学表达:

image-20240505232934074

其中 Q是查询,K是键,V 是值,dk是键的维度,softmax 函数将点积的输出转换为概率分布。

Q:PIM架构?

A:PIM(Processing-In-Memory,存内计算)架构是一种新兴的计算架构,它旨在解决传统冯·诺依曼架构中的数据访问瓶颈问题。在传统的计算系统中,数据需要在处理器和内存之间频繁移动,这限制了计算速度并增加了能耗。PIM通过将计算任务直接在存储器内部执行来减少数据移动,从而提高性能和能效。

Q:CWC依赖关系?

A:计算-写-计算

image-20240505233546260

transformer计算过程需要存储中间结果K^T,即存在计算-存储-计算的长延迟链,在本文中,将计算矩阵分解,通过合理合并计算项,避免了长延迟链。(计算展开,合并,解耦)

image-20240505233802432

Q:ReRAM crossbar数据暂存?buffer子阵列用来干什么?

A:计算过程似乎还是使用crossbar进行数据暂存,并没有借助sram,dram等外部存储资源,buffer子阵列或许只是crossbar阵列中的某个分区。

待补充…

举例:PRIME是一种新型的ReRAM-based主存储器架构,它通过灵活地将ReRAM crossbar分为不同的功能区域来提高神经网络计算的性能。在PRIME架构中,crossbar被设计为三个不同的bank区域:memory (Mem) subarrays、full function (FF) subarrays和Buffer subarrays。其中,Mem subarrays专门用于数据存储,而FF subarrays既可以进行数据存储也可以执行计算。Buffer subarrays作为FF subarrays的数据缓存,在不作为数据缓存使用时,它们可以被用作常规的memory。

Q:ReRAM crossbar[18]的双访问设计?

A:大概是将crossbar设计成可以同时访问xT和x两种格式的数据,可以通过改变输入数据的方向间接实现

待补充…

Q:为什么与编码器块相比,解码器块有一个额外的编码器-解码器自注意模块,该模块有一个输入与编码器堆栈的输出相连?

A:在Transformer架构中,解码器包含一个额外的编码器-解码器注意力机制模块,也称为“自注意力”模块。这个模块允许解码器直接从编码器的输出中获取信息,而不是像在标准的注意力机制中那样只能从先前的解码器层获取信息。以下是包含这个额外模块的主要原因:

  1. 上下文融合:编码器-解码器注意力机制使解码器能够考虑到整个输入序列的上下文信息,这在生成输出序列时非常重要。

  2. 长距离依赖:在自然语言处理(NLP)任务中,如机器翻译,解码器需要能够捕捉输入序列中词与词之间的长距离依赖关系。这个额外的注意力机制有助于解码器保持对输入序列的全局感知。

  3. 并行处理:Transformer模型的一个关键优势是其能够并行处理输入序列中的所有元素。通过在解码器中包含编码器的输出,可以保持这种并行性,而不需要解码器逐步等待前一个状态的计算。

  4. 条件生成:在生成输出词时,解码器不仅要考虑之前生成的词(通过解码器内部的隐藏状态),还要考虑整个输入序列所提供的条件信息。

  5. 遮蔽(Masking):在解码器的自注意力机制中使用遮蔽技术,以确保解码器在预测下一个词时不会直接看到未来的词。然而,编码器-解码器注意力机制不需要这种遮蔽,因为解码器需要看到整个输入序列来生成正确的输出。

  6. 效率:通过在解码器中直接使用编码器的输出,可以减少解码器层的数量,从而提高模型的效率。

课程QA

在基于ReRAM的Transformer加速器设计中,为什么ReRAM的非易失特性对于边缘计算是有益的?

1.数据保持:由于ReRAM是非易失的,它能够在断电后保持存储的数据,这对于边缘设备来说是一个重要特性,因为这些设备可能没有稳定的电源供应。

2.节能:非易失的存储器允许系统在不需要持续供电的情况下保持数据,这意味着边缘设备可以在不运行时关闭电源,从而节省能源。

3.快速启动:边缘设备通常需要快速响应,ReRAM的非易失的意味着设备可以在断电后快速恢复到先前的状态,无需从零开始重新加载所有数据。

4.可靠性:在边缘计算中,设备可能会暴露于恶劣的物理环境中,ReRAM的非易失的提供了更好的数据保护,即使在电源波动或意外断电的情况下也能保护数据不受损失。

5.维护减少:由于ReRAM不需要持续电源来保持数据,这减少了对系统维护的需求,使得边缘设备更加稳定和可靠。

6.成本效益:边缘设备通常成本敏感,ReRAM的这些特性有助于减少整体系统的能耗和维护成本,从而使得部署更加经济。

7.简化设计:非易失的存储器的使用简化了边缘设备的设计,因为它减少了对复杂电源管理系统的需求。

因此,ReRAM的非易失特性使其成为边缘计算应用的理想选择,特别是在需要低功耗、高可靠性和快速响应的应用场景中。

使用ReRAM实现Transformer模型相比传统存储器有什么优势?

并行性:ReRAM的crossbar架构天然支持高度的并行性,这对于Transformer模型中的并行计算操作非常有利。

低功耗:ReRAM的存内计算特性可以在执行复杂的Transformer操作时减少动态功耗(避免了电容充放电功耗)。

快速响应:ReRAM的读写速度比传统存储器快,这有助于加速Transformer模型的推理过程。

硬件兼容性:ReRAM可以与CMOS工艺兼容,便于集成到现有的芯片设计中,实现高效的Transformer模型硬件加速。

可重构性:ReRAM的电阻状态可调,允许模型权重的在线更新和学习,这对于需要持续学习的应用场景很有帮助。

在未来,您认为Transformer模型能否应用于边缘端场景,或者说它在边缘端的应用前景是什么?

我认为可以,采用新器件+新架构设计,我们可以在边缘端实现transformer模型的推理,核心在于降低工作负载,提高计算能效。具体来说,通过模型压缩技术,如权重剪枝、量化和知识蒸馏,可以减少Transformer模型的大小,使其更适合资源受限的边缘设备。其次,随着ReRAM和其他高能效存储技术的发展,设计更小型、更节能的Transformer加速器成为可能,适合边缘端设备的部署。

应用前景:Transformer模型的灵活性和强大的表示能力使其能够适应各种边缘端应用,如自然语言处理、图像识别和传感器数据处理。此外,边缘设备上的Transformer模型可以在没有网络连接的情况下工作,提供离线功能。

「Ref:Yang X, Yan B, Li H, et al. ReTransformer: ReRAM-based processing-in-memory architecture for transformer acceleration[C]//Proceedings of the 39th International Conference on Computer-Aided Design. 2020: 1-9.」

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看不见的罗辑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值