一种算子融合的方法、装置、存储介质及电子设备与流程

文档序号:30595935发布日期:2022-07-01 20:40阅读:336来源:国知局
一种算子融合的方法、装置、存储介质及电子设备与流程

1.本技术涉及人工智能技术领域,尤其涉及一种算子融合的方法、装置、存储介质及电子设备。


背景技术:

2.随着人工智能的日益普及,深度学习的新算法和新模型层出不穷,深度学习模型可以识别图像、处理自然语言。高性能是现代深度学习训练框架的重要指标。
3.研究员在实现算法时会使用大量算子,算子在模型训练过程占用的时间越来越多。每一个算子的计算都需要把数据从片外存储器(例如动态随机存取存储器)搬运到片上,再将算子的输出数据搬运到片外存储器存储。因此,训练框架的高性能很大程度上依赖于对这些连续算子的整体优化,算子融合是一个重要的优化方向。
4.很多目前流行的深度学习框架,只支持在有限类型的服务器级图形处理器(graphics processing unit,gpu)设备上获得加速,这种支持依赖于高度特化、供应商特定的gpu。然而,专用深度学习加速器的种类越来越多,这意味着现代编译器与框架越来越难以覆盖所有的硬件。
5.深度学习编译器tvm和mlir等框架提出了一个统一的中间表征(intermediate representation,ir)堆栈,联系了深度学习框架和后端硬件。由计算图转换为ir后,很难在ir上进行一些图级别的性能提升的操作,而且当前tvm和mlir很多ir上的算子融合优化也是针对gpu架构设计,并不能适用到很多其它的深度学习硬件。


技术实现要素:

