1.本披露一般地涉及数据处理领域。更具体地,本披露涉及一种数据处理装置、执行神经网络模型的方法、芯片和板卡。
背景技术:2.目前,变换器(transformer)模型已经广泛应用于自然语言处理(nlp)领域,例如机器翻译、问答系统、文本摘要和语音识别等等。transformer模型采用了编码器-解码器架构,并且编码器和解码器中都包括注意力机制。
3.transformer模型在推理过程中,解码器会缓存每一时间步的键(k,key)信息和值(v,value)信息。解码器采用集束搜索(beam search)方式进行解码,因而每一时间步会选择出若干最佳集束,作为下一时间步的解码输入。此时,会根据选择出的最佳集束,对缓存的键信息和值信息进行重排,以使得在下一时间步的解码时,读取对应的键信息和值信息进行计算。
4.上述重排过程需要读出k/v,根据最佳集束重排后再写入k/v。然而,在有些情况下,k和v的规模比较大,因此上述重排过程带来的io瓶颈非常明显。因此,期望提供一种改进方案,能至少减缓io瓶颈问题。
技术实现要素:5.为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了分块重排方案,从而降低每次重排产生的io量,避免io瓶颈问题。
6.在第一方面中,本披露提供了一种数据处理装置,包括:处理单元,配置用于运行神经网络模型,所述神经网络模型包括基于注意力机制的解码器,并且所述解码器采用集束搜索方式解码;以及第一存储单元,配置有n个存储块,n》1,每个存储块分别与若干个连续时间步关联,以缓存在关联的时间步期间所述解码器生成的中间变量;其中所述处理单元进一步配置用于:根据当前时间步选择出的所述解码器的b个候选输出序列,b》1,将当前时间步的关联存储块内的、与所述b个候选输出序列对应的b组中间变量进行重排;以及基于所述b个候选输出序列,从所述存储单元的对应存储块内读取预定时间步范围的b组中间变量以执行下一时间步的解码处理。
7.在第二方面中,本披露提供了一种芯片,其包括前述第一方面的任一实施例的数据处理装置。
8.在第三方面中,本披露提供了一种板卡,其包括前述第二方面的任一实施例的芯片。
9.在第四方面中,本披露提供了一种执行神经网络模型的方法,所述神经网络模型包括基于注意力机制的解码器,并且所述解码器采用集束搜索方式解码,所述方法包括:将存储单元划分为n个存储块,n》1,每个存储块分别与若干个连续时间步关联,以缓存在关联的时间步期间所述解码器生成的中间变量;从所述解码器在当前时间步的解码结果中选择
b个候选输出序列,b》1;根据所述b个候选输出序列,将当前时间步的关联存储块内的、与所述b个候选输出序列对应的b组中间变量进行重排;以及基于所述b个候选输出序列,从所述存储单元的对应存储块内读取预定时间步范围的b组中间变量以执行下一时间步的解码处理。
10.通过如上所提供的数据处理装置、芯片、板卡以及执行神经网络模型的方法,本披露的方案通过将需重排的中间变量分块进行存储,并在块内进行重排,可以减少重排导致的io量。进一步地,每次重排时,在存储块原位进行重排,因而无需配置额外的存储空间来支持重排,降低了内存需求。此外,本披露实施例提供的方法通用性强,对硬件没有特殊要求,可以适用于任何硬件系统。
附图说明
11.通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
12.图1是示出本公开实施例的板卡的结构图;
13.图2是示出本公开实施例的集成电路装置的结构图;
14.图3是示出本公开实施例的单核或多核计算装置的处理器核内部结构示意图;
15.图4示意性示出了transformer模型的示例性架构;
16.图5示意性示出了集束搜索的概念;
17.图6示意性示出了已知的集束搜索的重排策略;
18.图7示意性示出了本披露实施例的重排处理;
19.图8示意性示出了本披露实施例的数据处理装置的示意性结构图;以及
20.图9示意性示出了本披露实施例的执行神经网络模型的方法的示例性流程图。
具体实施方式
21.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
22.应当理解,本披露的权利要求、说明书及附图中可能使用的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
23.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
24.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释
为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0025]
下面结合附图来详细描述本公开的具体实施方式。
[0026]
图1示出本公开实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(system on chip,soc),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
[0027]
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如pcie接口等。
[0028]
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(micro controller unit,mcu)。
[0029]
图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和dram 204。
[0030]
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
[0031]
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
[0032]
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本公开的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形
成异构多核结构。
[0033]
dram 204用以存储待处理的数据,为ddr内存,大小通常为16g或更大,用于保存计算装置201和/或处理装置203的数据。
[0034]
图3示出了计算装置201为单核或多核装置时处理器核的内部结构示意图。计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
[0035]
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,ifu)311及指令译码单元(instruction decode unit,idu)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
[0036]
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。
[0037]
存储模块33用来存储或搬运相关数据,包括神经元存储单元(neuron ram,nram)331、参数存储单元(weight ram,wram)332、直接内存访问模块(direct memory access,dma)333。nram 331用以存储输入神经元、输出神经元和计算后的中间结果;wram 332则用以存储深度学习网络的卷积核,即权值;dma 333通过总线34连接dram 204,负责计算装置301与dram 204间的数据搬运。
[0038]
本披露的实施例基于前述硬件环境,提供一种数据处理方案,其中在对诸如transformer模型一类的神经网络模型应用集束搜索(beam search)解码方式时,对需要基于最优候选集束重排的中间变量进行分块缓存和重排,从而降低重排的io量,减小整体处理时间,优化处理性能。
[0039]
图4示意性示出了transformer模型的示例性架构。
[0040]
如图所示,transformer模型采用了编码器-解码器架构,图4的左半部分用nx框出来的,代表一层编码器410,图4的右半部分用nx框出来的,则代表一层解码器420。在原始的transformer模型中,nx=6,也即有6层编码器和6层解码器。在一些基于transformer模型变形的模型中,编码器和解码器可以有不同的层数。transformer模型在现有技术中已经广泛应用,为了简便起见,本文在此仅重点描述与本披露实施例相关联的部分。
[0041]
每层解码器420包括三个主要部分:多头自注意力机制421、多头上下文注意力机制422和前馈网络423。
[0042]
多头自注意力机制421接收的是上一层解码器的输出。对于第一层解码器,其输入仅包含当前位置之前的词语信息,这样设计的目的是解码器是按顺序解码的,其当前输出只能基于已输出的部分。也就是对于一个序列,在时间步t的时刻,解码的输出应当只能依赖于t时刻之前的输出,而不能依赖t之后的输出。例如,在应用于机器翻译的transformer模型中,解码器依次会根据当前翻译过的单词1~i翻译下一个单词i+1。
[0043]
在多头自注意力机制421中,使用张量来计算自注意力。在自注意力计算中,涉及三个张量或中间变量:查询q(query)张量、键k(key)张量和值v(value)张量。q、k、v是通过对自注意力机制421的输入进行线性变换得到的。
[0044]
最后一层解码器420的输出被输入到一个线性层430中,转化为一个超长张量(例
如词典长度),再输入到softmax层440中转化为概率,最后运用适当策略选择适合的输出。
[0045]
在上述解码过程中,模型的输出是一个时间步一个时间步依次获得的,而且前面时间步的结果还会影响后面时间步的结果。也就是说,每一个时间步,模型给出的都是基于历史生成结果的条件概率。在诸如机器翻译的文本生成任务中,每一个时间步可能的输出种类称为词典大小(vocabulary size,记为v),进行t步随机的生成可能获得的结果总共有t*v种。以中文文本生成为例,v的值大约是5000-6000,即常用汉字的个数。
[0046]
常用的解码策略可以包括穷举搜索、贪心搜索、集束搜索等。在上文示例的如此大的基数下,采用穷举搜索遍历整个生成空间是不现实的。贪心搜索则是每一个时间步都取出一个条件概率最大的输出,再将从开始到当前步的结果作为输入去获得下一个时间步的输出,直到模型给出生成结束的标志。很明显,由于贪心搜索丢弃了绝大多数的可能解,这种关注当下的策略无法保证最终得到的序列概率是最优的。
[0047]
集束搜索是对贪心搜索的一个改进,其在每一个时间步,不再只保留当前概率最大的1个输出,而是保留多个输出,保留的输出可以称为最佳集束(best beam),其个数可以称为集束宽度b、束宽或集束尺寸。可以理解,当b=1时集束搜索就退化成了贪心搜索。
[0048]
图5示意性示出了集束搜索(beam search)的概念。在图5的示例中,假设每个时间步有abcde共5种可能的输出,即词典大小为5,每个时间步都会保留到当前时间步为止条件概率最优的2个序列,即,图中示例的b=2。
[0049]
如图所示,在第一时间步,选取当前时间步条件概率最大的2个词,在此示例中a和c是最优的两个,因此得到了两个结果[a]、[c],其他三个就被抛弃了。
[0050]
在第二时间步,基于这两个结果继续进行生成,在a这个分支可以得到5个候选:[aa]、[ab]、[ac]、[ad]、[ae],c也同理得到5个,此时从这10选择并保留最优的两个,即图中的[ab]和[ce]。
[0051]
第三时间步同理,也会从新的10个候选结果中再保留最好的两个,最后得到了[abd]、[ced]两个结果。
[0052]
以上描述了集束搜索的基本概念。集束搜索可以作为transformer模型的解码器的解码策略。从前面结合图4的描述可知,在基于注意力机制的解码器中,下一时间步的解码会基于之前时间步已输出的解码结果。更具体地,在解码器的自注意力机制中会使用到当前时间步之前计算的中间变量,例如k张量和v张量。因此,为了加速处理,可以通过缓存对应当前时间步之前的解码结果的中间变量,来减少重复计算,提升处理效率。
[0053]
为了能够快速地获取参与下一时间步解码的中间变量,现有的集束搜索操作会根据当前时间步选择出的最佳集束,对缓存的中间变量的信息进行重排。通过重排,将与这些最佳集束对应的中间变量(也即产生这些最佳集束的中间变量)排列在内存前面,以便在执行下一时间步的解码处理时进行读取。
[0054]
图6示意性示出了已知的集束搜索的重排策略。在图6的示例中,不防以键k张量为例进行描述。在此示例中,假设集束宽度b=4,当前时间步确定的最佳集束best_beam=[1,0,0,2],也即当前的4个最佳集束按顺序分别来自在先的集束1、集束0、集束0和集束2。
[0055]
如图所示,在存储单元610中需要准备两块缓存611和612,分别用于缓存输入的k张量和输出以供解码使用的k张量。这两块缓存交替使用,以在每个时间步基于选择出的最佳集束,对k张量进行重新排列。
[0056]
图中示出了相应内存操作。具体地,如箭头601所示,在重排时,需要从输入缓存块611中读出所缓存的k张量。接着,在处理单元620中执行重排621,也即根据最佳集束的索引指示,将对应的k张量重新排列,以与最佳集束相对应。重新排列后的k张量再次写入到输出缓存块612中,如箭头602所示。继而,在下一步的解码处理时,从输出缓存块612中读取出对应的k张量,进行相应的自注意力计算622,如箭头603所示。
[0057]
图6还示意性示出了重排前后输入缓存块611和输出缓存块612中的信息。如图6所示,重排前,输入缓存块611中顺序存储有对应上一时间步的4个最佳集束的k张量,其中beam0中存储有对应第一个最佳集束的k张量序列,beam1中存储有对应第二个最佳集束的k张量序列,依次类推。当前时间步的最佳集束的索引best_beam=[1,0,0,2],表示当前时间的第一个最佳集束beam0来自上一时间步的beam1,当前时间的第二个最佳集束beam1来自上一时间步的beam0,当前时间的第三个最佳集束beam2同样来自上一时间步的beam0,当前时间的第四个最佳集束beam3来自上一时间步的beam2。因此,如图中箭头所示,在输出缓存块612的beam0位置中写入上一时间步的beam1,在内存612的beam1位置中写入上一时间步的beam0,在内存612的beam2位置中写入上一时间步的beam0,以及在内存612的beam3位置中写入上一时间步的beam2。
[0058]
k张量是一个高维度数据。在一些情况下,k张量的维度包括批尺寸(batch_size)、集束尺寸(b,beam_size)、最大序列长度(max_seq_len)、头数量(head_num)、头尺寸(head_size)等。k张量在内存中可以按照不同维度顺序排列存储。例如,一种示例性排列顺序可以是:
[0059]
[batch_size,beam_size,head_num,max_seq_len,head_size]。
[0060]
另一种示例性排列顺序可以是:
[0061]
[batch_size,beam_size,max_seq_len,head_num,head_size]。
[0062]
图6进一步示意性示出了k张量在内存中的存储以及基于当前时间步的最佳集束来更新对应的k值。该示例例如按照上述第一种排列顺序存储。基于当前时间步选择出的最佳集束,更新当前令牌(token)位置处的k值,以对应于产生该最佳集束的令牌序列的k值。
[0063]
从图6的描述可知,上述操作过程总计会对k张量的缓存进行两次读取和一次写入,其中重排涉及一次读取和一次写入,解码涉及一次读取。在有些情况下,当k张量的批尺寸(batch_size)、集束尺寸(b,beam_size)、最大序列长度(max_seq_len)等维度比较大时,上述操作过程产生的io量非常大,io瓶颈十分明显。以batch_size=16,beam_size=4,head_num=16,max_seq_len=120,head_size=64为例,transformer模型中解码器有6层,k张量和v张量存储为float32类型,总字节数为360m,这么大的数量量,硬件至少需要若干毫秒才能完成。因此,迫切期望提供一种改进方案,其能减小处理时间,克服上述io瓶颈问题。
[0064]
发明人注意到上述重排操作的目的实质上是为了解码器的自注意力计算中能够获取正确的集束(也即前一时间步选出的最佳集束)以及获取正确的token序列(也即产生最佳集束所对应的token序列),因此如果不重排或者部分重排就能达到目的,则可以避免或减小重排操作所导致的一次读取和一次写入的时间。
[0065]
进一步地,如果完全不进行重排,则需要指针或索引来指示与最佳集束对应的令牌序列(或令牌序列的k/v值)。然而,在根据指针或索引读取这些k/v值时,由于k/v缓存在
beam_size和max_seq_len维度上是不连续的,因此需要通过循环遍历来加载对应的数据。在机器处理中,循环发射指令会造成指令延迟时间超出读取缓存的时间,大大降低了存储单元io的带宽。
[0066]
鉴于上述因素,在本披露的实施例中,提出了一种局部重排方案,其减少了每次重排所涉及的数据量,也即减小了重排读取/写入的io量,同时又降低了加载数据的循环次数,达到整体性能最优的效果。
[0067]
图7示意性示出了本披露实施例的重排处理策略。
[0068]
在本披露的实施例中,考虑到每次重排所涉及的数据量比较大,可以将这些数据分块进行存储,仅在块内的范围进行重排,从而可以减少重排的io量。
[0069]
如图所示,可以对要进行重排的中间变量(例如k/v张量)按照max_seq_len维度进行分块,例如平均划分为n块,每块对应一定数量(例如m=max_seq_len/n)的连续时间步期间的中间变量。图中粗线框701示出了第0个块,其对应第0~m-1个时间步的中间变量,随后的块可以依次类推。
[0070]
可以理解,每个块需要存储与最佳的b个集束对应的中间变量。图中示出了b=4的情况,也即每个块中会存储与beam0、beam1、beam2和beam3这四个最佳集束对应的中间变量。更具体地,在一个块内,与一个最佳集束对应的中间变量包括m个连续时间步期间生成的对应中间变量。例如,第0个块701的block_0_0缓存与beam0对应的第0~m-1个时间步的中间变量;第0个块701的block_1_0缓存与beam1对应的第0~m-1个时间步的中间变量;第0个块701的block_2_0缓存与beam2对应的第0~m-1个时间步的中间变量;第0个块701的block_3_0缓存与beam3对应的第0~m-1个时间步的中间变量。这些中间变量与相应的令牌对应,因此在图中以对应的令牌来表示。其他块也类似地缓存相应的数据。
[0071]
进一步地,块与块之间通过索引或指针进行链接,由此在进行后续的解码取数时,可以根据索引或指针跳至对应的块进行取数。由于块的数量通常不会太多,因此跳转次数也不会太多,从而可以降低加载数据的循环次数,缩短取数时间。图中以箭头示出了块与块之间的链接,通过这些链接可以构成一个块序列,其与当前时间步的最佳集束相对应。
[0072]
在一些实现中,块与块之间的这种链接关系可以使用链表来保存。在单链表中,每个节点存储当前值与下一个节点的指针,从而根据首个节点的地址即可索引全部内容。在本披露的一些实施例中,链表的每个节点存储指示最佳集束在块序列中上一块内对应的索引。例如,对于4个最佳集束的情况,假设链表的第4个节点中存储的4个最佳集束的索引为[1,2,0,1]第3个节点中存储的4个最佳集束的索引为[1,0,2,0],第2个节点中存储的索引为[3,2,1,1],第1个节点中存储的索引为[0,1,1,2],则根据链表的最后一个节点(例如,当前示例为第4个节点),可以依次获取与该最佳集束对应的所有中间变量。具体地,根据第4个节点中的第一个索引值(1),当前的最佳集束beam0来自于上一块中的beam1;根据第3个节点中与beam1对应的索引值,也即第2个索引值(0),上一块中的beam0又来自上上一块中的beam0;根据第2个节点中与beam0对应的索引值,也即第1个索引值(3),上上一块中的beam0来自更往上一块的beam3;根据第1个节点中与beam3对应的索引值(2),继续链接再往上一块的beam2,从而得到全部的对应数据。图7中用箭头示出了上述链接过程。
[0073]
以上结合图7描述了本披露实施例的分块重排的处理方案。从上述描述可知,通过分块存储,并且每次仅对关联块内的范围进行重排,可以减少重排的io量。进一步地,通过
保存块之间的链接关系,可以将各个块串联起来,得到对应整个最佳集束的数据。由于分块的数量通常不会太多,因此在解码取数时的跳转次数也不会太多,也即降低了加载数据的循环次数,缩短取数时间。下面结合附图更详细地描述本披露各实施例的方案。
[0074]
图8示意性示出了本披露实施例的数据处理装置的示例性结构框图。如图所示,数据处理装置800包括处理单元810和第一存储单元820。
[0075]
处理单元810可以执行各种任务,例如配置用于运行神经网络模型。在本披露的实施例中,神经网络模型包括基于注意力机制的解码器,例如transformer模型或基于transformer模型的其他模型。进一步地,解码器采用集束搜索方式进行解码。
[0076]
第一存储单元820可以配置有n个存储块,n》1,每个存储块分别与若干个连续时间步关联,以缓存在关联的时间步期间上述处理单元810运行解码器而生成的中间变量。
[0077]
在一些实现中,第一存储单元820可以平均划分为n个存储块,每个存储块与m个连续时间步关联,m例如可以等于1/n个解码器支持的最大序列长度。例如,在最大序列长度max_seq_len=120,n=6的示例中,m=120/6=20,也即每个存储块缓存20个连续的时间步期间解码器生成的中间变量。在此示例中,第一存储块block0可以缓存第0~19个时间步的中间变量,第二存储块block1可以缓存第20~39个时间步的中间变量,以此类推,第六个存储块block5可以缓存第100~119个时间步的中间变量。
[0078]
在本披露的一些实施例中,在运行神经网络模型期间,处理单元810可以配置成按如下来实施本披露的局部重排方案:根据当前时间步选择出的解码器的b个候选输出序列(b是集束宽度或集束尺寸beam_size,b》1),将当前时间步的关联存储块内的、与这b个候选输出序列对应的b组中间变量进行重排;以及基于这b个候选输出序列,从第一存储单元820的对应存储块内读取预定时间步范围的b组中间变量以执行下一时间步的解码处理。
[0079]
继续前面的示例以及b=4的情况。假设当前时间步为第38个时间步,当前时间步选择的4个候选输出序列(或称4个最佳集束)的索引为best_beam=[1,0,0,2],也即当前的最佳集束beam0来自于前一时间步的beam1,当前的最佳集束beam1来自于前一时间步的beam0,当前的最佳集束beam2也来自于前一时间步的beam0,当前的最佳集束beam3来自于前一时间步的beam2。与当前时间步关联的存储块为block1,并且block1中的对应前面第20-36个时间步的中间变量已经根据第37个时间步的最佳集束进行了重排。此时,响应于第38个时间步中选择出的4个最佳集束,对block1中的第20-37个时间步的中间变量进行重排。
[0080]
在一些实施例中,处理单元810可以配置成在关联存储块内原位执行上述重排操作。具体地,处理单元可以从关联存储块内读出需要重排的中间变量。例如,在上述示例中,处理单元读出第20-37个时间步的中间变量。接着,处理单元可以根据最佳集束的索引best_beam=[1,0,0,2],来重新排列这18个时间步的中间变量。具体地,将原beam1的数据调至新beam0位置,原beam0的数据调至新beam1的位置,原beam0的数据还调至新beam2的位置,以及原beam2的数据调至新beam3的位置。由于需要重排操作的数据量大大减少,因此可以原位执行重排操作;而原位重排又可以节省缓存资源,无需额外的缓存空间来保存重排后的数据。
[0081]
当要执行下一时间步的解码处理时,可以基于这4个最佳集束,从第一存储单元820的对应存储块内读取预定时间步范围的4组中间变量。
[0082]
进一步地,在本披露的一些实施例中,数据处理装置800还包括第二存储单元830,其可以配置用于缓存指示存储块序列的链接信息,其中存储块序列包含产生当前所选择的候选输出序列的中间变量。
[0083]
在一些实现中,上述链接信息可以以链表形式存储。具体地,链表中每个节点存储指示候选输出序列在存储块序列中上一存储块内对应的索引。
[0084]
处理单元810可以根据解码的进展,维护链表中的信息。由于链表保存的是存储块之间的链接关系,因此只需要在处理到存储块的边界处时,相应地记录链接信息。在一些实施例中,处理单元可以响应于当前时间步为关联存储块所对应的首个时间步,基于当前时间步选择出的候选输出序列,确定上一存储块内对应的索引;以及将该索引存储在链表的对应节点中。
[0085]
例如,假设当前时间步为第40个时间步,当前时间步选择的4个候选输出序列(或称4个最佳集束)的索引为best_beam=[3,2,1,1],也即当前的最佳集束beam0来自于前一时间步(第39个时间步)的beam3,当前的最佳集束beam1来自于前一时间步的beam2,当前的最佳集束beam2来自于前一时间步的beam1,当前的最佳集束beam3也来自于前一时间步的beam1。与当前时间步关联的存储块为block2,并且当前时间步是block2中的对应连续时间步(40~59)中的首个时间步。此时,block2中尚未缓存中间变量,因此无需进行重排,但是前一存储块block1中的20个连续时间步的中间变量均已依据这20个连续时间步中每步的最佳集束依次进行了排序,并且不再进行变化。此时,需要相应的记录当前存储块block2与前一存储块block1之间的链接关系,该链接关系即为上述索引best_beam=[3,2,1,1]。具体地,在链表的第2个节点中保存上述索引best_beam=[3,2,1,1]。
[0086]
相应地,可以在block2中更新与其首个时间步(也即第40个时间步)的最佳集束对应的中间变量。
[0087]
随后,在进行下一时间步的解码处理时,可以根据链表各节点存储的索引,依次从对应存储块内读取对应的中间变量。例如,继续上述示例,在第41个时间步时,可以首先从当前存储块block2内读取分别对应b个最佳集束的b组中间变量(在此示例中第40个时间步的中间变量)。接着,根据链表第2个节点中的索引[3,2,1,1],从前一存储块block1内读取对应位置的数据。例如,对于当前的beam0,读取block1中的beam3,对于当前的beam1,读取block1中的beam2,依次类推。再接着,根据链表第1个节点中的索引,从更前一存储块block0内读取对应的数据。参考前面结合图7示例性描述的链表各节点的内容及读取方式,可以更好地理解本方面的技术实现。
[0088]
可选地或附加地,在一些实施例中,处理单元810可以进一步配置用于:响应于时间步数超过解码器支持的最大序列长度s,返回到首个存储块中缓存在关联的时间步期间解码器生成的中间变量;以及读取最近s个时间步的b组中间变量以用于执行下一时间步的解码处理。
[0089]
在这些实施例中,当已解码的时间步超过最大序列长度s但是任务仍未结束时,可以支持继续解码。此时,由于序列长度较大,最开始的信息(例如第0个单词)与后面的信息(例如第s+个单词)的关联可能不太大,因此可以截断已解码序列,例如只使用最近的s个时间步构成的解码序列,丢弃前面的解码信息。因此,在这些实施例中可以循环使用上述存储块。具体地,当时间步超出了最后一个存储块关联的末位时间步时,可以重新回到第一个存
储块并覆盖其首个时间步的数据。可以使用一个标记位来记录这种“回头式”的存储。
[0090]
此外,从前面的描述可知,上述分块局部重排的处理方式的实际处理时间与数据的分块或存储区的分块数量密切相关。在本披露的一些实施例中,可以选择上述存储块的数量n,以使得最小化处理时间。从前面结合图6的分析可知,处理时间主要包括两部分:重排中间变量的时间,以及解码器读取中间变量的时间。本披露实施例通过选择分块数量n,使得这两部分的时间之和最小。
[0091]
通过分析上述处理时间的构成,存储块的分块数n可以基于如下一项或多项因素来确定:需缓存的中间变量的总数据量;存储单元的读带宽;存储单元的写带宽;以及指令延迟时间。
[0092]
假设中间变量(例如k/v张量)的总数据量为z字节,最大序列长度为s,n是分块数,读带宽为rb,写带宽为wb,指令延迟时间为d。由于仅在存储块内执行重排,因此重排的总字节数在0~z/n之间循环,也即根据每个存储块对应的时间步数变化,可以重排的io量可以取平均值为0.5*z/n。则重排中间变量花费的时间t1可以按如下计算:
[0093]
t1=1次读取时间+1次写入时间=0.5*z/n/rb+0.5*z/n/wb。
[0094]
解码器读取中间变量的时间t2可以按如下计算:
[0095]
t2=所有数据的读出时间+块间跳转时间=z/rb+n*d。
[0096]
总时间t=t1+t2=0.5*z/n/rb+0.5*z/n/wb+z/rb+n*d。
[0097]
为了平均划分各个块,可以增加约束条件s%n=0,也即最大序列长度能够被分块数n整除。
[0098]
从上述公式可以看出,n越大,则t1越小,但是t2越大。因此,可以存在一个最优的n,使得t1与t2之和最小。在前述s=120的示例中,基于上述原则确定的分块数n=6。
[0099]
通过如上所提供的数据处理装置,本披露的方案通过将需重排的中间变量分块进行存储,并在块内进行重排,可以减少重排导致的io量。进一步地,每次重排时,在存储块原位进行重排,因而无需配置额外的存储空间来支持重排,降低了内存需求。此外,本披露实施例提供的方法通用性强,对硬件没有特殊要求,可以适用于任何硬件系统。本披露实施例还提供了一种执行神经网络模型的方法。
[0100]
图9示意性示出了根据本披露实施例的执行神经网络模型的方法900的示例性流程图。该神经网络模型包括基于注意力机制的解码器,并且解码器采用集束搜索方式作为解码策略。
[0101]
如图所示,在步骤s910中,可以将存储单元划分为n个存储块,n》1,每个存储块分别与若干个连续时间步关联,以缓存在关联的时间步期间解码器生成的中间变量。此步骤可以预先执行,以配置相应的存储单元。
[0102]
接着,在步骤s920中,从解码器在当前时间步的解码结果中选择b个候选输出序列,b》1。此步骤也即集束搜索中选择b个最佳集束。
[0103]
接着,在步骤s930中,根据该b个候选输出序列,将当前时间步的关联存储块内的、与该b个候选输出序列对应的b组中间变量进行重排。
[0104]
在一些实施例中,上述重排操作在关联存储块内原位执行。
[0105]
最后,在步骤s940中,基于上述b个候选输出序列,从存储单元的对应存储块内读取预定时间步范围的b组中间变量以执行下一时间步的解码处理。
[0106]
附加地,在一些实施例中,方法900还包括缓存指示存储块序列的链接信息,该存储块序列包含产生当前所选择的候选输出序列的中间变量。在进一步的实施例中,可以以链表形式存储上述链接信息,其中链表中每个节点存储指示候选输出序列在存储块序列中上一存储块内对应的索引。具体地,方法900还可以按如下来维护链表中的链接信息:响应于当前时间步为关联存储块所对应的首个时间步,基于当前时间步选择出的候选输出序列,确定上一存储块内对应的索引;以及将该索引存储在链表的对应节点中。
[0107]
由此,在步骤s940中,具体地,可以根据链表各节点存储的索引,依次从对应存储块内读取对应的中间变量,以执行下一时间步的解码处理。
[0108]
可选地或附加地,在一些实施例中,方法900还可以包括:响应于时间步数超过解码器支持的最大序列长度s,返回到首个存储块开始缓存在关联的时间步期间解码器生成的中间变量;以及读取最近s个时间步的b组中间变量以用于执行下一时间步的解码处理。
[0109]
上面结合流程图描述了本披露实施例的执行神经网络模型的过程。可以理解,前面结合硬件结构针对神经网络模型执行过程中与集束搜索相关的重排处理的特征同样适用于上述方法,因此此处不再赘述。同样地,本披露一些实施例还提供了包含数据处理装置的芯片和板卡,其可以包含前面描述的对应特征,此处不再重复。
[0110]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0111]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0112]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所
公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0113]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0114]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0115]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如cpu、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0116]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。