一种硬件加速器、硬件加速方法和电子设备与流程

1.本发明涉及机器学习领域,尤其是涉及一种硬件加速器、硬件加速方法和电子设备。
背景技术:
2.相比传统cnn(convolutional neural networks,卷积神经网络)、rnn(recurrent neural network, 递归神经网络)方法,基于注意力机制的transformer(变形器或变换器)网络模型在nlp(natural language process,自然语言处理)、图像识别、目标检测、目标跟踪等领域显示出优越的性能,应用非常广泛。当前存在多种类型的transformer网络模型,但其基本组成结构类似,都采用编码器-解码器结构,且编码器-解码器结构一般采用堆叠的多头注意力机制加全连接层,一侧是编码器结构,另一侧是解码器结构。
3.随着transformer网络模型的演进,其参数量越来越大,计算复杂度变得越来越高,因此针对该模型特性在异构计算平台如fpga(field programmable gate array,现场可编程门阵列)、专用芯片架构设计进行有效的计算加速是本领域亟待解决的问题。
技术实现要素:
4.有鉴于此,本发明提供了一种硬件加速器、硬件加速方法和电子设备,以解决fpga、专用芯片架构随着运算量增大而处理缓慢、效率低的问题。具体地,公开如下技术方案:第一方面,本发明实施例提供了一种硬件加速器,所述硬件加速器包括:特征输入输出单元、至少一个矩阵乘单元、概率计算单元和至少一个层归一化单元;其中,特征输入输出单元与至少一个矩阵乘单元相连接,用于向至少一个矩阵乘单元输入特征数据;至少一个矩阵乘单元中的每个矩阵乘单元,用于根据权重值对特征输入输出单元或上一单元输出的特征数据执行矩阵乘运算,并输出运算后的特征数据;概率计算单元与至少一个矩阵乘单元连接,用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至概率计算单元中的第一存储单元上,替换第一存储单元中的原值;至少一个层归一化单元,用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至层归一化单元的第二存储单元上,替换第二存储单元中的原值,以及将运算结果作为新的特征数据,传输至特征输入输出单元。
5.可选的,所述概率计算单元为softmax单元,所述层归一化单元为ln单元。
6.结合第一方面,在一种可选的实施方式中,概率计算单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至概率计算单元中的第一存储单元上,替换第一存储单元中的原值,具体包括:对至少一个特征数据的特征矩阵执行行列运算,计算每行的最大值;计算特征矩
阵中每行的每个特征值与本行最大值的差值,并通过差值得到每行元素的指数值;计算所有指数值之和,利用指数值之和计算概率计算函数结果;将概率计算函数结果存储至第一存储单元上,替换原值。
7.结合第一方面,在另一种可选的实施方式中,概率计算单元接收的特征数据为m行n列的特征矩阵,概率计算单元具体还用于:计算m行n列特征矩阵中第i行的最大值,;为特征矩阵的元素,i为各元素的行索引,j为列索引;
8.计算特征矩阵每行的每个元素与本行的最大值之间的差值,;
9.根据差值查表,得到每行的每个元素的指数值,;
10.根据每行元素的指数值计算指数值之和,;
11.根据指数值之和计算每行的每个元素的softmax值,。
12.结合第一方面,在又一种可选的实施方式中,概率计算单元具体还用于:在查表得到每行的每个元素的指数值后,将指数值存回至第一存储单元,并替换原值。
13.结合第一方面,在又一种可选的实施方式中,接收的至少一个特征数据为m行n列的特征矩阵;每个层归一化单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至层归一化单元的第二存储单元上,替换第二存储单元中的原值,具体包括:计算m行中第i行元素的均值以及第i行元素的平方和,其中,,为特征矩阵的元素,i为各元素的行索引,j为列索引,平方和;
14.根据均值以及平方和,计算第i行元素的平方和的方差,该方差通过如下公式表示为:
[0015][0016]
根据方差查表得到标准差,所述标准差;
[0017]
根据标准差均值以及特征矩阵的元素,计算层归一化结果,层归一化结果;其中为矩阵各行中每个元素对应的权重值,为偏置。
[0018]
结合第一方面,在又一种可选的实施方式中,每个层归一化单元还用于,将层归一化结果存回至第二存储单元上,替换原值。
[0019]
结合第一方面,在又一种可选的实施方式中,至少一个矩阵乘单元中的每个矩阵乘单元具体用于根据接收的特征数据执行以下任一操作:矩阵乘操作;
矩阵乘和残差操作;矩阵乘和激活函数操作;矩阵乘、残差、激活函数操作。
[0020]
结合第一方面,在又一种可选的实施方式中,每个矩阵乘单元具体用于:当执行矩阵乘操作时,输出结果为:
[0021]
其中,a为一m行k列的特征矩阵,b为一k行n列的特征矩阵,i、j为特征矩阵a各元素的行索引和列索引,在矩阵乘操作时,对特征矩阵a和b分块,分块后,特征矩阵a为bm行bk列,特征矩阵b为bk行bn列,bi、bj为分块后特征矩阵a各块的行索引和列索引。
[0022]
结合第一方面,在又一种可选的实施方式中,每个矩阵乘单元具体用于:当执行矩阵乘和残差操作时,输出结果为:
[0023]
其中,为输出结果,为残差矩阵。
[0024]
结合第一方面,在又一种可选的实施方式中,每个矩阵乘单元具体用于:当执行矩阵乘和激活函数操作时,输出结果为:,或
[0025]
其中,为输出结果,relu和gelu为激活函数。
[0026]
结合第一方面,在又一种可选的实施方式中,每个矩阵乘单元具体用于:当执行矩阵乘、残差、激活函数操作时,输出结果为:,或
[0027]
其中,为输出结果,relu和gelu为激活函数。
[0028]
结合第一方面,在又一种可选的实施方式中,至少一个矩阵乘单元的数量为5个,至少一个层归一化单元的数量为两个;其中,第一矩阵乘单元的输入端与特征输入输出单元连接,第一矩阵乘单元的输出端与概率计算单元连接;概率计算单元的输出端与第二矩阵乘单元连接,第二矩阵乘单元还与第三矩阵乘单元连接;第三矩阵乘单元还与第一层归一化单元连接;第一层归一化单元分别与第四矩阵乘单元、第五矩阵乘单元相连接;第四矩阵乘单元与第五矩阵乘单元相连接,第五矩阵乘单元的输出端与第二层归一化单元的输入端连接;第二层归一化单元的输出端与特征输入输出单元相连接。
[0029]
结合第一方面,在又一种可选的实施方式中,硬件加速器中还包括权重分发单元;权重分发单元与每个矩阵乘单元相连接,用于向每个矩阵乘单元分发权重值,权重值用于矩阵乘计算。
[0030]
结合第一方面,在又一种可选的实施方式中,所述权重分发单元具体用于将第一
权重值wq和第二权重值wk合并成第三权重值w
qk
,以及将第三权重值w
qk
给发送所述第一矩阵乘单元;所述第一矩阵乘单元具体用于利用第三权重值w
qk
对特征输入输出单元输出的特征数据x执行矩阵乘操作。
[0031]
结合第一方面,在又一种可选的实施方式中,第二矩阵乘单元具体用于,利用第四权重值wv对特征输入输出单元输出的特征数据x执行矩阵乘操作,得到第一运算结果;计算概率计算单元输出的特征数据s与运算结果的乘积,得到第二运算结果;将第二运算结果发送至第三矩阵乘单元。
[0032]
结合第一方面,在又一种可选的实施方式中,第五矩阵乘单元具体用于:接收来自第一层归一化单元输出的第一层归一化结果,和来自第四矩阵乘单元的特征数据;根据特征数据和本地的权重值进行矩阵乘运算,得到第三运算结果;对第三运算结果与第一层归一化结果做加法运算,得到第四运算结果;将第四运算结果发送至第二层归一化单元。
[0033]
结合第一方面,在又一种可选的实施方式中,所述第一层归一化单元还与所述特征输入输出单元连接,用于接收所述第三矩阵乘单元发送的特征数据,对所述特征数据执行处理,得到第一层归一化结果,以及将所述第一层归一化结果作为新的特征数据发送至所述特征输入输出单元。
[0034]
结合第一方面,在又一种可选的实施方式中,硬件加速器的每个矩阵乘单元、概率计算单元和每个层归一化单元中,具体包括:控制单元、计算单元、邻居缓存单元、跳跃缓存单元、缓存保留单元和权重缓存单元;其中,控制单元,用于控制邻居缓存单元、跳跃缓存单元和缓存保留单元;邻居缓存单元,用于接收并缓存上一单元发送的特征数据,以及将特征数据发送至计算单元;跳跃缓存单元,用于接收来自间隔一跳或一跳以上单元发送的特征数据,以及将特征数据发送至计算单元;缓存保留单元,用于缓存接收的至少一个特征数据;权重缓存单元,用于接收并缓存至少一个权重值;计算单元,用于根据至少一个权重值和至少一个缓存单元的缓存的特征数据或权重值执行特征数据计算,以及通过控制单元将计算结果输出给下一单元。
[0035]
第二方面,本发明实施例还提供了一种硬件加速方法,所述方法应用于前述第一方面或第一方面任一实施方式所述的硬件加速器,所述方法包括:特征输入输出单元向至少一个矩阵乘单元发送特征数据;每个矩阵乘单元接收特征输入输出单元或上一单元输出的特征数据,对特征数据执行矩阵乘运算,并输出运算后的特征数据给概率计算单元和至少一个层归一化单元;概率计算单元接收至少一个矩阵乘单元发送的至少一个特征数据,并至少一个特征数据的执行行列运算,并将运算结果写回至概率计算单元中的第一存储单元上,替换第一存储单元中的原值;每个层归一化单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至层归一化单元的第二存储单元上,替换第二存储单元中的原值,以及将运算结果作为新的特征数据,传输至输入输出单元;
特征输入输出单元接收来自所述至少一个层归一化单元发送的特征数据。
[0036]
第三方面,本发明实施例还提供一种电子设备,包括处理器和现场可编程门阵列fpga,所述处理器与所述fpga相连接,所述fpga中包括第一方面或第一方面任一项所述的硬件加速器;其中,处理器用于生成并向所述fpga传输至少一个特征数据;fpga用于接收来自所述处理器的至少一个特征数据,对所述至少一个特征数据进行处理,并将处理后的至少一个特征数据对外输出。
[0037]
另外,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第二方面所述硬件加速方法。
[0038]
本发明设计的一种硬件加速器和硬件加速方法中,将算子进行合并融合,归纳为3类计算部件,分别是矩阵乘单元、概率计算单元和层归一化单元,其中将残差和激活操作集成到矩阵乘单元部件,从而减少矩阵数量、简化控制流,提高运算效率。
[0039]
另外,在概率计算单元和层归一化单元部件中,还设计采用多次数据输出和结果写回的方式,将运算结果回写至存储单元上,由于数量与原矩阵相同,且原输入值已不再使用,进而可以将这些结果写回原ram中进行数据替换,避免使用额外缓存来进行存储,这样整个层归一化单元、概率计算单元的运算就可基于一块ram展开,实现了数据的流水线计算和最大化利用,减少数据访存次数,并且实现数据并行计算,减少计算延迟,结合存储单元使用实现了缓存的重利用。
附图说明
[0040]
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0041]
图1是本发明实施例提供的一种硬件加速器的结构示意图;图2是本发明实施例提供的一种硬件加速器内部运算的示意图;图3是本发明实施例提供的一种硬件加速器的拓扑结构图;图4是本发明实施例提供的一种概率计算单元内部硬件处理的结构示意图;图5是本发明实施例提供的一种比较电路的流程示意图;图6是本发明实施例提供的一种层归一化单元内部硬件处理的结构示意图;图7是本发明实施例提供的一种矩阵乘单元内部硬件处理的结构示意图;图8是本发明实施例提供的一行4列逐行乘积矩阵乘的示意图;图9是本发明实施例提供的4行4列逐行乘积矩阵乘示意图;图10是本发明实施例提供的一种并行度为4列内存数据存储格式示意图;图11是本发明实施例提供的另一种硬件加速器内部运算的示意图;图12是本发明实施例提供的一种多路并行处理的流程示意图;图13是本发明实施例提供的一种单元的内部结构图;图14是本发明实施例提供的一种包含硬件加速器的电子设备的结构示意图;图15是本发明实施例提供的另一种电子设备的结构示意图。
具体实施方式
[0042]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043]
变换器(transformer)网络是一个用于解决自然语言处理问题的神经网络模型,其模型架构主要包括一个编码器堆栈(encoder)和一个解码器堆栈(decoder),且编码器堆栈和解码器堆栈又各自包含多个编码器层和多个解码器层。transformer神经网络计算过程中,输入序列首先经过词向量嵌入层处理及位置编码叠加处理后,得到输入矩阵,该输入矩阵输至编码器堆栈中,依次经历多个编码器层的运算,得到编码器堆栈的输出矩阵。编码阶段结束后就是解码阶段,解码阶段中每一步会输出目标句子的一个元素,实现自然语言的处理。
[0044]
与当前cnn模型相比,transformer硬件加速器可以建模图像的全局依赖关系,并能够更加充分的利用上下文信息,随着网络模型的演进,其参数量越来越大,计算复杂度越来越高,因此对该模型特性在异构计算平台如fpga、专用芯片架构设计进行有效的计算加速是本领域亟待解决的问题。
[0045]
参见图1,为本发明实施例提供的一种硬件加速器,该硬件加速器具体包括:特征输入单元(inputs embedding)、多头注意力(multi-head attention,mha)层、第一加法归一模块、ffn(feedforward neural network,前馈神经网络)简称“前馈层”、第二加法归一模块和特征输出单元。
[0046]
其中,特征输入单元用于接收外部输入的第一特征数据,并将第一特征数据传输至多头注意力mha层。第一特征数据可以是一个或多个,且第一特征数据由特征输入单元传输给mha层。
[0047]
多头注意力mha层用于接收和处理第一特征数据,并将处理后的数据传输至第一归一化层,其中,mha层处理特征数据的过程包括对特征数据依次经过:矩阵乘、规模化、归一化指数函数处理后输出。
[0048]
另外,所述规模化运算包括scale函数处理,所述归一化指数函数包括softmax函数和其他函数,本实施例对此不做限制。
[0049]
第一归一化层用于接收多头注意力层处理过的数据,并将数据依次经过第一归一化层、前馈层ffn和第二归一化层处理,输出第二特征数据。第二归一化层用于将第二特征数据传输至下一层神经网络。
[0050]
在该加速器模型中包含多个encoder和decoder,二者结构类似,主要包括:mha层和ffn层,在ffn层之后包括一个残差、层归一化操作。如图1所示,第一归一化层包括:第一加法器(add1)和第一ln模块,第一归一化层简称为add 1&ln1,类似的,第二归一化层中包括第二加法器(add2)和第二ln模块,因此简称为add 2&ln2。
[0051]
可选的,在一些实施例中,所述mha层中包括至少一路由以下模块组成的运算结构;至少两个矩阵乘模块,每个所述矩阵乘模块用于对输入的特征数据执行矩阵乘运算,并输出给下一模块;softmax模块,用于接收上一模块发送的特征数据,并对所述特征数
据执行softmax函数运算,输出至下一模块。
[0052]
其中,所述softmax模块的输入和输出分别连接有矩阵乘单元,每个所述矩阵乘单元预先被配置权重值,所述权重值用于执行所述矩阵乘运算。softmax模块和归一化层模块均是神经网络计算电路的非线性函数运算单元。
[0053]
如图1所示,mha层接收来自特征输入单元输入的三路线性(linear)特征参数,经过三路线性处理后,输出参数分别为q、k、v。作为matmul()函数的输入,比如matmul函数1,依次再经过规模scale函数、softmax层和matmul函数2处理后输出。进一步地,参数q和k输入至matmul函数1,将参数v输入至matmul函数2,最后再经过matmul函数2输出至第一归一化层(add 1&ln1)。
[0054]
其中,第一加法器add 1用于对所述特征输入单元输出的特征数据和经过mha层输出的数据做加法运算,输出至所述第一ln模块;第二加法器add 2用于对所述第一ln模块输出的数据和所述前馈层输出的数据做加法运算,并输出至所述第二ln模块。
[0055]
另外,所述多头注意力层中包括n路运算结构,n≥2,且为正整数;所述n路运算结构用于并行执行n路数据加载运算、矩阵乘运算和读取数据。
[0056]
具体数据处理过程参见图2,加载参数包括:x0、w
qk
、wv、ws,其中、w为权重值,x0是第一次输入的参数。在hma层的运算包括:xw
qk
、xwv、xw
qk
x
t
、softmax、att.v、oaws等,输出并保存的结果包括:xw
qk
、v、att.、oa、os。然后将结果输入至第一归一化层,执行第一次add&ln处理,输出o
l
,再传输至下一层ffn,ffn层包括两个fc(feedback,反馈),分别是fc1和fc2,将上一层计算的特征参数:w
ffn1
和w
ffn2
,输入至fc1和fc2,其中w
ffn1
经过o
lwffn1
输出o
f1
,再将改o
f1
传输至fc2,执行o
f1wffn2
的运算,输出o
f2
。
[0057]
最后再将输出参数o
f2
传输至第二归一化层add&ln,经过加载数据w
qk
,并运算w
qk
后输出x1,x1为经过一次加速之后输出的参数,将该x1传输至下一层。
[0058]
上述硬件加速器在计算过程中,计算单元种类和数量较多,且需要多次加载缓存数据,比如在做softmax函数计算和层归一化ln计算过程中,每次需要将运算生成的特征数据进行存储,需要使用额外缓存,且需要多次数据存储访问,增加计算延迟,运算效率较低。
[0059]
为了解决该技术问题,本发明实施例提供了一种硬件加速器。
[0060]
如图3所示,所述硬件加速器包括:特征输入输出单元、至少一个矩阵乘单元、概率计算单元和至少一个层归一化单元。此外,该硬件加速器中还可以包括其他单元或模块,本实施例对此不做限制。
[0061]
其中,特征输入输出单元与至少一个矩阵乘单元相连接,用于向至少一个矩阵乘单元输入特征数据。
[0062]
所述至少一个矩阵乘单元中的每个矩阵乘单元,用于根据权重值对特征输入输出单元或上一单元输出的特征数据执行矩阵乘运算,并输出运算后的特征数据。
[0063]
所述概率计算单元与所述至少一个矩阵乘单元连接,用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换第一存储单元中的原值。
[0064]
所述至少一个层归一化单元(layernorm,ln),用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至层归一化单元的第二存储单元上,替换所述第二存储单元中的原值,以及将所述运算结果作为新的特征数据,传输至所述特征输入输出单元。
[0065]
在图3所示的本实施例中,至少一个矩阵乘单元的数量为5个,至少一个层归一化单元的数量为两个。此外,还可以包括更多或更少的矩阵乘单元和层归一化单元,本实施例对此不做限制。
[0066]
其中,第一矩阵乘单元1的输入端与特征输入输出单元连接,第一矩阵乘单元1的输出端与概率计算单元2连接。
[0067]
概率计算单元2的输出端与第二矩阵乘单元3连接,第二矩阵乘单元3还与第三矩阵乘单元4连接;第三矩阵乘单元4还与第一层归一化单元5连接;第一层归一化单元5分别与第四矩阵乘单元6、第五矩阵乘单元7相连接。
[0068]
第四矩阵乘单元6与第五矩阵乘单元7相连接,第五矩阵乘单元7的输出端与第二层归一化单元8的输入端连接;第二层归一化单元8的输出端与特征输入输出单元相连接。
[0069]
如图2所示,特征输入输出单元首次输出的特征数据为x,第一层归一化单元5经过运算后输出给特征输入输出单元的特征数据为x1。
[0070]
接下来对上述概率计算单元、层归一化单元和矩阵乘单元的具体计算过程进行详细说明。
[0071]
首先,介绍概率计算单元内部每一步计算过程以及硬件实现过程。
[0072]
其中,上述概率计算单元可以是softmax单元,该softmax单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换所述第一存储单元中的原值,如图4所示,具体地,假设输入矩阵为m行n列,为输入的矩阵元素(或者称为特征元素),i为各元素的行索引,j为列索引,则执行以下计算步骤:对至少一个特征数据的特征矩阵执行行列运算,计算每行的最大值;计算特征矩阵中每行的每个特征值与本行最大值的差值,并通过所述差值得到每行元素的指数值;计算所有所述指数值之和,利用所述指数值之和计算概率计算函数结果;将所述概率计算函数结果存储至所述第一存储单元上,替换所述原值。
[0073]
更进一步地,所述概率计算单元(softmax单元)接收的特征数据为m行n列的特征矩阵,所述概率计算单元具体还用于:步骤1:第一次数据输出后,计算所述m行n列特征矩阵中第i行的最大值,;为特征矩阵的元素,i为各元素的行索引,j为列索引;
[0074]
步骤2:第二次数据输出后,计算所述特征矩阵每行的每个元素与本行的最大值之间的差值,公式表示为;
[0075]
步骤3:根据所述差值查表,得到每行的每个元素的指数值,;
[0076]
其中,所述差值查找表(lut就是查找表)可预先设置获得。此时,将每个元素的指数值,或称为第一次结果存回至第一存储单元,如ram,执行一次原值替换操作。
[0077]
步骤4:根据每行元素的指数值计算指数值之和,公式表示为;
[0078]
步骤5:根据指数值之和计算每行的每个元素的softmax值,
。
[0079]
此外,所述概率计算(softmax)单元具体还用于将每个元素的softmax值存回至第一存储单元ram,执行第二次结果存回和替换原值的操作。
[0080]
本实施例中,softmax单元部件的设计采用三次数据输出和两次结果写回并替换的操作,使用如图4所示的三阶段计算方法,多次读取避免了了流水线电路的资源消耗,实现了轻量化设计,同时搭配寄存器使用和多次结果写回实现了缓存的重利用,其中:上述步骤1中的最大值,计算使用如图5所示的比较电路获得,结果只需保留每行元素的最大值,可以使用寄存器保存,不占用ram。上述步骤2中执行减法运算后经查表得到各元素的指数值,再将所有指数值求和。在步骤3中逐指数值与和进行除法。
[0081]
其中,在步骤2中每行的和只有一个值,可以使用寄存器保存,各元素的指数值这些中间结果,由于数量与原矩阵相同,且原输入值已不再使用,进而可以将这些中间结果写回原ram中进行数据替换,从而避免使用额外缓存来进行存储,使得整个softmax单元的计算可基于一块ram展开,相比于现有硬件加速器的softmax单元,本方案节约存储空间,实现了数据的流水线计算和最大化利用,减少数据访存次数。
[0082]
其次,介绍层归一化单元内部每一步计算过程以及硬件实现过程。
[0083]
每个层归一化单元(ln单元)对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述层归一化单元的第二存储单元上,替换第二存储单元中的原值,具体包括:假设接收的至少一个特征数据,即输入矩阵为m行n列的特征矩阵,i为各元素的行索引,j为列索引,则每个层归一化单元(ln单元)执行以下方法步骤,如图6所示:步骤6:第一次数据输出后,计算m行中第i行元素的均值以及第i行元素的平方和,其中,,为特征矩阵的元素,所述平方和;
[0084]
步骤7:根据所述均值以及所述平方和,第二次数据输出后,计算第i行元素的平方和的方差,所述方差;
[0085]
步骤8:根据所述方差查表得到标准差,所述标准差;
[0086]
步骤9:根据所述标准差所述均值以及特征矩阵的元素,计算层归一化结果,所述层归一化结果。
[0087]
其中,为矩阵各行中每个元素对应的权重值,为偏置。
[0088]
此外,每个层归一化单元还用于:将层归一化结果存回至第二存储单元上,并替换所述原值。
[0089]
本实施例中,层归一化单元(ln单元)的部件设计采用两次数据输出和一次结果写回并替换原值的操作,使用如步骤6~步骤9的两阶段计算方法,实现了数据的流水线计算和
最大化利用,减少数据访存次数,实现并行计算,减少计算延迟,且搭配寄存器使用实现了缓存的重利用。
[0090]
其中,上述步骤6中的均值和标准差计算,结果每行只有一个值,可以使用寄存器保存该值,相比于现有ln单元存储多个值来说,本方案不占用ram、节约了空间。
[0091]
上述步骤7中每行逐个元素的ln计算结果,由于数量与原矩阵相同,且原输入值已不再使用,进而可以将这些结果写回原ram中进行数据替换,避免使用额外缓存来进行存储,这样整个层归一化单元的计算就可基于一块ram展开,进一步地节约了存储资源。
[0092]
下面对上述硬件加速器的每个矩阵乘单元的内部处理过程进行说明和介绍。
[0093]
在图3所示的至少一个矩阵乘单元中,每个矩阵乘单元具体用于根据接收的特征数据执行以下任一操作:(1)矩阵乘操作;(2)矩阵乘和残差操作;(3)矩阵乘和激活函数操作;(4)矩阵乘、残差、激活函数操作。
[0094]
具体地,由于transformer网络中存在各种规模大小的矩阵,矩阵乘单元部件基于分块矩阵计算方式,对各种不同大小的矩阵均可进行适配。为统一数据存储格式,使用逐行(列)乘积的方式,数据统一使用按行(列)分块存储方式,避免了矩阵内积计算方式中左、右矩阵需分别以行优先和列优先两种格式存储及其在一系列矩阵计算、存取过程中矩阵转置操作的考虑,简化了系统中数据组织、数据处理及相关的硬件设计。在数据加载过程中,左矩阵依次加载数据块,右矩阵依次按照偏移地址读取对应的数据块即可,如图7所示。
[0095]
并且,针对transformer网络的特点,在矩阵乘单元部件中集成了残差和激活功能,通过选通部件控制使用或跳过残差或激活部件,来灵活适应网络中不同的计算步骤,实现上述矩阵乘、残差、激活函数操作中的一种或多种。
[0096]
具体地,如图7所示,每个所述矩阵乘单元具体用于:当执行所述矩阵乘操作时,输出结果为:
[0097]
其中,a为一m行k列的特征矩阵,b为一k行n列的特征矩阵,i、j为特征矩阵a各元素的行索引和列索引,在矩阵乘操作时,对特征矩阵a和b分块,分块后,特征矩阵a为bm行bk列,特征矩阵b为bk行bn列,bi、bj为分块后特征矩阵a各块的行索引和列索引。本实施例以4x4的块特征矩阵为例,bm=m/4,bk=k/4,bn=n/4。
[0098]
进一步地,每个所述矩阵乘单元具体用于:当transformer网络中某层只执行(2)矩阵乘和残差操作时,其输出结果为:
[0099]
其中,为输出结果,为残差矩阵。
[0100]
另一种实施方式是,当transformer网络中某层只执行(3)矩阵乘和激活函数操作时,根据激活函数的不同,其输出结果为:
,或;
[0101]
其中,为输出结果,relu和gelu为激活函数。
[0102]
又一种实施方式是,当transformer网络中某层执行(3)矩阵乘、残差、激活函数操作时,根据激活函数的不同,其输出结果为:作时,根据激活函数的不同,其输出结果为:或;
[0103]
其中,为输出结果,relu和gelu为激活函数。
[0104]
本实施例中,使用如图7所示的矩阵乘计算部件,部件中集成了残差和激活功能,通过选通部件控制使用或跳过该计算步骤,灵活适应不同计算部分。
[0105]
具体地,如图7所示,为一行矩阵乘单元内部的示意图,由矩阵a行1至n,与矩阵b的行1至行n做进行矩阵乘运算。n为正整数,且n≥1。比如一个矩阵的字节大小为8bit(比特),两个矩阵做乘法运算后大小变成16bit,然后再做加法运算,比特大小加1,变成17bit、18bit,然后再经过量化截取,归一化处理后大小还变成8bit,使其与输入参数18bit相一致,得到行1列1结果,同理地,其他行和列也执行相同操作,分别得到行1列2结果、行1列3结果、行1列4结果。
[0106]
参见图8为与图7一矩阵乘单元运算所对应的一行4列逐行乘积矩阵乘的示意图,由一行矩阵a与4列矩阵b做矩阵乘运算后,得到行1列1~4的运算结果。
[0107]
图9为并行度为4的逐行乘积数据加载的示意图,在数据加载过程中,左矩阵依次加载数据块,右矩阵依次按照偏移地址读取对应的数据块即可。
[0108]
应理解,上述运算模块的数量还可以增加,比如增加矩阵乘和其他运算模块,使算力增强,同时执行多路运算。例如图9为4行4列逐行乘积矩阵乘示意图,与图9相对应,图10为一种并行度为4列内存数据存储格式示意图。输入第一特征矩阵为4行的特征数据,第二特征矩阵为4列的特征数据,二者矩阵乘运算后,得到4行8列运算结果。比如,从第1行第1列至第1行第4列,类似的,以此类推,至第14行第8列,后续还包括更多行和更多列的计算结果,本实施例对此不一一举例。
[0109]
进一步地,基于统一存储格式和transformer模型中数据依赖关系,且由于参与计算的一矩阵为特征矩阵,另一矩阵为权重矩阵,其中,特征矩阵为动态计算生成,权重矩阵为静态已知。因此,为了进一步减少整个网络计算延迟,本实施例中,通过例化多个矩阵乘部件,部分流水线处理多个顺序进行的矩阵计算。
[0110]
其中,具体部件的数量可根据片上资源来确定;下一个矩阵乘部件启动时间根据各部件正在处理矩阵规模确定,在前一个部件处理得到一个或若干个结果块后启动;如图10所示为多部件流水线计算示意,显著改善系统延迟。
[0111]
另外,在本实施例提供的硬件加速器中,还包括权重分发单元;所述权重分发单元与每个矩阵乘单元相连接,用于向每个矩阵乘单元分发权重值,所述权重值用于矩阵乘计算。
[0112]
如图11所示,可实现多路并行运算,比如在第一阶段特征输入和mha层运算中包括加载输入特征数据包括x0、w
qk
、wv、ws,经过至少一个矩阵乘单元、softmax单元和ln单元执行第一次运算com.后:xw
qk
、xwv、xw
qk
x
t
、softmax函数、att.v、oaws等,得到第一次运算后的输出
结果为:xw
qk
、v、att.、oa、os。将第一次运算后的输出结果传输至下一层第一归一化层处理,得到输出o
l
,再经过ffn前馈层(fc1和fc2)处理后输出o
f1
和o
f2
。将传输至第二归一化层处理,执行xw
qk
、add&ln运算后输出x1。x1作为下一层的输入特征数据,按照下一层的逻辑执行相应的处理,并得到运算结果。
[0113]
与现有的流程相比较,本方法可同步执行多路运算,比如在获得输出特征参数x0、w
qk
、wv、ws后,可直接执行矩阵乘和softmax运算,不必等前面每一项流程走执行运算后再做运算,本实施例方法提高了运算效率。
[0114]
如图12所示,为mha层一路运算处理的流程示意图。在硬件加速器中可同时执行多路运算,图12中示出了包括n路(head)并行处理,其中每一路处理过程与前述图11所示的一路处理过程相同,都是依次经过矩阵乘xw
q1k1
、矩阵乘
·
x
t
、xw
v1
、softmax函数、矩阵乘运算s1·v1
一系列运算后输出。并且n路中每一路输出的矩阵乘结果都会传输至多路矩阵乘单元中执行多路concat运算,得到z
·
wo并执行残差和层归一化运算。
[0115]
上述运算使用的权重值w,均可由所述权重分发单元分配,比如上述权重值w
qk
、wv、w
t
等。具体地权重参数或权重值配置可参见根据片上资源实际情况来确定,本实施对此不做限制。
[0116]
在一些实施方式中,结合上述图3所示的硬件加速器拓扑结构图,所述第一矩阵乘单元1具体还用于将权重分发单元所分配的第一权重值wq和第二权重值wk合并成第三权重值w
qk
,利用该第三权重值w
qk
对所述特征输入输出单元输出的特征数据x执行矩阵乘操作,公式表示为:。
[0117]
第一矩阵乘单元1在执行矩阵乘运算时,权重分发单元提前将wq和wk合并成w
qk
再发给第一矩阵乘单元1计算,因为权重值是已知的,可提前由上位机进行预处理,从而减少第一矩阵乘单元1的计算量,提高计算效率。
[0118]
权重分发单元还用于向第二矩阵乘单元3发送第四权重值wv,所述第二矩阵乘单元3具体用于利用第四权重值wv对所述特征输入输出单元输出的特征数据x执行矩阵乘操作,得到第一运算结果;以及,计算所述softmax单元2输出的特征数据s与所述运算结果的乘积,得到第二运算结果;将该第二运算结果发送至第三矩阵乘单元4。
[0119]
第三矩阵乘单元4用于接收权重分发单元发送的第五权重值wo,利用所述第五权重值wo执行矩阵乘运算和加法运算,公式表示为,并将该运算结果传输给第一ln单元5。
[0120]
第一ln单元5还与所述特征输入输出单元连接,用于接收第三矩阵乘单元4发送的特征数据,对该特征数据执行处理,比如执行如图6所示执行过程,得到第一层归一化结果,以及将该第一层归一化结果作为新的特征数据发送至特征输入输出单元。
[0121]
第五矩阵乘单元7具体用于接收来自第一层归一化单元(第一ln单元)输出的第一层归一化结果,和来自所述第四矩阵乘单元6输出的特征数据(fc1);根据所述特征数据(fc1)和本地的权重值进行矩阵乘运算,得到第三运算结果(fc2);对第三运算结果与第一ln单元结果做加法运算,得到第四运算结果(fc2+x1);将第四运算结果(fc2+x1)发送至所述第二层归一化单元,即第二ln单元。
[0122]
需要说明的是,上述各矩阵乘单元、softmax单元和第一、第二ln单元执行的具体过程可参见前述实施例每个单元内部每一步计算过程以及硬件实现过程,本实施例此处不再赘述。
[0123]
另外,上述特征输入输出单元可由存储器和输入、输出控制器组成,用于完成特征数据的输入和输出控制,是特征数据出入计算系统的接口。每个矩阵乘单元、softmax单元和ln单元分别用于完成矩阵乘、softmax和ln计算功能。
[0124]
在本方案提供的硬件加速器中,每个矩阵乘单元、概率计算单元(softmax单元)和每个层归一化单元中,如图13所示,具体包括:控制单元1301、计算单元1302、邻居缓存单元1303、跳跃缓存单元1304、缓存保留单元1305和权重缓存单元1306。
[0125]
其中,控制单元1301用于控制邻居缓存单元1303、跳跃缓存单元1304和缓存保留单元1305。
[0126]
邻居缓存单元1303用于接收并缓存上一单元发送的特征数据,以及将特征数据发送至所述计算单元1302。
[0127]
跳跃缓存单元1304用于接收来自间隔一跳或一跳以上单元发送的特征数据,以及将所述特征数据发送至计算单元1302。
[0128]
缓存保留单元1305用于缓存接收的至少一个特征数据。
[0129]
权重缓存单元1306用于接收权重分配单元发送的至少一个权重值,并缓存这些权重值。
[0130]
计算单元1302用于根据至少一个缓存保留单元(如邻居缓存单元1303、跳跃缓存单元1304或权重缓存单元1306)所缓存的特征数据或权重值,执行特征数据计算,以及通过所述控制单元1301将计算结果输出给下一单元。
[0131]
所述下一单元包括矩阵乘单元、ln单元或softmax单元。
[0132]
进一步地,跳跃缓存单元1304用于存储从输入输出单元接收的数据和返回给输入输出单元的结果数据,邻居缓存单元1303用于存储从上游邻居接收的数据,缓存保留单元1305用于存储计算单元1302在前几轮中接收到的一些数据,权重缓存单元1306存储该节点计算使用的权重数据,控制单元1301用于管理缓存区,决定相应数据是否需要转发到下游的相邻处理单元,确定是否应保留在停留缓冲区以备将来使用,计算单元1302完成相关计算。
[0133]
在图3所示的拓扑结构为带弦环形拓扑。其中,环状上为各处理单元,特征数据依次流过各处理单元。权重数据由各节点独立加载,各节点的特征数据通过上游邻居节点或跳跃节点获取。上述任一单元可通过“节点”描述,比如节点2计算所需数据从其上游节点1获取,而节点3所需数据x则需要从输入输出单元获取,因为其上游的2节点没有数据x;节点4残差计算需要的数据x可从其上游节点3获取,因为节点3存储了数据x。节点5的计算结果为数据x1,考虑到decoder模块中有两个mha模块相连,第一个mha模块后面没有ffn运算,即不包括节点6、节点7和节点8,因此其计算结果应跳过后续步骤,节点5直接将运算结果得到的特征数据发送给特征输入输出单元;除了这种情况,通常encoder的第一mha模块和decoder的第二个mha模块后面就继续进行ffn模块的计算。节点7的残差操作需要使用数据x1,该数据x可从节点5获取,再结合节点6运算fc1后输出的数据;最终ffn层的计算结果即
节点8的输出数据x1,返回到特征输入输出单元作为下一层网络运算的特征输入数据。
[0134]
需要说明的是,上述节点2为前述实施例的softmax单元,节点5为第一ln单元,节点8为第二ln单元;节点1、节点3~4、节点7~8均为矩阵乘单元。
[0135]
本实施例提供的硬件加速器具有以下有益效果:(1)设计多头注意力mha层是多路head并行计算,每路head有不同的权重参数。在分别计算完s*v后,将结果进行concat。如果使用多个计算部件同时进行多路head并行计算,则可以缩短总体计算时间。避免每次只运算一路head,待一路head整体处理完成后,再处理下一路head,导致占用较多的计算部件。本方法提出将各head权重参数直接进行concat运算,从而将多路head合并成一路,大大简化系统处理架构、提高运算效率。
[0136]
(2)将x
·
wq、x
·
wk、q
·kt
三步操作简化为x
·
wq·wkt
·
x
t
。考虑模块的通用性,以decoder中第二级mha模块为例,decoder模块中第二级mha模块有两个x输入,其中query来自上一级decoder的输出,key和value来自encoder的输出;而其他mha层均为统一的输入x;本设计的硬件加速器将该运算过程改为,q · k
t
=x1·
wq· w
kt
· x
2t
。由于权重参数为离线已知数据,因此可提前计算得出w
qk
= wq· w
kt
,进而减少了运行时的参数量。
[0137]
(3)通过对计算过程中计算类型进行统计分析,由于残差操作与累积操作类似,将残差计算功能集成到矩阵计算部件,得出过程中仅需要使用三种部件,分别是:矩阵乘、softmax和layernorm,所以加快运算速度,实现高效进行transformer网络的计算。
[0138]
(4)使用基于矩阵分块和逐行乘积的矩阵乘部件结构,灵活适应transformer网络中各mha模块和ffn模块的各种规模大小的矩阵计算,且可以统一数据存储格式,避免计算过程中矩阵转置的开销,简化数据存储和加载流程。
[0139]
(5)基于transformer的计算流特征使用带弦环拓扑的流水线处理结构,环状结构可流式处理各步计算,减少总计算延迟,降低各节点存储开销;并且,弦连接可提供残差数据加载和节点跳过功能,灵活适配transformer的计算流和数据流。
[0140]
(6)实现与该拓扑结构适配的处理单元内部结构设计,如图13所示,包括控制单元、计算单元、邻居缓存单元、跳跃缓存单元、缓存保留单元和权重缓存单元等。
[0141]
(7)对softmax单元和ln单元计算顺序进行规划,使用多次数据加载和结果写回的方式,避免使用额外缓存,节约ram资源。
[0142]
在另一实施例中,根据前述实施例的硬件加速器,本实施例还提供一种硬件加速方法,所述方法包括:第一步,特征输入输出单元向至少一个矩阵乘单元发送特征数据。
[0143]
第二步,每个所述矩阵乘单元接收所述特征输入输出单元或上一单元输出的特征数据,对特征数据执行矩阵乘运算,并输出运算后的特征数据给概率计算单元和至少一个层归一化单元。
[0144]
第三步,所述概率计算单元接收所述至少一个矩阵乘单元发送的至少一个特征数据,并所述至少一个特征数据的执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换所述第一存储单元中的原值。
[0145]
第四步,每个所述层归一化单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述层归一化单元的第二存储单元上,替换所述第二存储单元中的原值,以及将所述运算结果作为新的特征数据,传输至所述输入输出单元。
[0146]
另外,该方法还包括:将新的特征数据传输至下一层神经网络,重复执行,直至计算完成时结束。
[0147]
进一步地,第二步中,每个矩阵乘单元具体执行:对来自上一单元的特征数据进行矩阵乘、残差、激活函数操作中的一种或多种运算后,将运算得到的结果输出至下一单元。
[0148]
其中,对特征数据进行矩阵乘、残差、激活函数,以及规模化、归一化指数函数处理可采用诸如matmul函数、scale函数、softmax函数实现。具体计算过程参见前述实施例的描述,本实施例此处不再赘述。
[0149]
一种具体的实施方式是,以第一矩阵乘单元为例,上述方法还包括:第一矩阵乘单元从权重分发单元获取第三权重值,所述第三权重值由第一权重值wq和第二权重值wk合并生成;
[0150]
第一矩阵乘单元从特征输入输出单元获取第一特征数据;第一矩阵乘模块根据第三权重值对所述第一特征数据x执行矩阵乘操作,并输出运算结果给下一个单元,比如概率计算单元。
[0151]
在另一具体的实施方式中,所述方法还包括:对所述特征输入输出单元输出的至少一个特征数据,比如x和经过至少一个矩阵乘单元和/或softmax单元处理后,输出的特征数据做加法运算,并将运算结果输出至第一ln单元。
[0152]
可选的,在硬件加速器执行n路运算过程中,n≥2且为正整数。如图12所示,n路(head)并行运算,每一路执行一次运算,最后将n路运算结果做concat运算后输出至层归一化模块。
[0153]
本实施例提供的加速方法,将多头注意力mha模块的多路head合并成一路,从而减少矩阵数量,降低调度开销,简化加速器设计。
[0154]
另外,通过分析整个计算过程,将算子进行合并融合,归约为3类计算部件:矩阵乘单元、softmax单元和ln单元,其中将残差和激活操作集成到矩阵乘部件,减少矩阵数量,包括head合并、wq和wk合并,简化控制流。
[0155]
使用基于矩阵分块和逐行乘积的矩阵乘部件结构,灵活适应transformer网络中各mha模块和ffn模块的各种规模大小的矩阵计算,且可以统一数据存储格式,选择完成残差和激活操作,避免计算过程中矩阵转置的开销,简化数据存储和加载流程。
[0156]
基于硬件加速器的计算流特征使用带弦环拓扑的流水线处理结构,环状结构可流式处理各步计算,灵活进行数据加载和节点跳过,减少总计算延迟,降低各节点存储开销;弦连接可提供残差数据加载和节点跳过功能,灵活适配硬件加速器的计算流和数据流。
[0157]
与该拓扑结构适配的处理单元内部结构设计,包括使用邻居、跳跃、保留缓存对邻居、跳跃接口数据的收发和控制。
[0158]
需要说明的是,本实施例提供上述图13所示的装置中,还可以包括其他更多或更少单元,本实施例对此不做限制。
[0159]
在一硬件实施例中,本发明实施例还提供一种电子设备,如图14所示,包括处理器cpu和fpga,处理器与fpga相连接,其中,所述fpga中包括前述实施例所述的硬件加速器。
[0160]
其中,处理器cpu用于生成并向所述fpga传输至少一个特征数据,比如第一特征数据x0。fpga用于接收来自所述处理器cpu的至少一个特征数据,对所述至少一个特征数据进
行处理,并将处理后的至少一个特征数据对外输出,比如输出第二特征数据x1。
[0161]
进一步地,该fpga中的硬件加速器用于执行以下方法步骤:-将并行的多路head中各权重矩阵合并成一路矩阵,包括wq,wkwv;-将权重wq和wk合并成w
qk
;-加载权重数据到权重分发单元;-加载特征数据到特征输入输出单元;-给系统下发参数和指令,开始执行;-权重分发单元依次给各计算单元分发权重数据;-特征数据依次流过各计算单元进行计算;-重复上述“权重分发单元依次给各计算单元分发权重数据”和“特征数据依次流过各计算单元进行计算”的步骤,直到计算完成,将结果输出给特征输入输出单元。
[0162]
上述各步骤为简要概括,具体实施过程参见前述实施例的描述,本实施例对此不再赘述。
[0163]
可选的,所述fpga中硬件加速器中的任一节点的结构包括如图13所示结构,其中,邻居缓存单元1303、跳跃缓存单元1304、缓存保留单元1305和权重缓存单元1306可统称为缓存单元。此外,该结构中还可以包括其他单元、模块,本实施例不做限制。
[0164]
其中,控制单元1301、计算单元1302和至少一个缓存单元,如缓存单元1303~1306用于执行前述实施例所述的硬件加速方法。
[0165]
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
[0166]
本发明实施例还提供一种电子设备,具有上述图12至图14所示的装置。
[0167]
请参阅图15,图15是本发明可选实施例提供的一种电子设备的结构示意图,如图15所示,该电子设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示gui的图形信息的指令。
[0168]
在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图15中以一个处理器10为例。
[0169]
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
[0170]
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
[0171]
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据一种小程序落地页的展现的电子
设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0172]
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
[0173]
该电子设备还包括通信接口30,用于该电子设备与其他设备或通信网络通信。
[0174]
此外,上述电子设备还包括输入装置和输出装置(图15中未示出)。处理器10、存储器20、输入/输出装置可以通过总线或者其他方式连接。
[0175]
进一步地,所述输入装置可接收输入的数字或字符信息,以及产生与该电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等。输出装置可以包括显示设备、辅助照明装置等。上述显示设备包括但不限于液晶显示器,发光二极管,显示器和等离子体显示器。在一些可选的实施方式中,显示设备可以是触摸屏。
[0176]
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理执行时,实现如本技术实施例所述的硬件加速方法。
[0177]
上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。
[0178]
可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的加速方法。
[0179]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
技术特征:
1.一种硬件加速器,其特征在于,所述硬件加速器包括:特征输入输出单元、至少一个矩阵乘单元、概率计算单元和至少一个层归一化单元;其中,所述特征输入输出单元与所述至少一个矩阵乘单元相连接,用于向所述至少一个矩阵乘单元输入特征数据;所述至少一个矩阵乘单元中的每个矩阵乘单元,用于根据权重值对所述特征输入输出单元或上一单元输出的特征数据执行矩阵乘运算,并输出运算后的特征数据;所述概率计算单元与所述至少一个矩阵乘单元连接,用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换所述第一存储单元中的原值;所述至少一个层归一化单元,用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述层归一化单元的第二存储单元上,替换所述第二存储单元中的原值,以及将所述运算结果作为新的特征数据,传输至所述特征输入输出单元。2.根据权利要求1所述的硬件加速器,其特征在于,所述概率计算单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换所述第一存储单元中的原值,具体包括:对所述至少一个特征数据的特征矩阵执行行列运算,计算每行的最大值;计算特征矩阵中每行的每个特征值与本行最大值的差值,并通过所述差值得到每行元素的指数值;计算所有所述指数值之和,利用所述指数值之和计算概率计算函数结果;将所述概率计算函数结果存储至所述第一存储单元上,替换所述原值。3.根据权利要求2所述的硬件加速器,其特征在于,所述概率计算单元接收的特征数据为m行n列的特征矩阵,所述概率计算单元具体还用于:计算所述m行n列特征矩阵中第i行的最大值,;为特征矩阵的元素,i为各元素的行索引,j为列索引;计算所述特征矩阵每行的每个元素与本行的最大值之间的差值,;根据所述差值查表,得到每行的每个元素的指数值,;根据所述每行元素的指数值计算指数值之和,;根据所述指数值之和计算每行的每个元素的softmax值,。4.根据权利要求3所述的硬件加速器,其特征在于,所述概率计算单元具体还用于:在查表得到所述每行的每个元素的指数值后,将所述指数值存回至所述第一存储单元,并替换原值。5.根据权利要求1所述的硬件加速器,其特征在于,所述接收的至少一个特征数据为m行n列的特征矩阵;每个所述层归一化单元对接收的至少一个特征数据执行行列运算,并将运算结果写回
至所述层归一化单元的第二存储单元上,替换所述第二存储单元中的原值,具体包括:计算m行中第i行元素的均值以及第i行元素的平方和,其中,,为特征矩阵的元素,i为各元素的行索引,j为列索引,所述平方和;根据所述均值以及所述平方和,计算第i行元素的平方和的方差,所述方差,根据所述方差查表得到标准差,所述标准差;根据所述标准差所述均值以及特征矩阵的元素,计算层归一化结果,所述层归一化结果;其中为矩阵各行中每个元素对应的权重值,为偏置。6.根据权利要求5所述的硬件加速器,其特征在于,每个所述层归一化单元还用于,将所述层归一化结果存回至所述第二存储单元上,替换所述原值。7.根据权利要求1所述的硬件加速器,其特征在于,所述至少一个矩阵乘单元中的每个矩阵乘单元具体用于根据接收的特征数据执行以下任一操作:矩阵乘操作;矩阵乘和残差操作;矩阵乘和激活函数操作;矩阵乘、残差、激活函数操作。8.根据权利要求7所述的硬件加速器,其特征在于,每个所述矩阵乘单元具体用于:当执行所述矩阵乘操作时,输出结果为:其中,a为一m行k列的特征矩阵,b为一k行n列的特征矩阵,i、j为特征矩阵a各元素的行索引和列索引,在所述矩阵乘操作时,对特征矩阵a和b分块,分块后,特征矩阵a为bm行bk列,特征矩阵b为bk行bn列,bi、bj为分块后特征矩阵a各块的行索引和列索引。9.根据权利要求8所述的硬件加速器,其特征在于,每个所述矩阵乘单元具体用于:当执行所述矩阵乘和残差操作时,输出结果为:其中,为输出结果,为残差矩阵。10.根据权利要求9所述的硬件加速器,其特征在于,每个所述矩阵乘单元具体用于:当执行所述矩阵乘和激活函数操作时,输出结果为:,或 ;其中,为输出结果,relu和gelu为激活函数。11.根据权利要求9所述的硬件加速器,其特征在于,每个所述矩阵乘单元具体用于:
当执行所述矩阵乘、残差、激活函数操作时,输出结果为:,或 ;其中,为输出结果,relu和gelu为激活函数。12.根据权利要求1-11任一项所述的硬件加速器,其特征在于,至少一个矩阵乘单元的数量为5个,至少一个层归一化单元的数量为两个;其中,第一矩阵乘单元的输入端与所述特征输入输出单元连接,所述第一矩阵乘单元的输出端与所述概率计算单元连接;所述概率计算单元的输出端与第二矩阵乘单元连接,所述第二矩阵乘单元还与第三矩阵乘单元连接;所述第三矩阵乘单元还与第一层归一化单元连接;所述第一层归一化单元分别与第四矩阵乘单元、第五矩阵乘单元相连接;所述第四矩阵乘单元与所述第五矩阵乘单元相连接,所述第五矩阵乘单元的输出端与第二层归一化单元的输入端连接;所述第二层归一化单元的输出端与所述特征输入输出单元相连接。13.根据权利要求12所述的硬件加速器,其特征在于,所述硬件加速器中还包括权重分发单元;所述权重分发单元与每个所述矩阵乘单元相连接,用于向每个所述矩阵乘单元分发权重值,所述权重值用于矩阵乘计算。14.根据权利要求13所述的硬件加速器,其特征在于,所述权重分发单元具体用于将第一权重值w
q
和第二权重值w
k
合并成第三权重值w
qk
;以及将所述第三权重值w
qk
给发送所述第一矩阵乘单元;所述第一矩阵乘单元具体用于利用所述第三权重值w
qk
对所述特征输入输出单元输出的特征数据x执行矩阵乘操作。15.根据权利要求12所述的硬件加速器,其特征在于,所述第二矩阵乘单元具体用于,利用第四权重值wv对所述特征输入输出单元输出的特征数据x执行矩阵乘操作,得到第一运算结果;计算所述概率计算单元输出的特征数据s与所述运算结果的乘积,得到第二运算结果;将所述第二运算结果发送至第三矩阵乘单元。16.根据权利要求12所述的硬件加速器,其特征在于,所述第五矩阵乘单元具体用于:接收来自所述第一层归一化单元输出的第一层归一化结果,和来自所述第四矩阵乘单元的特征数据;根据所述特征数据和本地的权重值进行矩阵乘运算,得到第三运算结果;对第三运算结果与所述第一层归一化结果做加法运算,得到第四运算结果;将所述第四运算结果发送至所述第二层归一化单元。17.根据权利要求16所述的硬件加速器,其特征在于,所述第一层归一化单元还与所述
特征输入输出单元连接,用于接收所述第三矩阵乘单元发送的特征数据,对所述特征数据执行处理,得到第一层归一化结果,以及将所述第一层归一化结果作为新的特征数据发送至所述特征输入输出单元。18.根据权利要求1-11任一项所述的硬件加速器,其特征在于,所述硬件加速器的每个所述矩阵乘单元、所述概率计算单元和每个层归一化单元中,具体包括:控制单元、计算单元、邻居缓存单元、跳跃缓存单元、缓存保留单元和权重缓存单元;其中,所述控制单元,用于控制所述邻居缓存单元、所述跳跃缓存单元和所述缓存保留单元;所述邻居缓存单元,用于接收并缓存上一单元发送的特征数据,以及将所述特征数据发送至所述计算单元;所述跳跃缓存单元,用于接收来自间隔一跳或一跳以上单元发送的特征数据,以及将所述特征数据发送至所述计算单元;所述缓存保留单元,用于缓存接收的至少一个特征数据;所述权重缓存单元,用于接收并缓存至少一个权重值;所述计算单元,用于根据所述至少一个权重值和至少一个特征数据执行特征数据计算,以及通过所述控制单元将计算结果输出给下一单元。19.一种硬件加速方法,其特征在于,所述方法应用于如权利要求1至18中任一项所述的硬件加速器,所述方法包括:特征输入输出单元向至少一个矩阵乘单元发送特征数据;每个所述矩阵乘单元接收所述特征输入输出单元或上一单元输出的特征数据,对特征数据执行矩阵乘运算,并输出运算后的特征数据给概率计算单元和至少一个层归一化单元;所述概率计算单元接收所述至少一个矩阵乘单元发送的至少一个特征数据,并所述至少一个特征数据的执行行列运算,并将运算结果写回至所述概率计算单元中的第一存储单元上,替换所述第一存储单元中的原值;每个所述层归一化单元对接收的至少一个特征数据执行行列运算,并将运算结果写回至所述层归一化单元的第二存储单元上,替换所述第二存储单元中的原值,以及将所述运算结果作为新的特征数据,传输至所述输入输出单元;所述特征输入输出单元接收来自所述至少一个层归一化单元发送的特征数据。20.一种电子设备,其特征在于,包括处理器和现场可编程门阵列fpga,所述处理器与所述fpga相连接,所述fpga中包括如权利要求1至18中任一项所述的硬件加速器;所述处理器,用于生成并向所述fpga传输至少一个特征数据;所述fpga,用于接收来自所述处理器的至少一个特征数据,对所述至少一个特征数据进行处理,并将处理后的至少一个特征数据对外输出。21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序;当所述计算机程序被处理执行时,实现如权利要求19所述的硬件加速方法。
技术总结
本发明公开了一种硬件加速器、硬件加速方法和电子设备,包括:特征输入输出单元、至少一个矩阵乘单元、概率计算单元和至少一个层归一化单元;其中每个矩阵乘单元用于根据权重值对特征输入输出单元或上一单元输出的特征数据执行矩阵乘运算,并输出运算后的特征数据;概率计算单元和每个层归一化单元用于对接收的至少一个特征数据执行行列运算,并将运算结果写回至本单元的存储单元上,替换原值;以及将运算结果作为新的特征数据,传输至特征输入输出单元。本方案基于硬件加速器的计算流特征使用带弦环拓扑结构,可流式处理各步计算,减少总计算延迟,降低各节点存储开销;此外将运算结果写回至RAM并替换原值避免使用额外缓存,节约RAM资源。节约RAM资源。节约RAM资源。
技术研发人员:杨宏斌 董刚 晁银银 梁玲燕 尹文枫
受保护的技术使用者:苏州浪潮智能科技有限公司
技术研发日:2023.09.05
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/