6.本技术提供了一种算子的融合方法、装置、存储介质及电子设备,可在ir层上对算子进行融合,减少算子间计算数据的搬移,提高计算效率。
7.第一方面,本技术提供一种算子融合方法,包括:遍历中间表征的多个算子;确定多个算子之间的执行关系,执行关系指示多个算子的输入与输出之间的关系;根据多个算子的类型,确定多个算子的算子标识,算子标识包括主算子与后融合算子;基于算子之间的执行关系和算子标识进行算子融合。
8.根据算子间的输入输出关系和算子标识进行算子融合,将多个算子融合成一个算子,融合算子中的各算子计算完毕后的数据直接给下一个算子进行计算,提高计算效率。
9.在一种可能的实现方式中,基于算子之间的执行关系和算子标识进行算子融合,包括:遍历多个算子,在确定第一算子的算子类型为主算子时,根据执行关系,遍历在第一算子之后执行的算子,在第一算子之后存在连续的一个或多个算子类型为后融合算子的算子时,将连续的一个或多个算子插入到第一算子后面,得到融合算子。
10.根据实际应用场景,由算子的类型确定算子的算子标识,将在主算子之后执行的后融合算子融入主算子。
11.在一种可能的实现方式中,确定多个算子之间的执行关系,包括:建立算子的输入
映射表和输出映射表,输入映射表包括每个算子的算子索引输入变量的地址信息,输出映射表包括每个算子的算子索引与输出变量的地址信息;基于输入映射表和输出映射表,确定多个算子之间的执行关系。
12.ir层上很难进行图级别的性能优化,建立输入映射表与输出映射表,与图一样建立算子之间的输入输出关系,便于根据算子间关系进行融合。
13.在一种可能的实现方式中,将连续的一个或多个算子插入到第一算子后面,得到融合算子之前,包括:创建融合映射表,将连续的一个或多个算子从中间表征中删除,并将连续的一个或多个算子依次存储到融合映射表;将存储在融合映射表中的连续的一个或多个算子插入到第一算子之后,得到融合算子。
14.将确定可以融合的后融合算子存入融合映射表,并将ir中的该算子删除,根据融合映射表将后融合算子插入对应主算子后面,完成算子的融合,在ir将多个算子融合为一个算子。
15.在一种可能的实现方式中,对多个算子中每个算子进行算子标识,包括:多个算子中多元素操作的算子的算子标识为主算子;多个算子中单元素操作的算子的算子标识为后融合算子。
16.在一种可能的实现方式中,包括:融合算子中后融合算子的分片策略与融合算子中主算子的分片策略相同。在一种可能的实现方式中,包括:融合算子中的后融合算子根据主算子的偏移地址进行计算。
17.每个算子的分片策略不同,在进行融合算子的计算时形成障碍,将后融合算子的分片策略更新至与主算子相同。
18.第二方面,本技术提供一种算子融合装置,包括获取单元、存储单元和融合单元:获取单元遍历中间表征的多个算子,获取每个算子的算子标识、输入变量和输出变量的地址信息;获取多个算子中每个算子的算子类型,算子类型包括主算子与后融合算子;存储单元建立多个算子的输入映射表和输出映射表,输入映射表包括每个算子的算子标识与输入变量的地址信息,输出映射表包括每个算子的算子标识与输出变量的地址信息;创建融合映射表,将连续的一个或多个算子的算子标识与算子名依次存储到融合映射表;融合单元基于输入映射表和输出映射表,确定多个算子之间的执行关系;遍历多个算子,在确定第一算子的算子类型为主算子时,根据执行关系,遍历在第一算子之后执行的算子,在第一算子之后存在连续的一个或多个算子类型为融合算子的算子时,将融合映射表中算子标识指示的算子从中间表征中删除,并将融合映射表中算子标识指示的算子插入到第一算子之后,得到融合算子。
19.第三方面,本技术提供一种电子设备,包括存储器和处理器;存储器,用于存储计算机程序;处理器,用于执行存储器中存储的计算机程序,用于执行如第一方面或第一方面任意可能的实现方式中所述的方法。
20.第四方面,本技术提供一种计算机存储介质,包括程序或指令,当程序或指令在计算机设备上执行时,实现如第一方面或第一方面任意可能的实现方式中所述的方法。
附图说明
21.图1为本技术实施例提供的一种电子设备的结构示意图;
22.图2为本技术实施例提供的一种算子融合方法流程示意图;
23.图3为本技术实施例提供的一种算子计算图示意图;
24.图4为本技术实施例提供的一种算子标识示意图;
25.图5为本技术实施例提供的一种后融合算子移除示意图;
26.图6为本技术实施例提供的一种算子融合示意图;
27.图7为本技术实施例提供的一种算子融合装置的结构示意图;
28.图8为本技术实施例提供的一种组合处理装置的结构示意图;
29.图9为本技术实施例提供的一种板卡的结构示意图。
具体实施方式
30.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
31.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
32.还应当理解,在此本技术说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本技术。如在本技术说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
33.还应当进一步理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
34.如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0035]
在实际的深度学习应用中,一个神经网络模型的计算图会包括很多算子。在计算时,每一个算子都要经过输入—计算—输出这个过程,将数据从存储单元拷贝到计算单元进行计算,计算完成后再将结果数据拷贝到存储单元。大量的时间花费在数据的输入输出拷贝上,造成性能的下降。
[0036]
目前深度学习领域中常用的框架,大多只对窄范围的服务器级gpu进行优化,要把工作负载部署到其他平台,如手机、嵌入式设备和专用加速器(如fpga、asic),则需要大量手动工作。tvm和mlir是常用的深度学习框架,提出了一个统一的中间表征(intermediate representation,ir)堆栈,具备图形级和算子级的优化,但很多ir上的算子融合优化也是针对gpu架构设计,很难应用到所有的深度学习硬件上。
[0037]
针对现有技术中存在的问题,为了提升深度学习的计算性能,本技术提出一种ir上算子融合的方法及电子设备,将若干个算子按照一定的规则融合为一个大算子执行,减少计算单元与存储单元间的交互,可以适用到所有的深度学习硬件。
[0038]
下面结合具体实施例,对本技术进行详细说明。
[0039]
请参阅图1,图1是本技术实施例提供的一种电子设备的结构示意图,如图1所示,该电子设备包括存储器110、输入设备120、输出设备130和处理器140,其中,该电子设备还可以包括通信总线150,处理器140、输入设备120、输出设备130和存储器110之间可以通过总线150相互连接。可选地,上述电子设备还可以包括指令存储单元,该指令存储单元临近处理器140设置。进一步可选地,指令存储单元与处理器140集成为一体,即该指令存储单元是处理器140的片上存储单元。这样,当处理器140需要执行存储器中程序时,电子设备首先将存储器110中的程序加载至指令存储单元,之后,处理器140可以访问上述的指令存储单元,以执行指令存储单元中的程序。
[0040]
进一步地,上述处理器140可以是中央处理器(central processing unit,cpu)、智能处理器(intelligence processing unit,npu)、图形处理器(graphics processing unit,gpu)或图象处理器(image processing unit),本技术对此不做限定。根据处理器的不同,本技术实施例提出的确定硬件性能的方法可以应用于图像识别处理、深度学习处理、计算机视觉处理、智能机器人处理、自然语言处理等人工智能应用领域,执行人工智能领域中的复杂功能程序。
[0041]
其中,上述处理器140,用于执行所述存储器110上所存放的程序时,实现以下步骤:
[0042]
下面介绍申请实施例提供的一种ir上算子融合的方法,该方法应用于图1的电子设备,参见图2。
[0043]
s201、遍历中间表征的多个算子,确定多个算子之间的执行关系。
[0044]
tvm和mlir等框架提出了一个统一的中间表征(ir)堆栈,联系了深度学习框架和后端硬件,ir是对神经网络模型的中间表示。中间表征ir中包括多个算子,对应神经网络模型中的多个算子。
[0045]
其中,执行关系指示所述多个算子的输入与输出之间的关系。确定多个所述算子之间的执行关系,包括:建立算子的输入映射表和输出映射表,所述输入映射表包括每个算子的算子索引和输入变量的地址信息,所述输出映射表包括每个算子的算子索引与输出变量的地址信息;基于所述输入映射表和所述输出映射表,确定多个所述算子之间的执行关系。
[0046]
遍历中间表征ir上的多个算子(operator,op),建立输入映射表load_map《var*,op_indexs》与输出映射表store_map《var*,op_indexs》。load_map记录每个算子的算子索引和输入变量的地址信息,根据输入变量的地址信息确定输入数据,即指示每个算子的输入算子;store_map记录每个算子的算子索引与输出变量的地址信息,根据输入变量的地址信息确定输入数据,即指示每个算子的输出算子。基于输入映射表和输出映射表,确定算子的输入算子和输出算子,确定算子之间的输入输出关系。
[0047]
具体的,var*存储的是op输入变量tensor variable或输出变量tensorvariable的指针,该指针用于存储输入输出数据的地址指针,op_indexs存储的是对应的算子索引op index。
[0048]
参见如图3所示的计算图,算子op0,op1,op2,op3对应的index分别是0、1、2、3。op0的输入tensor variable是var0,输出tensor variable是var1;op1的输入tensor variable是var2,输出tensor variable是var3;op2的输入tensor variable是var3,输出
tensor variable是var4。
[0049]
在遍历op0时,op0的输入tensor variable是var0,op index为0,在load_map中插入(var0:{0,});op0的输入tensor variable是var0,op index为0,在store_map中插入(var1:{0,})。
[0050]
在遍历op1时,op1的输入tensor variable是var2,op index为1,在load_map中插入(var2:{1,});op0的输入tensor variable是var3,op index为1,在store_map中插入(var3:{1,})。
[0051]
在遍历op2时,op2的输入tensor variable是var3,op index为2,在load_map中插入(var3:{2,});op0的输入tensor variable是var4,op index为2,在store_map中插入(var4:{2,})。
[0052]
在遍历op3时,op3的输入tensor variable是var1和var4,op index为3,在load_map中插入(var1:{3,})和(var4:{3,});op3的输入tensor variable是var5,op index为3,在store_map中插入(var5:{3,})。
[0053]
当计算图如图3时,完成以上步骤后,load_map和store_map为:
[0054]
load_map:{
[0055]
var0:{0,},
[0056]
var1:{3,},
[0057]
var2:{1,},
[0058]
var3:{2,},
[0059]
var4:{3,}
[0060]
}
[0061]
store_map:{
[0062]
var1:{0,},
[0063]
var3:{1,},
[0064]
var4:{2,},
[0065]
var5:{3,}
[0066]
}
[0067]
建立以上输入映射表与输出映射表后,确定算子间的输入输出关系。对于每个op,根据输入tensor variable,在store_map中查找来获取其输入算子,也叫作父算子;根据输出tensor variable,在load_map中查找来获取其输出算子,也叫作子算子。对于中间表征中的算子,可能存在父算子,也可能没有父算子。当算子对应的输出映射表中不存在某个算子时,则该算子没有父算子。例如遍历op0,op0的输入tensor variable为var0,在store_map中没有找到对应记录,由此可以推出op0没有输入算子;op0的输出tensor variable为var1,在load_map中有(var1:{3,}),得出op0的输出算子是op3。以此类推,建立整个计算op ir的关联。
[0068]
s202、根据算子的类型,确定所述多个算子的算子标识,算子标识包括主算子与后融合算子。
[0069]
该算子融合可以应用于前融合方案中、后融合方案中以及其他融合方案中。根据算子的类型确定算子标识,该算子标识的标识方法可以根据实际的运用场景来设定。
[0070]
可选的,在本技术实施例提供的一种后融合方案中,将多元素操作的算子标识为主算子(master op);将单元素操作的算子标识为后融合算子(fuse op)。后融合算子可以直接融合到属于父算子的主算子中,主算子之间不能相互融合。
[0071]
单元素操作的算子指的是在算法中,可以对单个元素进行操作,也就是可以一个元素一个元素去计算。例如,单元素操作的算子包括激活算子,加减乘除算子、elemwise算子等。多元素操作的算子指的是比较复杂的算子,不能一个一个元素去计算的算子,例如多元素操作的算子包括conv、dense和pool算子等,
[0072]
可选的,在进行算子融合时,elemwise算子在父节点算子中没有主算子的时候,可以将elemwise算子标识为主算子进行融合。
[0073]
在一种可能的实施方式中,以图3提供的计算图为例进行融合类型标识,结果参见图4。op0为relu算子,算子名为relu0,算子类型为单元素操作的算子,将其标识为后融合算子;op1为conv算子,算子名为conv0,算子类型为多元素操作的算子,将其标识为主算子;op2为relu算子,算子名为relu1,算子类型为单元素操作的算子,将其标识为后融合算子;op3为add算子,算子名为add0,算子类型为单元素操作的算子,将其标识为后融合算子。
[0074]
s203、基于所述算子之间的执行关系和所述算子标识进行算子融合。
[0075]
遍历所述多个算子,第一算子为多个算子中的一个,在确定第一算子的算子类型为所述主算子时,根据执行关系,遍历在第一算子之后执行的算子,在第一算子之后存在连续的一个或多个算子类型为后融合算子的算子时,将连续的一个或多个算子插入到所述第一算子后面,得到融合算子。
[0076]
根据算子的算子标识确定主算子与后融合算子,移除主算子的对应后融合算子ir。
[0077]
根据s201中建立的算子间的执行关系与s202中算子的算子标识进行算子融合,遍历算子ir,第一算子为多个算子中的一个,在确定第一算子的算子类型为所述主算子时,根据执行关系,遍历在该主算子之后执行的算子,在该主算子之后存在连续的一个或多个算子类型为后融合算子的算子时,所述连续的一个或多个后融合算子可以融合进主算子。
[0078]
具体操作为:建立融合映射表,将连续的一个或多个后融合算子依次存储到融合映射表map《op_index,op_ir》中,并将连续的一个或多个后融合算子从中间表征中删除。将存储在融合映射表中的后融合算子插入到主算子之后,得到融合算子。
[0079]
具体的,op_index存储的是对应的算子索引op index,op_ir存储的是对应的算子名。遍历主算子的所有后融合算子的index,通过map《op_index,op_ir》获取到后融合算子,直接依序插入到主算子后面。可选的,进行算子融合后,融合算子中后融合算子的分片策略与融合算子中主算子的分片策略相同,按照主算子的拆分策略更新后融合算子的拆分策略。这里的分片策略是指计算单元的内存不够算子一次运算所需空间,需要将数据拆分成多次拷贝到计算单元上,算子的拆分策略主要体现在算子的源地址和目的地址的偏移计算上。
[0080]
融合算子中的后融合算子根据所主算子的偏移地址进行计算。融合算子间各算子的数据不再拷贝到存储单元,直接在片上给到下一个后融合算子。
[0081]
以图3提供的计算图为例,说明算子融合的过程。
[0082]
遍历算子ir。op0被标识为后融合算子,在store_map中查找到op0没有输入算子,
因此无法进行算子融合。
[0083]
op1被标识为主算子,在load_map查找到op1的输出算子是op2,op2被标识为后融合算子,可以融合到op1中。在load_map中查找到op2的输出算子为op3,op3被标识为后融合算子,可以融合到op1中。
[0084]
将后融合算子op2和op3存储到map《op_index,op_ir》中,并在ir上移除算子op2和op3。参见图5,图5是本技术实施例提供的一种后融合算子移除示意图。
[0085]
op2的op index为2,op ir为relu0,在map中插入({2,}:relu0),然后在算子ir中移除op2。op3的op index为3,op ir为add0,在map中插入({3,}:add0),然后在算子ir中移除op3。
[0086]
参见图6,图6是本技术实施例提供的一种算子融合示意图。
[0087]
op1为主算子,其后融合算子为op2和op3。op2的opindex为2,在map中找到对应算子名为relu1,op3的opindex为3,在融合映射表map中找到对应算子名为add0,将relu1和add0插入到主算子op1的后面,完成算子融合。
[0088]
通过建立算子之间的输入输出关系,进行算子融合,减少了数据拷贝到片外的次数,节省了计算时间,提升深度学习性能。
[0089]
本技术实施例提供一种算子融合装置700,该装置用于执行上述的方法步骤。图7提供一种算子融合装置示意图,算子融合装置700包括获取单元710、存储单元720和融合单元730。
[0090]
获取单元710遍历中间表征的多个算子,获取每个算子的算子标识、输入变量和输出变量的地址信息;获取多个算子中每个算子的算子类型,算子类型包括主算子与后融合算子。
[0091]
存储单元720建立多个算子的输入映射表和输出映射表,输入映射表包括每个算子的算子标识与输入变量的地址信息,输出映射表包括每个算子的算子标识与输出变量的地址信息;创建融合映射表,将连续的一个或多个算子的算子标识与算子名依次存储到融合映射表。
[0092]
融合单元730基于输入映射表和输出映射表,确定多个算子之间的执行关系;遍历多个算子,在确定第一算子的算子类型为主算子时,根据执行关系,遍历在第一算子之后执行的算子,在第一算子之后存在连续的一个或多个算子类型为融合算子的算子时,将融合映射表中算子标识指示的算子从中间表征中删除,并将融合映射表中算子标识指示的算子插入到第一算子之后,得到融合算子。
[0093]
本技术实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
[0094]
本技术实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
[0095]
图8是示出根据本披露实施例的一种组合处理装置800的结构图。如图8中所示,该组合处理装置800包括计算处理装置802、接口装置804、其他处理装置806和存储装置808。
根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置810,该计算装置可以配置用于执行本文结合附图2所描述的操作。
[0096]
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
[0097]
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0098]
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0099]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
[0100]
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0101]
在一些实施例里,本披露还公开了一种神经网络芯片(例如图9中示出的芯片902)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图8中所示的组合处理装置。该芯片可以通过对外接口装置(如图9中示出的对外接口装置906)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封
装结构。下面将结合图9对该板卡进行详细地描述。
[0102]
图9是示出根据本披露实施例的一种板卡900的结构示意图。如图9中所示,该板卡包括用于存储数据的存储器件904,其包括一个或多个存储单元910。该存储器件可以通过例如总线等方式与控制器件908和上文所述的芯片902进行连接和数据传输。进一步,该板卡还包括对外接口装置906,其配置用于芯片(或芯片封装结构中的芯片)与外部设备912(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0103]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0104]
根据上述结合图8和图9的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0105]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0106]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0107]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所
公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0108]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0109]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0110]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如cpu、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static randomaccess memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0111]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0112]
依据以下条款可更好地理解前述内容:
[0113]
条款a1,一种算子融合方法,包括:
[0114]
遍历中间表征的多个算子;
[0115]
确定所述多个算子之间的执行关系,所述执行关系指示所述多个算子的输入与输
出之间的关系;
[0116]
根据所述多个算子的类型,确定所述多个算子的算子标识,所述算子标识包括主算子与后融合算子;
[0117]
基于所述算子之间的执行关系和所述算子标识进行算子融合。
[0118]
条款a2,根据条款a1所述的方法,其所述基于所述算子之间的执行关系和所述算子标识进行算子融合,包括:
[0119]
遍历所述多个算子,第一算子为所述多个算子中的一个,在确定所述第一算子的算子类型为所述主算子时,根据所述执行关系,遍历在所述第一算子之后执行的算子,在所述第一算子之后存在连续的一个或多个算子类型为后融合算子的算子时,将所述连续的一个或多个算子插入到所述第一算子后面,得到融合算子。
[0120]
条款a3,根据条款1或2所述的方法,确定多个所述算子之间的执行关系,包括:
[0121]
建立算子的输入映射表和输出映射表,所述输入映射表包括每个算子的算子索引和输入变量的地址信息,所述输出映射表包括每个算子的算子索引与输出变量的地址信息;
[0122]
基于所述输入映射表和所述输出映射表,确定多个所述算子之间的执行关系。
[0123]
条款a4,根据条款a2所述的方法,所述将所述连续的一个或多个算子插入到所述第一算子后面,得到融合算子之前,包括:
[0124]
建立融合映射表,将所述连续的一个或多个算子依次存储到所述融合映射表,并将所述连续的一个或多个算子从所述中间表征中删除;
[0125]
将存储在所述融合映射表中的所述连续的一个或多个算子插入到所述第一算子之后,得到融合算子。
[0126]
条款a5,根据条款a1所述的方法,所述对多个所述算子中每个算子进行算子标识,包括:
[0127]
所述多个算子中多元素操作的算子的算子标识为主算子;
[0128]
所述多个算子中单元素操作的算子的算子标识为后融合算子。
[0129]
条款a6,根据条款a1所述的方法,包括:
[0130]
所述融合算子中所述后融合算子的分片策略与所述融合算子中所述主算子的分片策略相同。
[0131]
条款a7,根据权利要求条款a6所述的方法,包括:
[0132]
所述融合算子中的所述后融合算子根据所述主算子的偏移地址进行计算。
[0133]
条款b1,一种算子融合装置,包括获取单元、存储单元和融合单元:
[0134]
所述获取单元遍历中间表征的多个算子,获取每个算子的算子标识、输入变量和输出变量的地址信息;
[0135]
获取多个算子中每个算子的算子类型,算子类型包括主算子与后融合算子;
[0136]
所述存储单元建立多个算子的输入映射表和输出映射表,输入映射表包括每个算子的算子标识与输入变量的地址信息,输出映射表包括每个算子的算子标识与输出变量的地址信息;
[0137]
创建融合映射表,将连续的一个或多个算子的算子标识与算子名依次存储到融合映射表;
[0138]
所述融合单元基于输入映射表和输出映射表,确定多个算子之间的执行关系;
[0139]
遍历多个算子,在确定第一算子的算子类型为主算子时,根据执行关系,遍历在第一算子之后执行的算子,在第一算子之后存在连续的一个或多个算子类型为融合算子的算子时,将融合映射表中算子标识指示的算子从中间表征中删除,并将融合映射表中算子标识指示的算子插入到第一算子之后,得到融合算子。
[0140]
条款c1,一种电子设备,包括存储器和处理器;
[0141]
所述存储器,用于存储计算机程序;
[0142]
所述处理器,用于执行存储器中存储的计算机程序,以实现如条款a1-a7中任一项所述的方法。
[0143]
条款d1,一种计算机可读存储介质,包括程序或指令,当所述程序或指令在计算机设备上执行时,实现如条款a1-a7中任一项所述的方法。
[0144]
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1