张量计算图的计算资源分配方法、装置和可读存储介质与流程
未命名
07-27
阅读:98
评论:0
1.本发明涉及计算机技术领域,具体涉及一种张量计算图的计算资源分配方法、装置和可读存储介质。
背景技术:
2.随着科技的发展,神经网络应用到需要越来越多的领域,例如,人工智能(artificial intelligence,ai)框架和ai编译器框架,都是将神经网络抽象为张量计算图,在对张量计算图进行调度时,需要为张量计算图中的算子指定存储资源与计算资源;在ai硬件加速器中通常有多级存储架构,包括局部存储器(local memory)、共享存储器(shared memory)和全局存储器(global memory),其中,所述local memory是计算资源中每个计算核独享的,所述shared memory和所述global memory是计算资源中全部计算核共享的。
3.不同的ai硬件加速器的调度形式是不同的,以通用图像处理器(graphics processing unit,gpu)为例,算子分配到的计算核只能从对应的local memory获取数据,或输出数据到对应的local memory,由于现有技术中计算核的分配策略导致算子对应的计算核以及local memory都是无法提前预知,因此,算子在计算时,只能将输入输出数据保存到global memory中,需要时再将数据从global memory搬运到对应的local memory中,该方式不仅搬运频繁,同时也降低了计算资源的利用率。
4.综上所述,如何通过对计算资源的分配可以保证每个计算核在算子计算的过程中无需到global memory中获取需要的数据,只需要在自身对应的local memory中即可获取需要的数据,减少在计算过程中对数据在local memory和global memory之间的搬运,提高处理效率是目前需要解决的问题。
技术实现要素:
5.有鉴于此,本发明实施例提供了一种基于张量计算图的计算资源分配方法、装置和可读存储介质,通过对计算资源的分配可以保证每个计算核在算子计算的过程中无需到全局存储器中获取需要的数据,只需要在自身对应的局部存储器中即可获取需要的数据,减少在计算过程中对数据在局部存储器和全局存储器之间的交换,提高处理效率。
6.第一方面,本发明实施例提供了一种基于张量计算图的计算资源分配方法,该方法包括:
7.获取第一算子的输出数据的数据形状以及可用计算核数量;
8.根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;
9.获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;
10.根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核
的分配方式,确定所述第二算子的第二计算核的分配方式。
11.可选的,该方法还包括:
12.在所述张量计算图中,保存对应于所述第一算子的所述第一计算核的分配方式,以及对应于所述第二算子的所述第二计算核的分配方式。可选的,所述获取所述张量计算图中每个算子的输入数据与输出数据的维度对应关系,包括:
13.获取所述张量计算图中所述每个算子的输入数据的数据形状和输出数据的数据形状;
14.根据所述每个算子的计算逻辑、输入数据的数据形状和输出数据的数据形状,确定所述每个算子的输入数据与输出数据的维度对应关系。
15.可选的,该方法还包括:
16.在所述张量计算图中保存对应于所述每个算子的输入数据与输出数据的维度对应关系。
17.可选的,在对所述第一算子的输出数据的拆分维度进行拆分之前,还包括:
18.根据预设的拆分方式与所述可用计算核数量,确定所述第一算子的输出数据的拆分维度。
19.可选的,所述第一算子为所述张量计算图中的输出算子,所述第二算子为所述张量计算图中的输入算子和中间算子。
20.可选的,响应于所述第二算子为输入算子,获取所述第二算子的输入数据,将所述第二算子的输入数据搬运至所述可用计算核的局部存储器中;
21.获取所述第二算子的第二计算核的分配方式;
22.控制每个所述可用计算核从其局部存储器中读取数据,并执行所述第二算子的计算逻辑,以及根据所述第二算子的第二计算核的分配方式,得到所述第二算子的输出数据分块;
23.控制每个所述可用计算核将所述第二算子的输出数据分块存储在所述局部存储器中。
24.可选的,响应于所述第二算子为中间算子,控制每个所述可用计算核从局部存储器中读取数据,并执行所述第二算子的计算逻辑,得到所述第二算子的输出数据分块;
25.控制每个所述可用计算核在各自的所述局部存储器中保存所述第二算子的输出数据分块。
26.第二方面,本发明实施例提供了一种基于张量计算图的计算资源分配装置,该装置包括:
27.获取单元,用于获取第一算子的输出数据的数据形状以及可用计算核数量;
28.确定单元,用于根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;
29.所述获取单元还用于,获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;
30.所述确定单元还用于,根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。
31.可选的,该装置还包括:
32.保存单元,用于在所述张量计算图中,保存对应于所述第一算子的所述第一计算核的分配方式,以及对应于所述第二算子的所述第二计算核的分配方式。
33.可选的,所述获取单元还用于:
34.获取所述张量计算图中所述每个算子的输入数据的数据形状和输出数据的数据形状;
35.根据所述每个算子的计算逻辑、输入数据的数据形状和输出数据的数据形状,确定所述每个算子的输入数据与输出数据的维度对应关系。
36.可选的,所述保存单元还用于:
37.在所述张量计算图中保存对应于所述每个算子的输入数据与输出数据的维度对应关系。
38.可选的,在对所述第一算子的输出数据的拆分维度进行拆分之前,所述确定单元还用于:
39.根据预设的拆分方式与所述可用计算核数量,确定所述第一算子的输出数据的拆分维度。
40.可选的,所述第一算子为所述张量计算图中的输出算子,所述第二算子为所述张量计算图中的输入算子和中间算子。
41.可选的,所述获取单元还用于,响应于所述第二算子为输入算子,获取所述第二算子的输入数据,将所述第二算子的输入数据搬运至所述可用计算核的局部存储器中;
42.获取所述第二算子的第二计算核的分配方式;
43.该装置还包括:控制单元,用于控制每个所述可用计算核从其局部存储器中读取数据,并执行所述第二算子的计算逻辑,以及根据所述第二算子的第二计算核的分配方式,得到所述第二算子的输出数据分块;
44.控制每个所述可用计算核将所述第二算子的输出数据分块存储在所述局部存储器中。
45.可选的,所述获取单元还用于,响应于所述第二算子中间算子,控制每个所述可用计算核从局部存储器中读取数据,并执行所述第二算子的计算逻辑,得到所述第二算子的输出数据分块;
46.所述控制单元还用于,控制每个所述可用计算核在各自的所述局部存储器中保存所述第二算子的输出数据分块。
47.第三方面,本发明实施例提供了一种计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面或第一方面任一种可能中任一项所述的方法。
48.第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面或第一方面任一种可能中任一项所述的方法。
49.第五方面,本发明实施例提供了一种芯片,包括存储器和处理核,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理核执行以实现如第一方面或第一方面任一种可能中任一项所述的方法。
50.第六方面,本发明实施例提供了一种板卡,所述板卡上包括所述第五方面的芯片。
51.第七方面,本发明实施例提供了一种服务器,所述服务器上包括所述第六方面的板卡。
52.本发明实施例通过获取第一算子的输出数据的数据形状以及可用计算核数量;根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。通过上述方法,通过对计算资源的分配可以保证每个计算核在算子计算的过程中无需到全局存储器中获取需要的数据,只需要在自身对应的局部存储器中即可获取需要的数据,减少在计算过程中对数据在局部存储器和全局存储器之间的交换,提高处理效率。
附图说明
53.通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
54.图1是本发明实施例的一种基于张量计算图的计算资源分配方法流程图;
55.图2是本发明实施例的一种基于张量计算图示意图;
56.图3是本发明实施例中一种输入数据和输出数据示意图;
57.图4是本发明实施例中一种输出数据示意图;
58.图5是本发明实施例的一种输入数据示意图;
59.图6是本发明实施例的一种基于张量计算图的计算资源分配方法流程图;
60.图7是本发明实施例中一种计算核的分配方式示意图;
61.图8是本发明实施例的一种基于张量计算图的计算资源分配方法流程图;
62.图9是本发明实施例的一种基于张量计算图的计算资源分配装置示意图。
具体实施方式
63.以下基于实施例对本发明公开进行描述,但是本发明公开并不仅仅限于这些实施例。在下文对本发明公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明公开。为了避免混淆本发明公开的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
64.此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
65.除非上下文明确要求,否则整个申请文件中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
66.在本发明公开的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明公开的描述中,除非另有说明,“多个”的含义是两个或两个以上。
67.现有技术中,人工智能ai框架和ai编译器框架都是将神经网络抽象为张量计算图,在对张量计算图进行调度时,需要为张量计算图中的算子指定存储资源与计算资源;上
述ai框架和ai编译器框架是软件部分,所述软件部分生成的运行程序需要下发到硬件部分执行,所述硬件部分即ai硬件加速器;在ai硬件加速器中通常有多级存储架构,包括局部存储器(local memory)、共享存储器(shared memory)和全局存储器(global memory),其中,所述local memory是计算资源中每个计算核独享的,所述shared memory是计算资源中部分计算核共享的,所述global memory是计算资源中全部计算核共享的,所述local memory与计算资源的数据交换速度最快,所述shared memory与计算资源的数据交换速度次之,所述global memory与计算资源的数据交换速度最慢。
68.不同的ai硬件加速器的调度形式是不同的,以通用图像处理器gpu为例,通常算子对应的整体数据流中包括的输入输出数据都是保存在global memory,global memory作为算子的数据交换媒介,而算子分配到的计算核只能从对应的local memory直接获取数据,或直接输出数据到对应的local memory,其中,所述计算核通过硬件调度器动态选取;由于计算核对local memory的独占性,对计算资源的调度过程也是对local memory的分配过程。
69.现有技术中计算核的调度包括动态分配策略和默认分配策略,其中,所述动态分配策略为通用动态选取计算资源的策略,在张量计算图执行期间,由硬件掉地器动态选取当前可用的计算资源来执行算子运算,由于算子执行时的计算资源由动态分配得来的,因此算子使用的计算核以及local memory都是无法提前预知的,所以算子间的计算结果必须通过共享的global memory来交换,这导致数据在local memory与global memory之间频繁搬运,降低了ai硬件加速器的计算资源利用率,其中,该动态分配策略常见于通用gpu中。所述默认分配策略是将所有计算资源分配给当前执行算子的策略,算子依次执行,每次执行均利用所有的计算资源,直到张量计算图运算结束,对于所述默认分配策略,虽然算子可以使用所有的计算资源,但张量计算图中不包含算子计算结果在计算资源的上的分布信息,导致下一个算子无法利用上一个算子暂存在local memory的计算结果,计算结果仍然需要通过global memory交换,降低了计算资源利用率。因此,现有技术中计算核的分配策略导致算子对应的计算核以及local memory都是无法提前预知,算子在计算时,只能将输入输出数据保存到global memory中,需要时再将数据从global memory搬运到对应的local memory中,搬运频繁,同时也降低了计算资源的利用率,其中,该默认分配策略常见于多数ai专用加速硬件中。
70.综上所述,如何通过对计算资源的分配可以保证每个计算核在算子计算的过程中无需到global memory中获取需要的数据,只需要在自身对应的local memory中即可获取需要的数据,减少在计算过程中对数据在local memory和global memory之间的交换,提高处理效率是目前需要解决的问题。
71.本发明实施例中,为了减少在计算过程中对数据在local memory和global memory之间的交换,解决处理效率低的问题,提出了一种基于张量计算图的计算资源分配方法,具体如图1所示,图1是本发明实施例的一种基于张量计算图的计算资源分配方法流程图,具体包括:
72.步骤s100、获取第一算子的输出数据的数据形状以及可用计算核数量。
73.具体的,所述第一算子为张量计算图中的某一个算子,优选的,可以为输出算子。通过步骤s100,可获取到该第一算子的资源分配信息,该资源分配信息包括输出数据的数
据形状和当前可用的计算核的数量。
74.在一种可能的实现方式中,假设张量计算图中包括7个算子,具体如图2所示,分别为算子1、算子2、算子3、算子4、算子5、算子6和算子7,所述第一算子为算子7(即输出算子),获取到算子7的输出张量的数据形状为(4,64,128,256),其中,所述算子7的输出张量包括4个输出维度,第一个维度大小为4,第二个维度大小为64,第三个维度大小为128,第四个维度大小为256。
75.步骤s101、根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定所述第一算子的第一计算核的分配方式。
76.具体的,可用计算核数量是指可以执行算子计算的计算核的数量;拆分维度是指要进行拆分的维度,该拆分维度可以是1个,也可以是2个或多个;所述第一计算核的分配方式是指,所述第一算子的输出数据存储在各个计算核上的分布方式。通过步骤s101,可使得每个计算核处理相同大小的数据。
77.在一种可能的实现方式中,在执行步骤s101之前,还包括:根据预设的拆分方式与可用计算核数量,确定所述第一算子的输出数据的拆分维度。其中,该预设的拆分方式可以为:对输出数据从高维度到低维度依次拆分。
78.具体的,假设通过步骤s100获取到的当前可用计算核的数量为8个,第一算子的输出数据的数据形状为(4,64,128,256)。为了每个计算核处理相同大小的数据,可对输出数据进行均等的划分,即如何将输出数据的数据形状为(4,64,128,256)的数据平均拆分给8个计算核,以及对输出数据从高维度到低维度依次拆分。因此,可以将第一个维度(即拆分维度)拆分为4份,第二个维度(即拆分维度)拆分为2份,则对该输出数据从高维度到低纬度依次拆分4份、2份,4
×
2=8,即可将所述输出数据拆分为8份,将每一份分配给一个计算核进行处理,每个计算核要处理的数据的形状为(1,32,128,256),假设8个计算核的编号分别为0、1、2、3、4、5、6、和7,按照4
×
2的拆分方式,所述8个计算核的分布方式(即第一计算核的分配方式)可以为[[0,1],[2,3],[4,5],[6,7]],即分布方式的形状为(4,2)。
[0079]
本发明实施例中,上述步骤s100至步骤s101是确定过程所述第一算子的计算核的分配方式,也可以称为第一计算核的分配方式,通过第一计算核的分配方式,可以推算出张量计算图中除第一算子以外的其他算子的第二计算核的分配方式,所述第二计算核的分配方式的确定过程具体下步骤所示。
[0080]
步骤s102、获取张量计算图中每个算子的输入数据与输出数据的维度对应关系。
[0081]
通过该步骤,可得到每个算子的每个输入数据与其输出数据的维度对应关系。具体的,获取所述张量计算图中每个算子的输入数据的数据形状和输出数据的数据形状,根据每个算子的计算逻辑以及其输入数据的数据形状和输出数据的数据形状,确定每个算子的输入数据与输出数据的维度对应关系。进一步,可对应每个算子,保存每个算子的输入数据与输出数据的维度对应关系至所述张量计算图中。
[0082]
其中,张量计算图中的每个算子可获取其所有输入数据的数据形状和输出数据的数据形状,将其每个输入数据的维度信息与输出数据的维度一一对应,以得到每个算子的输入数据与输出数据的维度对应关系。
[0083]
在一种可能的实现方式中,假设张量计算图中的第一算子为转置(transpose)算
子,所述转置算子的输入数据的数据形状为(4,64,128,256),经过转置算子后的输出数据的数据形状为(128,64,256,4),因此可以确定出所述转置算子的输入数据与输出数据的各个维度的对应关系(即轴对应关系),具体如图3所示。
[0084]
步骤s103、根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。
[0085]
具体的,所述算子的拓扑结构可体现张量计算图中所有算子之间的逻辑关系;所述第二算子为所述张量计算图中除第一算子以外的其他算子;第二计算核的分配方式是指每个第二算子的输出数据的存储在各个计算核上的分布方式。优选的,所述第一算子为输出算子;所述第二算子为输入算子和中间算子,以及该第二算子可以为张量计算图中的多个算子。
[0086]
在一种可能的实现方式中,响应于所述第二算子为输入算子,获取所述第二算子的输入数据,将所述第二算子的输入数据搬运至所述可用计算核的局部存储器中;获取所述第二算子的第二计算核的分配方式;控制每个所述可用计算核从其局部存储器中读取数据,并执行所述第二算子的计算逻辑,以及根据所述第二算子的第二计算核的分配方式,得到所述第二算子的输出数据分块;控制每个所述可用计算核将所述第二算子的输出数据分块存储在所述局部存储器中。
[0087]
在一种可能的实现方式中,响应于所述第二算子为中间算子,控制每个所述可用计算核从局部存储器中读取数据,并执行所述第二算子的计算逻辑,得到所述第二算子的输出数据分块;控制每个所述可用计算核在各自的所述局部存储器中保存所述第二算子的输出数据分块。
[0088]
通过步骤s103,可依次确定出张量计算图中除第一算子以外的所有算子的计算核的分配方式。具体的,假设第一算子为输出算子,由于该输出算子的输入数据即为其前驱算子的输出数据,则在计算出输出算子的计算核的分配方式(即第一计算核的分配方式)之后,可根据该输出算子的输入数据与输出数据的维度对应关系,确定该输出算子的所有前驱算子的计算核的分配方式(即第二计算核的分配方式),进一步,根据每个前驱算子的输入数据与输出数据的维度对应关系,确定该每个前驱算子的前驱算子的计算核的分配方式(即第二计算核的分配方式),然后再进一步确定其所有前驱算子的计算核的分配方式(即第二计算核的分配方式),直至确定出张量计算图中所有的算子的计算核的分配方式。鉴于张量计算图中一般只有一个输出算子,而且该输出算子是依托于其他所有算子的输出数据进行计算的,所以该输出算子和其他所有算子之间具有一定的逻辑关系,因此,将输出算子作为第一算子,根据该第一算子的计算核的分配方式可依次倒推出其他所有算子的计算核的分配方式,可提高确定计算核的分配方式的效率。
[0089]
假设第一算子为输入算子,由于该输入算子的输出数据即为其后驱算子的输入数据,则在计算出输入算子的计算核的分配方式(即第一计算核的分配方式)之后,可根据该输入算子的每个后驱算子的输入数据与输出数据的维度对应关系,确定该输入算子的每个后驱算子的计算核的分配方式(即第二计算核的分配方式),进一步,根据该每个后驱算子的后驱算子的输入数据与输出数据的维度对应关系,确定该每个后驱算子的后驱算子的计算核的分配方式(即第二计算核的分配方式),然后再进一步确定其后驱算子的计算核的分配方式(即第二计算核的分配方式),直至确定出张量计算图中所有的算子的计算核的分配
方式。
[0090]
假设第一算子为某个中间算子,在计算出中间算子的计算核的分配方式(即第一计算核的分配方式)之后,由于该中间算子的输入数据即为其前驱算子的输出数据,则可根据该中间算子的输入数据与输出数据的维度对应关系,确定该中间算子的所有前驱算子的计算核的分配方式(即第二计算核的分配方式),进一步,根据每个前驱算子的输入数据与输出数据的维度对应关系,确定该每个前驱算子的前驱算子的计算核的分配方式(即第二计算核的分配方式),然后再进一步确定其前驱算子的计算核的分配方式(即第二计算核的分配方式),直至确定出张量计算图中该中间算子之前的所有的算子的计算核的分配方式。以及,由于该中间算子的输出数据即为其后驱算子的输入数据,则在计算出该中间算子的计算核的分配方式(即第一计算核的分配方式)之后,可根据该中间算子的后驱算子的输入数据与输出数据的维度对应关系,确定该中间算子的所有后驱算子的计算核的分配方式(即第二计算核的分配方式),进一步,根据每个后驱算子的后驱算子的输入数据与输出数据的维度对应关系,确定该后驱算子的后驱算子的计算核的分配方式(即第二计算核的分配方式),然后再进一步确定其后驱算子的计算核的分配方式(即第二计算核的分配方式),直至确定出张量计算图中张量计算图中该中间算子之后的所有的算子的计算核的分配方式。再者,若张量计算图中还有未确定计算核的分配方式的算子,可根据当前已确定的算子的计算核的分配方式以及算子之间的逻辑关系,进一步确定出张量计算图中所有的算子的计算核的分配方式。
[0091]
本发明实施例中,由于四维的输入数据以及四维的输出数据表示比较困难,因此,采用二维的输入数据以及二维的输出数据进行举例,假设张量计算图中任一算子为转置算子,该转置算子的输出数据的数据形状为(4,8),输出数据具体如图4所示,可用计算核的数量为8个,该转置算子的计算核的分配方式为[[0,1],[2,3],[4,5],[6,7]],每个计算核处理的数据形状为(1,4),具体的,处理核0处理第一行前4列的数据1、2、3、4;处理核1处理第一行后4列的数据5、6、7、8;处理核2处理第二行前4列的数据9、10、11、12;处理核3处理第二行后4列的数据13、14、15、16;处理核4处理第三行前4列的数据17、18、19、20;处理核5处理第三行后4列的数据21、22、23、24;处理核6处理第四行前4列的数据25、26、27、28;处理核7处理第四行后4列的数据29、30、31、32;该转置算子的输入数据经过转置后得到图4所示的数据,则该转置算子的输入数据的数据形状为(8,4),输入数据具体如图5所示。
[0092]
具体的,该转置算子的计算核的分配方式为[[0,1],[2,3],[4,5],[6,7]],该转置算子的前驱算子的输出数据即为该转置算子的输入数据,则该转置算子的前驱算子的计算核的分配方式为[[0,2,4,6],[1,3,5,7]],每个计算核在执行该转置算子的前驱算子时,处理的数据形状为(4,1),具体图5中每个计算核处理的数据进行了表示,具体的,处理核0处理第一列前4行的数据1、2、3、4;处理核1处理第一列后4行的数据5、6、7、8;处理核2处理第二列前4行的数据9、10、11、12;处理核3处理第二列后4行的数据13、14、15、16;处理核4处理第三列前4行的数据17、18、19、20;处理核5处理第三列后4行的数据21、22、23、24;处理核6处理第四列前4行的数据25、26、27、28;处理核7处理第四列后4行的数据29、30、31、32;其中,图4和图5中的数据1-32仅表示数据的位置编号,具体的数据根据实际情况确定。
[0093]
本发明实施例中,在算子计算前后,虽然逻辑形状有所改变,但每个计算核的local memory上保存实际对应的数据没有变化,这个性质可以保证每个计算核所处理数据
的独立性,算子可以根据其前后相邻算子的计算核的分配,得知自身所需要处理的数据以及数据形状,从而数据可以长期驻存在local memory,而无需搬运到global memory进行数据交换。
[0094]
本发明实施例中,张量计算图中除输出算子以为的其他算子,不论是中间算子还是输入算子,都可以按照上述步骤s102和s103计算其对应的第二计算核的分配方式。例如,图2中,算子7为输出算子,算子2、算子3、算子4、算子6为中间算子,算子1和算子5为输入算子。
[0095]
图6是本发明实施例的一种基于张量计算图的计算资源分配方法流程图,在所述步骤s101之后,还包括如下步骤:
[0096]
步骤s104、对应所述第一算子,保存所述第一计算核的分配方式至所述张量计算图中。
[0097]
在所述步骤s103之后,还包括如下步骤:
[0098]
步骤s105、对应所述第二算子,保存所述第二计算核的分配方式至所述张量计算图中。
[0099]
具体的,所述张量计算图中每个算子都保存了其对应计算核的计算计算核的分配方式,具体如图7所示,所述张量计算图中保存了7个算子对应的计算核的分配方式。
[0100]
在一种可能的实现方式中,所述第二计算核的分配方式与所述第一计算核的分配方式中包含的计算核的数量是相同的,即在执行张量执行图中每个算子时,是通过相同的计算核进行计算的。
[0101]
本发明实施中,通过上述方式可以求出整个张量计算图中全部算子的计算核的分配方式,由于所述张量计算图中全部算子中都保存了计算核的分配方式,可以用于指导后续算子对输出数据的具体处理。
[0102]
图8是本发明实施例的一种张量计算图的算子执行方法流程图,具体包括:
[0103]
步骤s800、从全局存储器中获取张量计算图中输入算子的输入数据,并将该输入数据搬运到每个可用计算核的局部存储器中。
[0104]
其中,在该步骤s800中,输入算子的输入数据可根据一定的计算核的分配方式进行拆分后存储在各个计算核的局部存储器中,也可以直接将输入数据存储在每个计算核的局部存储器中。
[0105]
步骤s801、获取输入算子的计算核的分配方式。
[0106]
具体的,所述输入算子的计算核的分配方式为预先设置的,可直接在张量计算图中获取。
[0107]
步骤s802、每个计算核从其局部存储器中读取数据,并执行输入算子的计算逻辑,以及根据输入算子的计算核的分配方式,得到输入算子的输出数据分块。
[0108]
步骤s803、每个计算核将其得到的输入算子的输出数据分块存储在自己的局部存储器中。
[0109]
步骤s804、每个计算核从其局部存储器中读取数据,并执行张量计算图中每个中间算子的计算逻辑,得到每个中间算子的输出数据分块。
[0110]
步骤s805、每个计算核将其得到的每个中间算子的输出数据分块存储在自己的局部存储器中。
[0111]
步骤s806、每个计算核从其局部存储器中读取数据,并执行输出算子的计算逻辑,得到输出算子的输出数据分块。
[0112]
步骤s807、每个计算核将其得到的输出算子的输出数据分块存储在自己的局部存储器中。
[0113]
此时,张量计算图中的算子执行完毕。
[0114]
本发明实施例中,通过对计算资源的分配可以保证每个计算核在算子计算的过程中无需到全局存储器中获取需要的数据,只需要在自身对应的局部存储器中即可获取需要的数据,减少在计算过程中对数据在局部存储器和全局存储器之间的交换,提高处理效率。
[0115]
图9是本发明实施例的一种基于张量计算图的计算资源分配装置示意图。如图9所示,本实施例的装置包括获取单元901和确定单元902。
[0116]
其中,获取单元901,用于获取第一算子的输出数据的数据形状以及可用计算核数量;确定单元902,用于根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;所述获取单元901还用于,获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;所述确定单元902还用于,根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。
[0117]
可选的,该装置还包括:
[0118]
保存单元,用于在所述张量计算图中,保存对应于所述第一算子的所述第一计算核的分配方式,以及对应于所述第二算子的所述第二计算核的分配方式。
[0119]
可选的,所述获取单元还用于:
[0120]
获取所述张量计算图中所述每个算子的输入数据的数据形状和输出数据的数据形状;
[0121]
根据所述每个算子的计算逻辑、输入数据的数据形状和输出数据的数据形状,确定所述每个算子的输入数据与输出数据的维度对应关系。
[0122]
可选的,所述保存单元还用于:
[0123]
在所述张量计算图中保存对应于所述每个算子的输入数据与输出数据的维度对应关系。
[0124]
可选的,在对所述第一算子的输出数据的拆分维度进行拆分之前,所述确定单元还用于:
[0125]
根据预设的拆分方式与所述可用计算核数量,确定所述第一算子的输出数据的拆分维度。
[0126]
可选的,所述第一算子为所述张量计算图中的输出算子,所述第二算子为所述张量计算图中的输入算子和中间算子。
[0127]
可选的,所述获取单元还用于,响应于所述第二算子为输入算子,获取所述第二算子的输入数据,将所述第二算子的输入数据搬运至所述可用计算核的局部存储器中;
[0128]
获取所述第二算子的第二计算核的分配方式;
[0129]
该装置还包括:控制单元,用于控制每个所述可用计算核从其局部存储器中读取数据,并执行所述第二算子的计算逻辑,以及根据所述第二算子的第二计算核的分配方式,
得到所述第二算子的输出数据分块;
[0130]
控制每个所述可用计算核将所述第二算子的输出数据分块存储在所述局部存储器中。
[0131]
可选的,所述获取单元还用于,响应于所述第二算子中间算子,控制每个所述可用计算核从局部存储器中读取数据,并执行所述第二算子的计算逻辑,得到所述第二算子的输出数据分块;
[0132]
所述控制单元还用于,控制每个所述可用计算核在各自的所述局部存储器中保存所述第二算子的输出数据分块。
[0133]
本发明实施例中,还提供了一计算机程序指令,所述计算机程序指令在被处理器执行时实现上述实施例中任一项所述的方法。
[0134]
本发明实施例中,还提供了一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现上述实施例中任一项所述的方法。
[0135]
本发明实施例提供了一种芯片,包括存储器和处理核,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理核执行以实现上述实施例中任一项所述的方法。
[0136]
本发明实施例提供了一种板卡,所述板卡上包括所述芯片。
[0137]
本发明实施例提供了一种服务器,所述服务器上包括所述板卡。
[0138]
如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明实施例的各个方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。
[0139]
可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、光纤、便携式光盘只读存储器(cd-rom)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
[0140]
计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。
[0141]
可以使用包括但不限于无线、有线、光纤电缆、rf等或前述的任意适当组合的任意
合适的介质来传送实现在计算机可读介质上的程序代码。
[0142]
用于执行针对本发明实施例各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如java、smalltalk、c++等;以及常规过程编程语言如“c”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(lan)或广域网(wan)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
[0143]
上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图图例和/或框图描述了本发明实施例的各个方面。将要理解的是,流程图图例和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。
[0144]
还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或框图块或块中指定的功能/动作的指令的制品。
[0145]
计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。
[0146]
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种张量计算图的计算资源分配方法,其特征在于,该方法包括:获取第一算子的输出数据的数据形状以及可用计算核数量;根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。2.如权利要求1所述的方法,其特征在于,该方法还包括:在所述张量计算图中,保存对应于所述第一算子的所述第一计算核的分配方式,以及对应于所述第二算子的所述第二计算核的分配方式。3.如权利要求1所述的方法,其特征在于,所述获取所述张量计算图中每个算子的输入数据与输出数据的维度对应关系,包括:获取所述张量计算图中所述每个算子的输入数据的数据形状和输出数据的数据形状;根据所述每个算子的计算逻辑、输入数据的数据形状和输出数据的数据形状,确定所述每个算子的输入数据与输出数据的维度对应关系。4.如权利要求3所述的方法,其特征在于,所述方法还包括:在所述张量计算图中保存对应于所述每个算子的输入数据与输出数据的维度对应关系。5.如权利要求1所述的方法,其特征在于,在对所述第一算子的输出数据的拆分维度进行拆分之前,还包括:根据预设的拆分方式与所述可用计算核数量,确定所述第一算子的输出数据的拆分维度。6.如权利要求1-5中任一项所述的方法,其特征在于,所述第一算子为所述张量计算图中的输出算子,所述第二算子为所述张量计算图中的输入算子和中间算子。7.如权利要求6所述的方法,其特征在于,该方法还包括:响应于所述第二算子为输入算子,获取所述第二算子的输入数据,将所述第二算子的输入数据搬运至所述可用计算核的局部存储器中;获取所述第二算子的第二计算核的分配方式;控制每个所述可用计算核从其局部存储器中读取数据,并执行所述第二算子的计算逻辑,以及根据所述第二算子的第二计算核的分配方式,得到所述第二算子的输出数据分块;控制每个所述可用计算核将所述第二算子的输出数据分块存储在所述局部存储器中。8.如权利要求6所述的方法,其特征在于,该方法还包括:响应于所述第二算子为中间算子,控制每个所述可用计算核从局部存储器中读取数据,并执行所述第二算子的计算逻辑,得到所述第二算子的输出数据分块;控制每个所述可用计算核在各自的所述局部存储器中保存所述第二算子的输出数据分块。9.一种基于张量计算图的计算资源分配装置,其特征在于,该装置包括:获取单元,用于获取第一算子的输出数据的数据形状以及可用计算核数量;确定单元,用于根据所述第一算子的输出数据的数据形状与所述可用计算核数量,对
所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;所述获取单元还用于,获取张量计算图中每个算子的输入数据与输出数据的维度对应关系;所述确定单元还用于,根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。10.一种计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如权利要求1-8中任一项所述的方法。
技术总结
本发明实施例公开了一种张量计算图的计算资源分配方法、装置和可读存储介质。本发明实施例通过获取第一算子的输出数据的数据形状以及可用计算核数量,对所述第一算子的输出数据的拆分维度进行拆分,确定用于计算所述第一算子的第一计算核的分配方式;获取所述张量计算图中每个算子的输入数据与输出数据的维度对应关系;根据所述张量计算图中的算子拓扑结构、所述维度对应关系以及所述第一计算核的分配方式,确定所述第二算子的第二计算核的分配方式。通过上述方法,对计算资源的分配可以保证每个计算核在算子计算的过程中只需要在自身对应的局部存储器中即可获取需要的数据,提高处理效率。提高处理效率。提高处理效率。
技术研发人员:刘雷 谢启凯 何忠政
受保护的技术使用者:北京希姆计算科技有限公司
技术研发日:2022.01.12
技术公布日:2023/7/26
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
