CN117827463A - 用于进行注意力运算的方法、设备和存储介质 - Google Patents
用于进行注意力运算的方法、设备和存储介质 Download PDFInfo
- Publication number
- CN117827463A CN117827463A CN202410155853.6A CN202410155853A CN117827463A CN 117827463 A CN117827463 A CN 117827463A CN 202410155853 A CN202410155853 A CN 202410155853A CN 117827463 A CN117827463 A CN 117827463A
- Authority
- CN
- China
- Prior art keywords
- tensor
- operator
- sub
- current
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 78
- 238000004364 calculation method Methods 0.000 title claims description 30
- 239000011159 matrix material Substances 0.000 claims abstract description 92
- 239000013598 vector Substances 0.000 claims abstract description 72
- 230000000873 masking effect Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 13
- 230000004927 fusion Effects 0.000 claims description 10
- 238000009825 accumulation Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 241001522296 Erithacus rubecula Species 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 101100257467 Dictyostelium discoideum spcs1 gene Proteins 0.000 description 3
- 101100533972 Dictyostelium discoideum spcs2 gene Proteins 0.000 description 3
- 101100395426 Schizosaccharomyces pombe (strain 972 / ATCC 24843) sty1 gene Proteins 0.000 description 3
- 101100373124 Schizosaccharomyces pombe (strain 972 / ATCC 24843) wis1 gene Proteins 0.000 description 3
- 101100476569 Staphylococcus aureus (strain Mu50 / ATCC 700699) ant2 gene Proteins 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种用于进行注意力运算的方法、设备和存储介质。其中方法包括经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量;经由第二算子,基于第一张量,确定s向量、第二张量以及第三张量,其中,第二张量为经由关于第一张量的指数运算得到的;以及经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果。本公开的方案能够显著提高注意力运算的效率。
Description
技术领域
本公开的实施例总体涉及注意力运算领域,并且更具体地涉及一种用于进行注意力运算的方法、设备和存储介质。
背景技术
注意力(attention)运算越来越广泛地应用于深度神经网络中。传统的注意力运算方案中,存在运算性能较低,或者是用于运算的存储器资源利用率较低,导致运算性能下降等问题。
发明内容
针对上述问题,本公开提供了一种用于进行注意力运算的方法、设备和存储介质,能够显著提高注意力运算的效率。
根据本公开的第一方面,提供一种用于进行注意力运算的方法,该方法包括:经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量;经由第二算子,基于第一张量,确定s向量、第二张量以及第三张量,其中,第二张量为经由关于第一张量的指数运算得到的;以及经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果。第一算子、第二算子以及第三算子基于处理器核实现。
在一些实施例中,第三算子包括第六子算子,经由第二算子,基于第一张量确定s向量、第二张量以及第三张量包括:基于第一张量,确定第二张量;基于第二张量,确定s向量;以及基于第一张量以及来自第三算子的第四张量,确定第三张量,其中,第四张量为经由第三算子的第六子算子计算得到的,第六子算子包括加法子算子。
在一些实施例中,第二算子包括第一子算子、第二子算子、第三子算子以及第四子算子;第一张量包括关于第一目标维度的多个第一子张量;基于第一张量,确定第二张量包括:经由第一子算子,确定当前最大第一子张量,当前最大第一子张量为当前第一子张量以及当前第一子张量之前的所有第一子张量中的最大的第一子张量;以及经由第二子算子,针对当前第一子张量与当前最大第一子张量之间的差值进行指数运算,以确定当前第二张量;基于第二张量,确定s向量包括:经由第三子算子,确定当前第二张量以及当前第二张量之前的所有第二张量的第一累加和,确定前一个第一子张量对应的s向量与第一中间张量的第一乘积,基于所述第一累加和与所述第一乘积确定当前第一子张量对应的s向量,第一中间张量为针对前一个最大第一子张量与当前最大第一子张量的差值进行指数运算得到的;基于第一张量以及来自第三算子的第四张量,确定第三张量包括:经由第四子算子,基于第一中间张量以及来自第三算子的当前第四张量,确定当前第三张量,当前第三张量为当前第一子张量所对应的第三张量。
在一些实施例中,第三算子还包括第五子算子、第七子算子,经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果包括:经由第五子算子,确定第二张量与值矩阵的矩阵乘结果,以便作为当前第二中间张量;经由第六子算子,确定当前第二中间张量与前一个第三张量的和,以便作为当前第四张量;以及经由第七子算子,根据最后一个第一子张量对应的第三张量以及s向量的商,确定注意力结果。
在一些实施例中,第一算子包括第八子算子、第九子算子;经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量包括:经由第八子算子,确定查询张量与键张量的矩阵乘结果;以及经由第九子算子,对矩阵乘结果进行掩码运算,以便将掩码运算后的矩阵乘结果作为第一张量。
在一些实施例中,第一算子、第二算子以及第三算子之间经由共享存储器传输数据。
在一些实施例中,第一子算子、第二子算子、第三子算子以及第四子算子之间经由寄存器传输数据。
在一些实施例中,第一算子、第二算子以及第三算子均为融合算子,第一算子基于张量核以及矢量核实现,第二算子基于矢量核实现,第三算子基于张量核以及矢量核实现。
在一些实施例中,该方法还包括:确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值;根据第一数值以及第二数值,确定目标维度;以及基于目标维度,将查询张量划分为多个子查询张量,以便分别针对多个子查询张量中的一个子查询张量进行注意力计算。分别针对多个子查询张量中的一个子查询张量进行注意力计算包括:经由第一算子,确定该子查询张量与键张量的矩阵乘结果,以便作为该子查询张量对应的第一张量;经由第二算子,基于该子查询张量对应的第一张量,确定对应的s向量、对应的第二张量以及对应的第三张量,其中,对应的第二张量为经由关于对应的第一张量的指数运算得到的;以及经由第三算子,基于对应的s向量、对应的第二张量以及对应的第三张量,确定该子查询张量对应的注意力结果。
在一些实施例中,分别针对多个子查询张量中的一个子查询张量进行注意力计算包括:根据处理器核的共享存储器的大小,针对子查询张量的目标划分维度将子查询张量划分为多个第一组块;针对键张量的目标划分维度,将键张量划分为多个第二组块;针对值张量的目标划分维度将值张量划分为多个第三组块;以及基于多个第一组块、多个第二组块以及多个第三组块进行注意力计算。
根据本公开的第二方面,提供一种电子设备,该电子设备包括:至少一个处理器;以及与该至少一个处理器通信连接的存储器;该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行根据本公开的第一方面的方法。
根据本公开的第三方面,提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被机器执行时实现根据本公开的第一方面的方法。
根据本公开的第四方面,提供一种计算机程序产品,该计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,该机器可执行指令在被执行时使机器执行根据本公开的第一方面的方法中的步骤。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素。
图1示出了本公开的实施例的用于进行注意力运算的方法的流程图。
图2示出了本公开的实施例的用于进行注意力运算的方法的查询张量Q、键张量K和值张量V的示意图。
图3示出了本公开的实施例的用于进行注意力运算的方法与现有方案的性能对比表。
图4示出了本公开的实施例的用于进行注意力运算的方法的流程图。
图5示出了本公开的实施例的用于进行注意力运算的方法的查询张量Q、键张量K和值张量V的示意图。
图6示出了本公开的实施例的用于进行注意力运算的方法的Q'、K'和V'的示意图。
图7示出了本公开的实施例的用于进行注意力运算的方法的示意图。
图8示出了多个处理器核中的每一个处理器核分别针对多个第一子张量中的一个第一子张量进行注意力计算的方法的流程图。
图9示出了本公开的实施例的用于进行注意力运算的方法与现有方案的性能对比表。
图10示出了可以用来实施本公开内容的实施例的方法的示例电子设备的示意性框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如前文所描述,传统的注意力运算方案中,存在运算性能较低,或者是用于运算的存储器资源利用率较低,导致运算性能下降等问题。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,提供一种用于进行注意力运算的方案,在该方案中,经由第一算子确定查询张量与键张量的矩阵乘结果,以便作为第一张量,经由第二算子基于第一张量确定s向量、第二张量以及第三张量,经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果,利用三个算子实现注意力运算,可以有效提高运算性能。
以下对本公开的实施例的方法进行详细说明。
图1示出了本公开的实施例的用于进行注意力运算的方法1100的流程图。应当理解的是,方法1100还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。方法1100可以基于处理器实现,也可以在图10所示的电子设备700处实现。其中,该处理器采用MCU(Micro Controller Unit,微控制单元)、CPU(CentralProcessing Unit,中央处理器)、GPU(Graphics Processing Unit,图形处理器)、GPGPU(General-purpose Computing on Graphics Processing Units,通用图形处理器)、FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)或者其它可编程逻辑器件、ASIC(Application Specific Integrated Circuit,专用集成电路)、分立门或者晶体管逻辑器件、分立硬件组件等实现。该处理器例如可以包含多个处理器核(processer core),在运行的过程中,多个处理器核可以并行运算。在一些实施例中,该注意力运算例如为FlashAttention(一种IO感知的精确注意力算法)运算。
参照图1,方法1100包括:
在步骤1102处,经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量。
在步骤1104处,经由第二算子,基于第一张量,确定s向量、第二张量以及第三张量。其中,第二张量为经由关于第一张量的指数运算得到的。
在步骤1106处,经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果。
值得说明的是,第一算子、第二算子以及第三算子基于处理器核实现。在一些实施例中,第一算子、第二算子以及第三算子可以基于同一个处理器核实现。在一些实施中,第一算子、第二算子以及第三算子分别基于不同的处理器核实现。
应当理解,注意力运算中涉及三个输入张量,分别为查询张量Q(Tensor Q)、键张量K(Tensor K)和值张量V(Tensor V);注意力运算的输出结果例如为一个张量(例如以“Softmax”表征)。查询张量Q、键张量K、值张量V以及输出张量Softmax例如为形状为[B,S,D]的张量。例如,维度值D对应于第一维度,维度值S对应于第二维度,维度值B对应于第三维度。
图2示出了本公开的实施例的用于进行注意力运算的方法进行注意力运算的示意图。为了便于说明,图中示出了查询张量Q、键张量K和值张量V的局部。其中,第三维度未示出。查询张量Q所示出的局部例如为形状为[256,64]的矩阵,键张量K所示出的局部例如为形状为[64,4096]的矩阵,值张量V所示出的局部例如为形状为[256,64]的矩阵。如图2所示,其中方框1202示意出第一算子所进行的数据运算,方框1204示意出第二算子所进行的数据运算,方框1206示意出第三算子所进行的数据运算。
在方框1202处,第一算子确定查询张量Q与键张量K的矩阵乘结果,以便作为第一张量QK。第一算子基于张量核以及矢量核实现。第一算子例如包括矩阵乘算子,以便实现查询张量Q与键张量K的矩阵乘运算。图中所示意出的第一张量QK的局部,例如为形状为[256,2048]的矩阵。
在方框1204处,第二算子基于第一张量确定s向量、第二张量QK'以及第三张量Vi'。
在一些实施例中,第二算子基于第一张量确定s向量、第二张量以及第三张量例如包括:基于第一张量确定第二张量;基于第二张量确定s向量;以及基于第一张量以及来自第三算子的第四张量确定第三张量。其中,第四张量为经由第三算子的加法子算子计算得到的。在一些实施例中,第三算子包括第五子算子、第六子算子以及第七子算子。其中,第五子算子例如为矩阵乘子算子,用于实现矩阵乘运算;第六子算子例如为加法子算子,用于实现加法运算;第七子算子如为除法子算子,用于实现除法操作。
在一些实施例中,第二算子包括第一子算子、第二子算子、第三子算子以及第四子算子。第一张量包括关于第一维度的多个第一子张量。
相应地,第二算子基于第一张量确定s向量、第二张量以及第三张量包括:经由第一子算子,依次确定多个第一子张量中的当前最大第一子张量;经由第二子算子,针对当前第一子张量与当前最大第一子张量之间的差值进行指数运算,以确定当前第二张量;经由第三子算子,根据当前第二张量以及当前第二张量之前的第二张量的累加和,以及前一个第一子张量对应的s向量与第一中间张量的乘积进行加和,以作为当前第一子张量对应的s向量,第一中间张量为针对前一个最大第一子张量与当前最大第一子张量的差值进行指数运算得到的;以及经由第四子算子,根据第一中间张量以及来自第三算子的当前第四张量确定当前第三张量。
参照图2,其中方框1242示意出第一子算子所进行的运算,方框1244示意出第二子算子所进行的运算,方框1246示意出第三子算子所进行的运算,方框1248示意出第四子算子所进行的运算。
例如,在方框1242处,第一子算子依次确定多个第一子张量中的当前最大第一子张量。第一张量包括关于第一目标维度的多个第一子张量。也即,第一张量被沿着该第一目标维度方向被划分为多个第一子张量。其中,第一张量的第一目标维度例如为关于行(row)的维度。根据方框1242,第一张量QK例如被沿着关于行的维度划分为多个第一子张量,每一个子张量在列(col)维度以及行维度上所具备的形状例如为[256,1]。因此,第一张量QK例如给划分为2048个第一子张量。这2048个第一子张量按照其在第一张量QK排列的位置,例如依次为1号第一子张量、2号第一子张量、3号第一子张量……2048号第一子张量。
第一子算子依次确定多个第一子张量中的当前最大第一子张量的方式例如参照以下公式(1)实现:
mi = max(QK, m) (1)
其中,max()表征确定两个输入变量中较大的一个作为输出结果,mi表征当前最大第一子张量,QK表征当前第一子张量,m表征前一个最大第一子张量,m的初始值为-inf。也即,对于第一个第一子张量(例如1号第一子张量),QK的取值为“1号第一子张量”,m的取值为“-inf”,相应地,输出结果mi则为“1号第一子张量”。此时,“1号第一子张量”为“当前第一子张量”。第一子算子针对“1号第一子张量”运算得到对应于当前第一子张量(即“1号第一子张量”)的当前最大第一子张量之后,第二子算子即可针对当前第一子张量(即“1号第一子张量”)与当前最大第一子张量之间的差值进行指数运算,以确定当前第二张量。应当理解,第一子算子、第二子算子、第三子算子、第四子算子、矩阵乘子算子、加法子算子为依次串行操作,在后的子算子以在前的子算子的输出结果作为输入数据执行相应的运算,因此,在第一子算子以例如“n号第一子张量”作为当前第一子张量得到当前最大第一子张量之后,后续的第二子算子、第三子算子、第四子算子、矩阵乘子算子、加法子算子依次以“n号第一子张量”作为当前第一子张量进行运算,所得到的结果与“n号第一子张量”相对应。
在一些实施例中,第一子算子可以针对“1号第一子张量”运算得到当前最大第一子张量之后,可以立即针对“2号第一子张量”运算得到与“2号第一子张量”对应的当前最大第一子张量。概括地说,第一子算子、第二子算子、第三子算子、第四子算子、矩阵乘子算子、加法子算子可以执行流水线操作,以便节省运算时间。
对于第二个第一子张量(例如2号第一子张量),QK的取值为“2号第一子张量”,m的取值为“1号第一子张量”,相应地,输出结果mi则为“2号第一子张量”以及“1号第一子张量”两者中较大的一个。以此类推,不再赘述。因此,当前最大第一子张量为当前第一子张量以及当前第一子张量之前的所有第一子张量中的最大的第一子张量。
在方框1244处,第二子算子针对当前第一子张量与当前最大第一子张量之间的差值进行指数运算,以确定当前第二张量。
第二子算子确定当前第二张量的方式例如可以参照以下公式(2)实现:
QK' = exp(QK - mi) (2)
其中,QK表征当前第一子张量,mi表征当前最大第一子张量,exp(x)表征e的x次方运算,其中e是自然对数的底数,QK'表征当前第二张量。应当理解,当前第二张量是与当前第一子张量对应的。
在方框1246处,第三子算子根据当前第二张量以及当前第二张量之前的第二张量的累加和,以及前一个第一子张量对应的s向量与第一中间张量的乘积进行加和,以作为当前第一子张量对应的s向量,第一中间张量为针对前一个最大第一子张量与当前最大第一子张量的差值进行指数运算得到的。也即,第三子算子,确定当前第二张量以及当前第二张量之前的所有第二张量的第一累加和,确定前一个第一子张量对应的s向量与第一中间张量的第一乘积,基于所述第一累加和与所述第一乘积确定当前第一子张量对应的s向量。
其中,第三子算子确定当前s向量可以参照以下公式(3)实现:
s = s1 * exp(m - mi)+ sum(QK') (3)
其中,s1表征前一个第一子张量对应的s向量,s表征当前第一子张量对应的s向量,mi表征当前最大第一子张量,m表征前一个最大第一子张量,QK'表征当前第二张量。其中,s向量的初始值为0。sum(QK')表征获取当前的第二张量以及当前第二中间张量之前的第二中间张量的累加和的运算。也即,处理器核针对前一个最大第一子张量与当前最大第一子张量之间的差值进行指数运算(即,exp(m-mi)),以便得到第三中间张量;以及将当前第一中间张量以及当前第一中间张量之前的所有第一中间张量的累加和(即,sum(QK')),以及前一个第一子张量对应的s向量(即s1)与第三中间张量(即exp(m-mi))的乘积(即s1*exp(m-mi))进行加和,以作为当前第一子张量对应的s向量。
在方框1248处,第四子算子根据第一中间张量以及来自第三算子的当前第四张量确定当前第三张量。应当理解,当前第三张量为当前第一子张量所对应的第三张量。第四子算子确定当前第三张量可以参照以下公式(4)实现:
Vi' = Vi * exp(m - mi) (4)
其中,exp(m-mi)为第三中间张量,Vi表征来自第三算子的当前第四张量,Vi'表征当前第三张量。
然后,在方框1262处,第三算子的矩阵乘子算子确定第二张量与值矩阵的矩阵乘结果,以便作为当前第二中间张量。
第三算子的矩阵乘子算子确定当前第二中间张量的方式例如可以参照以下公式(5)实现:
QK'V=QK'*V(5)
其中,QK'V表征当前第二中间张量,QK'表征第二张量,V表征值张量V。
在方框1264处,第三算子的加法子算子确定当前第二中间张量与当前第三张量的和,以便作为当前第四张量。
第三算子的加法子算子确定当前第四张量的方式例如参照以下公式(6)实现:
Vi=Vi'+QK'V(6)
其中,Vi表征当前第四张量,Vi'表征当前第三张量,QK'V表征当前第二中间张量。
在方框1266处,除法子算子根据最后一个第一子张量对应的第四张量以及s向量的商,确定注意力结果。
除法子算子确定注意力结果的方式可以参照以下公式(7)实现:
Softmax=Vi/s(7)
其中,Softmax表征注意力结果,Vi表征最后一个第一子张量对应的第四张量,s表征最后一个第一子张量对应的s向量。也即,在第三算子的加法子算子针对最后一个第一子张量完成运算之前,除法子算子不执行运算,除法子算子仅针对最后一个第一子张量对应的第四张量以及s向量执行运算。
图3示出了本公开的实施例的用于进行注意力运算的方法1100与现有方案的性能对比表。其中,“性能倍数”为现有方案的运行时间与本公开的方法的运行时间的比值。能够看出,本公开的方法1100的性能相比于现有方案有显著的提升。
在一些实施例中,第一算子、第二算子以及第三算子均为利用基础算子深度融合而实现,在提高运算性能的同时,还提高了泛化性。另外,在方法1100中,可以对寄存器堆充分利用。例如,第五子算子与第六子算子以及第七子算子之间使用寄存器同步,以便实现不同基础算子的并行。第二算子内部使用寄存器实现最大第一子张量与s向量的更新。关于第二算子,其为融合算子,其例如可以称为“Flashsoftmax”算子,应当理解,该“Flashsoftmax”算子的实现方式与传统的softmax算子的实现方式不同。该“Flashsoftmax”算子基于前述第一子算子、第二子算子、第三子算子以及第四子算子融合实现。关于第一子算子、第二子算子、第三子算子以及第四子算子所对应的输入数据、输出数据、计算过程以及内部状态,可参照前文关于第一子算子、第二子算子、第三子算子以及第四子算子的说明,此处不再赘述。另外,值得说明的是,第一算子确定查询张量与键张量的矩阵乘结果,以便作为第一张量,实现了第一线性变换。第三算子基于s向量、第二张量以及第三张量,确定注意力结果,实现了第二线性变换。该“Flashsoftmax”算子以该第一线性变换的输出数据作为输入数据,该“Flashsoftmax”算子的输出数据作为该第二线性变换的输入数据。
在一些实施例中,方法1100还包括:确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值;根据第一数值以及第二数值,确定目标维度;以及基于目标维度,将查询张量划分为多个子查询张量,以便分别针对多个子查询张量中的一个子查询张量进行注意力计算。分别针对多个子查询张量中的一个子查询张量进行注意力计算包括:经由第一算子,确定该子查询张量与键张量的矩阵乘结果,以便作为该子查询张量对应的第一张量;经由第二算子,基于该子查询张量对应的第一张量,确定对应的s向量、对应的第二张量以及对应的第三张量,其中,对应的第二张量为经由关于对应的第一张量的指数运算得到的;以及经由第三算子,基于对应的s向量、对应的第二张量以及对应的第三张量,确定该子查询张量对应的注意力结果。也即,先将查询张量划分为多个子查询张量,然后,利用第一算子、第二算子以及第三算子针对每一个子查询张量确定每一个子查询张量对应的注意力结果,然后,基于多个子查询张量分别对应的注意力结果,得到总的注意力结果。
其中,分别针对多个子查询张量中的一个子查询张量进行注意力计算例如包括:根据处理器核的共享存储器的大小,针对子查询张量的目标划分维度将子查询张量划分为多个第一组块;针对键张量的目标划分维度,将键张量划分为多个第二组块;针对值张量的目标划分维度将值张量划分为多个第三组块;以及基于多个第一组块、多个第二组块以及多个第三组块进行注意力计算。也即,在将查询张量划分为子查询张量的基础上,还可以针对子查询张量进一步进行划分,得到多个第一组块,以及将将键张量划分为多个第二组块,将值张量划分为多个第三组块,然后,利用第一算子、第二算子以及第三算子针对每一个第一组块确定该组块对应的注意力结果。例如,经由第一算子,确定该第一组块与对应的第二组块的矩阵乘结果,以便作为该第一组块对应的第一张量;经由第二算子,基于该第一组块对应的第一张量,确定对应的s向量、对应的第二张量以及对应的第三张量,其中,对应的第二张量为经由关于对应的第一张量的指数运算得到的;以及经由第三算子,基于对应的s向量、对应的第二张量以及对应的第三张量,确定该第一组块对应的注意力结果。
图4示出了本公开的实施例的用于进行注意力运算的方法100的流程图。应当理解的是,方法100还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。方法100可以基于处理器实现,也可以在图10所示的电子设备700处实现。其中,该处理器采用MCU、CPU、GPU、GPGPU、FPGA或者其它可编程逻辑器件、ASIC、分立门或者晶体管逻辑器件、分立硬件组件等实现。该处理器例如可以包含多个处理器核,在运行的过程中,多个处理器核可以并行运算。
参照图4,方法100包括:
在步骤102处,确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值。其中,第一维度例如为查询张量的序列长度所对应的维度,第二维度为查询张量的批量大小所对应的维度。
在步骤104处,根据第一数值以及第二数值,确定目标维度。
在步骤106处,基于目标维度,将查询张量划分为多个第一子张量,以便多个处理器核中的每一个处理器核分别针对多个第一子张量中的一个第一子张量进行注意力计算。
在一些实施例中,确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值包括:基于查询张量的序列长度与处理器核的关于数据对齐的最小数据粒度的比值,确定第一数值;以及基于查询张量的批量大小与查询张量的注意力头的数量的乘积,确定第二数值。
在一些实施例中,根据第一数值以及第二数值确定目标维度包括:确定第一数值以及第二数值是否均小于处理器核的数量;以及响应于确定第一数值以及第二数值均小于处理器核的数量,确定目标维度为第一维度和第二维度。
在一些实施例中,根据第一数值以及第二数值确定目标维度还包括:响应于确定第一数值以及第二数值不均小于处理器核的数量,确定第一数值以及第二数值中较大的一个所对应的维度为目标维度。
应当理解,注意力运算中涉及三个输入张量,分别为查询张量Q(Tensor Q)、键张量K(Tensor K)和值张量V(Tensor V);注意力运算的输出结果例如为一个张量(例如以“tensor(output)”表征)。查询张量Q、键张量K、值张量V以及输出张量tensor(output)例如为形状为[batch_size*head_num,sequence_length,head_size]的张量。其中,batch_size表征张量的批量大小,head_num表征张量的注意力头的数量,sequence_length表征张量的序列长度,head_size表征张量的注意力头的大小。
图5示出了本公开的实施例的用于进行注意力运算的方法的查询张量Q、键张量K和值张量V的示意图。为了便于说明,图中示出了查询张量Q、键张量K和值张量V的关于序列长度的第一维度以及关于注意力头的大小的第三维度,省略了查询张量Q、键张量K和值张量V的关于批量大小的第二维度未予示出。
例如,查询张量Q、键张量K和值张量V的关于序列长度的第一维度的第一维度值例如为1024,即,序列长度(sequence_length)为1024;查询张量Q、键张量K和值张量V的关于注意力头的大小的第三维度的第三维度值例如为768,即,注意力头的大小(head_size)为768。
为了便于说明,以查询张量Q的一个注意力头(head)Q'、键张量K的一个注意力头K'以及值张量V的一个注意力头V'为例进行说明。图6示出了本公开的实施例的用于进行注意力运算的方法的Q'、K'和V'的示意图。Q'、K'和V'例如均为形状为[1024,64]的矩阵。
在进行注意力运算时,在步骤102处,确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值。第一数值例如为查询张量的序列长度与处理器核的关于数据对齐的最小数据粒度(例如以“block_size”表征)的比值,即,第一数值为sequence_length/block_size。第二数值例如为查询张量的批量大小与查询张量的注意力头的数量的乘积,即,第二数值为batch_size*head_num。
然后,根据步骤104,根据第一数值以及第二数值,确定目标维度。
其中,如果第一数值以及第二数值均小于处理器核的数量,则确定关于序列长度的第一维度以及关于批量大小的第二维度两者为目标维度,以便在步骤106中,针对第一维度以及第二维度两个维度对查询张量Q进行划分,以便得到多个第一子张量。值得说明的是,当第一数值以及第二数值均小于处理器核的数量时,单独基于第一维度以及第二维度中的其中一个维度对查询张量Q进行划分,则得到的第一子张量的数量小于处理器核的数量,此时,多个处理器核不能得到充分利用,存在部分处理器核未参与并行运算的情况,不利于处理器的运算性能的最大发挥。
如果第一数值以及第二数值不均小于处理器核的数量,则确定第一数值以及第二数值中较大的一个所对应的维度为目标维度。也即,以sequence_length/block_size和batch_size*head_num两者中较大的一个所对应的维度为目标维度,以便在步骤106中,基于该目标维度针对查询张量Q进行划分,以便得到多个第一子张量。值得说明的是,当sequence_length/block_size较大时,基于第一维度对查询张量Q进行划分,有利于保证在数据运算过程中,处理器核将数据加载至数据缓冲区所需重复加载的次数,并使得多个处理器核能够得到充分利用。当batch_size*head_num较大时,基于第二维度对查询张量Q进行划分,可以使得数据自然符合数据对齐要求,每次加载数据无需按关于数据对齐的最小数据粒度补齐,并且每次加载数据可以充分占满数据缓冲区。
图7示出了本公开的实施例的用于进行注意力运算的方法的示意图。为了便于说明,图中以一个注意力头为例进行了示意。例如,查询张量Q被划分为多个第一子张量,例如,查询张量Q被划分为分别与多个处理器核(例如包括处理器核spc0、处理器核spc1、处理器核spc2等)对应的多个第一子张量。其中,处理器核spc0针对查询张量Q的其中一个第一子张量(例如与子矩阵Q1对应的第一子张量)以及键张量K和值张量V进行注意力运算。处理器核spc1针对查询张量Q的其中一个第一子张量(例如与子矩阵Q2对应的第一子张量)以及键张量K和值张量V进行注意力运算。处理器核spc2针对查询张量Q的其中一个第一子张量(例如与子矩阵Q3对应的第一子张量)以及键张量K和值张量V进行注意力运算。关于其他处理器核,此处不再赘述。其中,子矩阵Q1等例如为形状为[64,64]的矩阵。
图8示出了多个处理器核中的每一个处理器核分别针对多个第一子张量中的一个第一子张量进行注意力计算的方法500的流程图。应当理解的是,方法500还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。方法500可以基于处理器实现,也可以在图10所示的电子设备700处实现。
其中,多个处理器核中的每一个处理器核分别针对多个第一子张量中的一个第一子张量进行注意力计算包括:
在步骤502处,根据处理器核的共享存储器的大小,针对第一子张量的目标划分维度将第一子张量划分为多个第一组块。
具体而言,在在步骤502处,根据处理器核的共享存储器的大小,针对第一子张量的目标划分维度将第一子张量划分为多个第一组块。例如,经由划分后,查询张量Q的其中第一子张量的其中一个第一组块为子矩阵Q1。在一些实施例中,第一子张量的目标划分维度例如可以为第一子张量的高度维度。
在步骤504处,针对键张量的目标划分维度,将键张量划分为多个第二组块;以及针对值张量的目标划分维度将值张量划分为多个第三组块。例如,在一种划分方式中,子矩阵K1为键张量K划分形成的多个第二组块中的一个第二组块;子矩阵V1为值张量V划分形成的多个第三组块中的一个第三组块。在一些实施例中,键张量K的目标划分维度例如为键矩阵K的宽度维度;在一些实施例中,值张量V的目标划分维度例如为值矩阵V的高度维度。多个第二组块例如包括K1、K2、K3、K4等。多个第三组块例如包括V1、V2、V3、V4等
在步骤506处,基于多个第一组块、多个第二组块以及多个第三组块进行注意力计算。
在一些实施例中,在步骤506处,处理器核依次基于多个第一组块中的每一个组块,分别与多个第二组块以及多个第三组块进行注意力计算,以便依次确定对应的局部注意力运算结果(partial attention),以及根据各个局部注意力运算结果,确定整体的注意力运算结果。
例如,处理器核spc0针对查询张量Q的其中一个第一子张量(例如与子矩阵Q1对应的第一子张量)以及键张量K和值张量V进行注意力运算。其中,该第一子张量被划分为包括子矩阵Q1在内的多个第一组块,每一个组块例如为形状为[64,64]的矩阵。
具体实现时,处理器核spc0首先针对该第一子张量中的第一个第一组块(例如子矩阵Q1)分别与多个第二组块以及多个第三组块进行注意力计算,以便依次确定对应的局部注意力运算结果。例如,处理器核将多个第一组块中的每一个第一组块分别与多个第二组块中的对应第二组块依次进行矩阵乘运算,以便得到与多个第二组块对应的多个第一中间张量;以及根据多个第一中间张量以及多个第三组块,确定用于进行softmax运算的分子以及分母,以便根据该分子以及该分母确定softmax运算的结果。
该过程可以称为“第一层循环”,也即,针对该第一子张量中的第一个第一组块(例如子矩阵Q1),基于键张量K的目标划分维度,以及值张量V的目标划分维度,使得子矩阵Q1依次与对应的第二组块以及对应的第三组块进行注意力运算,以便依次遍历每一个对应的第二组块以及对应的第三组块,以便确定对应的局部注意力运算结果。
在一些实施例中,处理器核spc0首先基于矩阵乘(MMA)算子(例如称为“第一算子”)对第一子张量中的第一个第一组块(例如子矩阵Q1)以及键张量K的第一个第二组块(例如子矩阵K1)进行矩阵乘运算,以便得到对应的第一中间张量(例如子矩阵QK1)。
在一些实施例中,处理器核spc0经由第一算子得到子矩阵QK1之后,可以将计算得到的结果(即子矩阵QK1)存储至处理器的共享存储器(shared memory)中。
在一些实施例中,处理器核spc0经由第一算子得到子矩阵QK1之后,可以继续利用第一算子针对该第一子张量中的第一个第一组块(例如子矩阵Q1)以及键张量K的第二个第二组块(例如子矩阵K2)进行矩阵乘运算,以便得到对应的第一中间张量(例如子矩阵QK2);利用第一算子针对该第一子张量中的第一个第一组块(例如子矩阵Q1)以及键张量K的第三个第二组块(例如子矩阵K3)进行矩阵乘运算,以便得到对应的第一中间张量(例如子矩阵QK3);利用第一算子针对该第一子张量中的第一个第一组块(例如子矩阵Q1)以及键张量K的第四个第二组块(例如子矩阵K4)进行矩阵乘运算,以便得到对应的第一中间张量(例如子矩阵QK4)……
然后,处理器核spc0根据第一中间张量(例如子矩阵QK1)以及值张量V的第一个第三组块(例如子矩阵V1)确定用于进行softmax运算的分子以及分母,以便根据该分子以及该分母确定softmax运算的结果。该过程可以利用第二算子实现。
在一些实施例中,在经由第一算子得到第一中间张量后,还可以根据具体运算需求,针对第一中间张量进行掩码操作,以便得到掩码操作后的第一中间张量。掩码操作例如可以基于maskfill(填充掩码)或者maskadd(添加掩码)运算实现。在一些实施例中,掩码操作后的第一中间张量为针对第一中间张量进行点对点操作,因此,在针对第一中间张量进行掩码操作的过程中,可以将掩码操作后的第一中间张量存储至原始第一中间张量对应的存储区(即替换原始第一中间张量),以便实现共享存储器的复用,提高存储资源利用率,降低存储资源对处理器面积资源的占用。值得说明的是,在进行掩码操作得到掩码操作后的第一中间张量之后,后续操作则以掩码操作后的第一中间张量作为输入数据进行操作。在一些实施例中,第一算子包括第八子算子、第九子算子;经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量包括:经由第八子算子,确定查询张量与键张量的矩阵乘结果;以及经由第九子算子,对矩阵乘结果进行掩码运算,以便将掩码运算后的矩阵乘结果作为第一张量。其中,第八子算子例如为矩阵乘子算子。第九子算子例如为掩码运算子算子,用于实现掩码运算。掩码运算例如可以基于maskfill(填充掩码)或者maskadd(添加掩码)运算实现。
在一些实施例中,在经由第一算子得到子矩阵QK1后,即可由第二算子进行计算,以便实现流水线操作,提高运算效率。
值得说明的是,第二算子根据多个第一中间张量以及多个第三组块确定用于进行softmax运算的分子以及分母包括:
依次针对多个第一中间张量中的每一个第一中间张量执行以下操作:确定当前最大张量,当前最大张量为当前第一中间张量以及当前第一中间张量之前的第一中间张量中最大的第一中间张量;针对当前第一中间张量与当前最大张量之间的差值进行指数运算,以确定第二中间张量;以及根据前一个第一中间张量对应的s向量、当前最大张量、第二中间张量以及当前第一中间张量的前一个第一中间张量,确定当前第一中间张量对应的s向量,以便确定用于进行softmax运算的分母。
具体实施时,第二算子首先确定当前最大张量。确定当前最大张量的方式例如可以参照以下公式(8)实现:
mi = max(QK, m) (8)
其中,max()表征确定两个变量中较大的一个作为输出结果,mi表征当前最大张量,QK表征当前第一中间张量,m表征前一个最大张量,m的初始值为-inf。也即,对于第一个第一中间张量(例如子矩阵QK1),QK的取值为“QK1”,m的取值为“-inf”,相应地,输出结果mi则为“QK1”。
对于第二个第一中间张量(例如子矩阵QK2),QK的取值为“QK2”,m的取值为“QK1”,相应地,输出结果mi则为“QK1”以及“QK2”两者中较大的一个。以此类推,不再赘述。因此,当前最大张量为当前第一中间张量以及当前第一中间张量之前的第一中间张量中最大的第一中间张量。
第二算子针对当前第一中间张量与当前最大张量之间的差值进行指数运算,以确定第二中间张量。第二算子进行指数运算以确定第二中间张量的方式可以参照以下公式(9)实现:
QK' = exp(QK - mi) (9)
其中,QK表征当前第一中间张量,mi表征当前最大张量,exp(x)表征e的x次方运算,其中e是自然对数的底数,QK'表征第二中间张量。
第二算子根据前一个第一中间张量对应的s向量、当前最大张量、第二中间张量以及当前第一中间张量的前一个第一中间张量,确定当前第一中间张量对应的s向量,以便确定用于进行softmax运算的分母。第二算子确定当前第一中间张量对应的s向量例如可以参照以下公式(10)实现:
s = s1 * exp(m - mi)+ sum(QK') (10)
其中,s1表征前一个第一中间张量对应的s向量,s表征当前第一中间张量对应的s向量,mi表征当前最大张量,m表征前一个最大张量,QK'表征当前第二中间张量。其中,s向量的初始值为0。sum(QK')表征获取当前的第二中间张量以及当前第二中间张量之前的第二中间张量的累加和的运算。也即,处理器核针对前一个最大张量与当前最大张量之间的差值进行指数运算(即,exp(m-mi)),以便得到第三中间张量;以及将当前的第二中间张量以及当前第二中间张量之前的所有第二中间张量的累加和(即,sum(QK')),以及前一个第一中间张量对应的s向量(即s1)与第三中间张量(即exp(m-mi))的乘积(即s1*exp(m-mi))进行加和,以作为当前第一中间张量对应的s向量。
在一些实施例中,第二算子还根据前一个第一中间张量所对应的第四中间张量与第三中间张量的乘积,确定第五中间张量。第二算子确定第五中间张量可以参照以下公式(11)实现:
Vi' = Vi * exp(m - mi) (11)
其中,exp(m-mi)为第三中间张量,Vi表征第四中间张量,Vi'表征第五中间张量。
处理器核的第三算子将第二中间张量与对应的第三组块进行矩阵乘操作,以便得到第六中间张量。第三算子例如为矩阵乘(MMA)算子。第三算子确定第六中间张量的方式例如可以参照以下公式(12)实现:
QK'V=QK'*Vx(12)
其中,QK'V表征第六中间张量,QK'表征第二中间张量,Vx表征值张量V中的对应第三组块。
参照图6,与第一个第一中间张量(例如子矩阵QK1)对应的第六中间张量例如为子矩阵QK'V1,与第二个第一中间张量(例如子矩阵QK2)对应的第六中间张量例如为子矩阵QK'V2,与第三个第一中间张量(例如子矩阵QK3)对应的第六中间张量例如为子矩阵QK'V3,与第四个第一中间张量(例如子矩阵QK4)对应的第六中间张量例如为子矩阵QK'V4。
处理器核的第四算子根据第五中间张量与第六中间张量的和,确定当前第一中间张量对应的第四中间张量。第四算子例如为加法(ADD)算子。第四算子确定当前第一中间张量对应的第四中间张量的方式例如参照以下公式(13)实现:
Vi=Vi'+QK'V(13)
其中,Vi表征第四中间张量,Vi'表征第五中间张量,QK'V表征第六中间张量。
值得说明的是,在确定多个第一中间张量中的最后一个第一中间张量对应的第四中间张量之后,处理器核的第五算子根据第四中间张量与更新后的s向量的商确定softmax运算的结果。第五算子例如为除法(DIV)算子。第五算子确定softmax运算的结果的方式可以参照以下公式(14)实现:
Softmax=Vi/s(14)
其中,Softmax表征softmax运算的结果,Vi表征第四中间张量,s表征最后一个第一中间张量对应的s向量。
也即,在处理器核spc0针对查询张量Q的第一个第一子张量的第一个第一组块(例如子矩阵Q1)完成“第一层循环”后,第五算子根据此时所得到的第四中间张量Vi以及s向量确定softmax运算的结果。该softmax运算的结果可以作为局部注意力运算结果。
值得说明的是,第三算子(MMA算子)、第四算子(ADD算子)以及第五算子(DIV算子)之间可以适用寄存器同步以便进行流水线操作,提高数据吞吐率、提高运算效率。
然后,处理器核spc0针对查询张量Q的第一个第一子张量的第二个第一组块执行以上操作,以便得到与查询张量Q的第一个第一子张量的第二个第一组块对应的局部注意力运算结果。以此类推,处理器核spc0遍历第一个第一子张量的所有第一组块,即完成“第二层循环”操作。
然后,处理器核spc0针对查询张量Q的第二维度(即批量大小所对应的维度),针对查询张量Q的第一个第一子张量执行以上“第一层循环”操作以及“第二层循环”操作,则可完成“第三层循环”操作。
类似地,处理器核spc1针对查询张量Q的第二个第一子张量执行上述“第一层循环”操作、“第二层循环”操作以及“第三层循环”操作;处理器核spc2针对查询张量Q的第三个第一子张量执行上述“第一层循环”操作、“第二层循环”操作以及“第三层循环”操作……具体不再赘述。
值得说明的是,根据以上操作所得到的全部局部注意力运算结果,可以形成整体注意力运算结果。
值得说明的是,在一些实施例中,结合处理器所具备的共享存储器的大小以及第二算子所涉及的关于softmax的运算所需占用的寄存器的数量,例如可以将查询张量Q的第一组块所对应的粒度(例如以Q_chunk表征)配置为dedicate_register_size/w_block_size/data_element_size,其中,data_element_size表征数据元素尺寸,w_block_size表征硬件(例如处理器)对matrix tensor在w维度(例如宽度维度)上的对齐粒度要求,dedicate_register_size表征分配给s向量以及前一个最大张量m,以便进行更新操作的寄存器空间的大小。例如,分配给用于对前一个最大张量m以及s向量进行更新的寄存器空间为dedicate_register_size,根据处理器核的列块(col block)对齐粒度,可以计算得到第一组块所对应的粒度。
例如,可以将键张量K的第二组块的粒度,以及值张量V的第三组块的粒度(例如以KV_chunk表征)配置为input_register_size/h_block_size//data_element_size。其中,input_register_size表征用于第二算子加载输入数据的寄存器空间的大小,h_block_size表征硬件对matrix tensor在h维度(例如高度维度)上的对齐粒度要求。例如,分配给第二算子所涉及的关于softmax的运算的按行(row)方向加载数据的寄存器空间的大小为input_register_size,根据处理器核的行块(row block)对齐粒度,可以计算的到键张量K的第二组块的粒度,以及值张量V的第三组块的粒度。并且,对于此情况下的查询张量Q的第一组块所对应的粒度、键张量K的第二组块的粒度,以及值张量V的第三组块的粒度,可以保证需要存储至共享存储器的张量的大小不大于共享存储器的大小。同时,对于需要分配共享存储器的第一中间张量、掩码操作后的第一中间张量与第二中间张量,可以复用相同的共享存储器空间。
应当理解,dedicate_register_size+input_register_size<size1,其中,size1表征寄存器堆(register file)的大小。
并且,Q_chunk*KV_chunk*data_element_size<=size2。其中,size2表征共享存储器的大小。
而寄存器堆的大小和共享存储器的大小由硬件规格(例如每个处理器核内部的寄存器堆的大小和共享存储器的大小)确定。其可以通过以下公式(8)-(18)所组成的约束方程组进行约束:
Q_chunk=dedicate_register_size/w_block_size/data_element_si ze(15)
KV_chunk=input_register_size/h_block_size/data_element_size(16)
Q_chunk*KV_chunk*data_element_size<=size2(17)
dedicate_register_size+input_register_size<size1(18)
例如,查询张量Q、键张量K和值张量V均为形状为[20,4096,64]的张量。则查询张量Q所对的第二数值(即batch size*head num)为20;查询张量Q所对的第一数值(即sequence length/block size)为64(即4096/64)。
因为第二数值20小于第一数值64,因此针对第一维度将查询张量Q进行划分,以便分配给多个处理器核分别运算。例如,处理器核的数量(例如以spc num表征)为16,则分别分配给每个处理器核以便用于运算的第一子张量的形状为[20,256,64],键张量K的形状为[20,4096,64],值张量V的形状为[20,4096,64]。
在一些实施例中,查询张量Q的第一组块所对应的粒度Q_chunk=dedicate_register_size/w_block_size/data_element_size。例如,dedicate_register_size为128*1024,w_block_size为64,data_element_size为2,则Q_chunk为1024。
在一些实施例中,键张量K的第二组块的粒度,以及值张量V的第三组块的粒度KV_chunk=input_register_size/h_block_size/data_element_size。例如,input_register_size为128*1024,h_block_size为32,data_element_size为2,则KV_chunk为2048。
图9示出了本公开的实施例的用于进行注意力运算的方法100与现有方案的性能对比表。其中,“性能倍数”为现有方案的运行时间与本公开的方法的运行时间的比值。能够看出,本公开的方法的性能相比于现有方案有显著的提升。
在一些实施例中,以上所采用的多种算子可以采用融合算子实现。例如,第一算子(MMA算子)采用一个融合算子实现,或者,第一算子(MMA算子)以及用于进行掩码操作的算子采用一个融合算子实现。第二算子采用一个融合算子实现。第三算子(MMA算子)、第四算子(ADD算子)以及第五算子(DIV算子)采用一个融合算子实现。
图10示出了可以用来实施本公开内容的实施例的方法的示例电子设备700的示意性框图。如图所示,电子设备700包括中央处理单元(即,CPU 701),其可以根据存储在只读存储器(即,ROM 702)中的计算机程序指令或者从存储单元708加载到随机存取存储器(即,RAM 703)中的计算机程序指令,来执行各种适当的动作和处理。在RAM 703中,还可存储电子设备700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出接口(即,I/O接口705)也连接至总线704。
电子设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标、麦克风等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,例如方法1100、方法100、方法500,可由CPU 701执行。例如,在一些实施例中,方法1100、方法100、方法500可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到电子设备700上。当计算机程序被加载到RAM 703并由CPU 701执行时,可以执行上文描述的方法1100、方法100、方法500的一个或多个动作。
本公开涉及方法、电子设备、计算机可读存储介质和/或计算机程序产品。计算机程序产品可以包括用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘电子设备。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
以上仅为本公开的可选实施例,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本公开的保护范围之内。
Claims (13)
1.一种用于进行注意力运算的方法,其特征在于,包括:
经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量;
经由第二算子,基于第一张量,确定s向量、第二张量以及第三张量,其中,第二张量为经由关于第一张量的指数运算得到的;以及
经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果。
2.如权利要求1所述的方法,其特征在于,第三算子包括第六子算子,经由第二算子,基于第一张量确定s向量、第二张量以及第三张量包括:
基于第一张量,确定第二张量;
基于第二张量,确定s向量;以及
基于第一张量以及来自第三算子的第四张量,确定第三张量,其中,第四张量为经由第三算子的第六子算子计算得到的,第六子算子包括加法子算子。
3.如权利要求2所述的方法,其特征在于,第二算子包括第一子算子、第二子算子、第三子算子以及第四子算子;第一张量包括关于第一目标维度的多个第一子张量;
基于第一张量,确定第二张量包括:
经由第一子算子,确定当前最大第一子张量,当前最大第一子张量为当前第一子张量以及当前第一子张量之前的所有第一子张量中的最大的第一子张量;以及
经由第二子算子,针对当前第一子张量与当前最大第一子张量之间的差值进行指数运算,以确定当前第二张量;
基于第二张量,确定s向量包括:
经由第三子算子,确定当前第二张量以及当前第二张量之前的所有第二张量的第一累加和,确定前一个第一子张量对应的s向量与第一中间张量的第一乘积,基于所述第一累加和与所述第一乘积确定当前第一子张量对应的s向量,第一中间张量为针对前一个最大第一子张量与当前最大第一子张量的差值进行指数运算得到的;
基于第一张量以及来自第三算子的第四张量,确定第三张量包括:
经由第四子算子,基于第一中间张量以及来自第三算子的当前第四张量,确定当前第三张量,当前第三张量为当前第一子张量所对应的第三张量。
4.如权利要求3所述的方法,其特征在于,第三算子还包括第五子算子、第七子算子,经由第三算子,基于s向量、第二张量以及第三张量,确定注意力结果包括:
经由第五子算子,确定第二张量与值矩阵的矩阵乘结果,以便作为当前第二中间张量;
经由第六子算子,确定当前第二中间张量与前一个第三张量的和,以便作为当前第四张量;以及
经由第七子算子,根据最后一个第一子张量对应的第三张量以及s向量的商,确定注意力结果。
5.如权利要求4所述的方法,其特征在于,第一算子包括第八子算子、第九子算子;经由第一算子,确定查询张量与键张量的矩阵乘结果,以便作为第一张量包括:
经由第八子算子,确定查询张量与键张量的矩阵乘结果;以及
经由第九子算子,对矩阵乘结果进行掩码运算,以便将掩码运算后的矩阵乘结果作为第一张量。
6.如权利要求1所述的方法,其特征在于,第一算子、第二算子以及第三算子之间经由共享存储器传输数据。
7.如权利要求5所述的方法,其特征在于,第一子算子、第二子算子、第三子算子以及第四子算子之间经由寄存器传输数据。
8.如权利要求5所述的方法,其特征在于,第一算子、第二算子以及第三算子均为融合算子,第一算子基于张量核以及矢量核实现,第二算子基于矢量核实现,第三算子基于张量核以及矢量核实现。
9.如权利要求1所述的方法,其特征在于,还包括:
确定查询张量的关于序列长度的第一维度的第一数值、以及关于批量大小的第二维度的第二数值;
根据第一数值以及第二数值,确定目标维度;以及
基于目标维度,将查询张量划分为多个子查询张量,以便分别针对多个子查询张量中的一个子查询张量进行注意力计算。
10.如权利要求9所述的方法,其特征在于,分别针对多个子查询张量中的一个子查询张量进行注意力计算包括:
根据处理器核的共享存储器的大小,针对子查询张量的目标划分维度将子查询张量划分为多个第一组块;
针对键张量的目标划分维度,将键张量划分为多个第二组块;
针对值张量的目标划分维度将值张量划分为多个第三组块;以及
基于多个第一组块、多个第二组块以及多个第三组块进行注意力计算。
11.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至10中任一项所述的方法。
12.一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被机器执行时实现根据权利要求1至10中任一项所述的方法。
13.一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行时使机器执行根据权利要求1至10任一项所述的方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410155853.6A CN117827463A (zh) | 2024-02-02 | 2024-02-02 | 用于进行注意力运算的方法、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410155853.6A CN117827463A (zh) | 2024-02-02 | 2024-02-02 | 用于进行注意力运算的方法、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117827463A true CN117827463A (zh) | 2024-04-05 |
Family
ID=90509934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410155853.6A Pending CN117827463A (zh) | 2024-02-02 | 2024-02-02 | 用于进行注意力运算的方法、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117827463A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118132156A (zh) * | 2024-05-07 | 2024-06-04 | 北京壁仞科技开发有限公司 | 一种算子执行方法、设备、存储介质及程序产品 |
-
2024
- 2024-02-02 CN CN202410155853.6A patent/CN117827463A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118132156A (zh) * | 2024-05-07 | 2024-06-04 | 北京壁仞科技开发有限公司 | 一种算子执行方法、设备、存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117827463A (zh) | 用于进行注意力运算的方法、设备和存储介质 | |
US11442779B2 (en) | Method, device and computer program product for determining resource amount for dedicated processing resources | |
CN113436620B (zh) | 语音识别模型的训练方法、语音识别方法、装置、介质及设备 | |
CN112199707A (zh) | 一种同态加密中的数据处理方法、装置以及设备 | |
EP3769208B1 (en) | Stochastic rounding logic | |
CN112818387A (zh) | 模型参数调整的方法、设备、存储介质及程序产品 | |
JPWO2015087643A1 (ja) | 誤り訂正復号装置 | |
CN117435855B (zh) | 用于进行卷积运算的方法、电子设备和存储介质 | |
CN110163255B (zh) | 一种基于密度峰值的数据流聚类方法及装置 | |
CN111158907B (zh) | 数据处理方法及装置、电子设备和存储介质 | |
CN114020469A (zh) | 基于边缘节点的多任务学习方法、装置、介质与设备 | |
CN117707791B (zh) | 用于进行注意力运算的方法、设备和存储介质 | |
US10922001B2 (en) | Vector-based storage management | |
CN114817845B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN115759209A (zh) | 神经网络模型的量化方法、装置、电子设备及介质 | |
CN115346099A (zh) | 基于加速器芯片的图像卷积方法、芯片、设备及介质 | |
CN116340574A (zh) | 用于管理知识图谱的方法、设备和程序产品 | |
CN114546329B (zh) | 用于实现数据奇偶重排的方法、设备和介质 | |
KR20210086233A (ko) | 완화된 프루닝을 통한 행렬 데이터 처리 방법 및 그 장치 | |
CN115965070B (zh) | 计算图处理方法、装置、设备、存储介质以及程序产品 | |
CN111752532B (zh) | 一种高精度实现32位整数除法的方法、系统及装置 | |
CN116881090B (zh) | 计算装置以及控制计算装置中的计算核的能耗的方法 | |
CN117934323B (zh) | 图像生成方法、装置、电子设备及存储介质 | |
CN116089786A (zh) | 用于三角矩阵求逆的方法、设备和介质 | |
US20230401097A1 (en) | Method, electronic device, and computer program product for task allocation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |