一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种编译方法、装置、设备及存储介质与流程

2021-11-29 14:13:00 来源:中国专利 TAG:


1.本公开涉及人工智能技术领域,尤其涉及一种编译方法、装置、设备及存储介质。


背景技术:

2.在训练得到神经网络后,需将神经网络部署到目标终端上,用于实现不同应用场景中的各种需求。目前,在将神经网络部署到目标终端上时,一般是通过深度学习编译器按照预设的解析规则将神经网络解析成固定的拓扑序列,然后目标终端在进行神经网络推理的过程中,会按照该固定的拓扑序列所表示的算子执行顺序对输入神经网络的数据进行运算。虽然编译器在后端优化时,也能在一定程度上对算子进行融合或者调整部分算子的执行顺序,但这些优化还是基于最初输入给深度编译器的拓扑序列进行操作的。因此,当前的神经网络在部署到不同的芯片上时,算子的执行顺序是基本固定的。然而,神经网络的计算图中通常会包括很多个拓扑序列,针对不同类型的芯片,其对应的执行效率最高的拓扑序列可能也不一样,如果只是将神经网络按照预先设定的规则解析成某个固定的拓扑序列,可能无法最大程度的发挥芯片的计算能力,造成资源浪费,从而降低神经网络的推理效率。


技术实现要素:

3.本公开提供一种编译方法、装置、设备及存储介质。
4.根据本公开实施例的第一方面,提供一种编译方法,所述方法包括:
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.图1是本公开实施例的一种计算图的示意图。
53.图2是本公开实施例的一种神经网络的编译方法的流程图。
54.图3是本公开实施例的一种计算图的示意图。
55.图4是本公开实施例的一种计算图关键节点以及对计算图进行划分的示意图。
56.图5是本公开实施例的在计算图中新增计算单元以调整计算图的示意图。
57.图6是本公开实施例的一种神经网络的编译装置的逻辑结构的示意图。
58.图7是本公开实施例的一种电子设备的逻辑结构示意图。
具体实施方式
59.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
60.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
61.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
62.为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
63.在训练得到神经网络后,需将神经网络部署在特定的目标终端上,以对神经网络进行运用。相比于训练阶段,推理时对性能的要求更高,这就需要深度学习编译器能够最大程度地发挥硬件的计算能力。在将神经网络部署到目标终端上的推理芯片时,通常会通过深度学习推理框架将神经网络转化为计算图,然后对神经网络的计算图进行优化,基于优化后的计算图将神经网络编译成二进制指令,在目前终端上执行该二进制指令,完成神经网络的推理过程。通过对神经网络进行编译优化,使得复杂的神经网络在计算能力有限的移动终端上也可以应用。
64.如图1所示,为一种计算图的示意图,计算图是一种有向无环图,图中的节点表示神经网络中的算子,其中,relu表示激活、conv表示卷积、matmul表示矩阵乘法、mean表示取平均、add表示加法、apxy表示向量求和、sub表示除法、softmax表示激活,图中的边表示神经网络的输入数据的流向。通常,一个计算图可能包括多个拓扑序列,每个拓扑序列表示该拓扑序列包含的计算图中的算子的对应执行顺序。比如,如图1所示的计算图中,relu

conv1

matmul

mean

add1

conv2

apxy

sub

add2

softmax为一种拓扑序列,而relu

conv2

apxy

sub

add2

conv1

matmul

mean

add1

softmax为另一种拓扑序列。
65.目前,在将神经网络部署到目标终端时,通常是将神经网络按照预定的解析规则解析成固定的拓扑序列,然后基于该固定的拓扑序列将神经网络编译成二进制指令,以便目标终端的芯片执行该指令。也就是说,在推理过程中,目标终端上的芯片会按照该固定的拓扑序列表示的算子执行顺序对输入数据进行运算,即神经网络中的算子在目标终端的芯片上的执行顺序是固定的。然而,神经网络的计算图可能包括多种拓扑序列,针对不同的芯片,采用不同的算子执行顺序对应的执行效率也不一样。比如,针对某些芯片,芯片上可能包括多种类型的计算单元,不同的计算单元可以用于执行不同类型的算子,例如,卷积或者
矩阵乘法这两种类型的算子会有专用的计算单元执行,而其他类型的算子则会通过另外的计算单元执行,不同算子执行顺序(即不同的拓扑序列)就可能会对芯片上的计算单元的并行度产生影响,采用固定的拓扑序列可能会使得芯片上的某些计算单元在较长时间内闲置(比如,可能依赖于其他算子的计算结果进行计算),进而影响芯片整体的推理效率。
66.为了解决上述问题,本公开实施例提供了一种编译方法,可以基于运行神经网络的目标芯片的硬件性能,从神经网络的计算图所包括的拓扑序列中,筛选出相对于目标芯片来说执行效率较高的目标拓扑序列,并基于该目标拓扑序列得到神经网络对应的机器指令,输出给目标芯片执行,从而可以最大程度的发挥目标芯片的计算能力,提高推理效率。
67.本公开实施例中提供的编译方法可以用于深度学习编译器或者ai芯片的工具链等深度学习编译优化工具中。深度学习编译优化工具可以将神经网络进行优化并编译成机器可识别的二进制指令,以输出给目标终端上的芯片执行。
68.具体的,本公开实施例提供的神经网络编译方法如图2所示,可以包括以下步骤:
69.s202、确定待编译的神经网络对应的计算图,所述计算图中的节点表示所述神经网络中的算子,所述计算图中的边表示所述神经网络中的数据流向;
70.s204、从所述计算图的多个拓扑序列中确定目标拓扑序列,其中,每个所述拓扑序列表示该拓扑序列包含的所述神经网络中的算子的对应执行顺序;
71.s206、基于所述目标拓扑序列确定所述神经网络对应的机器指令,以使目标芯片执行所述机器指令。
72.在步骤202中,可以对待编译的神经网络进行解析,以得到该神经网络的计算图。比如,可以对神经网络对应的caffe模型文件进行解析,确定神经网络的计算图。待编译的神经网络可以是各种类型的神经网络,比如,卷积神经网络等等。神经网络的计算图用于表示数据从神经网络输入到输出的整个计算流程,计算图为一种有向无环图,计算图中的节点可以表示神经网络中的一种算子,比如,卷积、矩阵乘法、激活、加法、除法、取均值等等,计算图中的边的箭头指向可以表示神经网路中的数据流向。
73.在步骤s204中,当确定神经网络的计算图后,可以从神经网路的计算图的多个拓扑序列中确定目标拓扑序列。通常而言,一个计算图包括多个拓扑序列,每个拓扑序列表示执行该拓扑序列中包含的神经网络中的算子的对应执行顺序。以图3所示的一个较为简单的计算图为例,该计算图包括的拓扑序列有conv

matmul

mean

softmax和conv

mean

matmul

softmax,不同拓扑序列中算子的对应执行顺序也不同。对于不同的拓扑序列,其在目标芯片上的执行效率可能不一样,因而,可以从多个拓扑序列中选择目标芯片执行效率较高的目标拓扑序列,比如,可以结合目标芯片的硬件性能参数,比如,目标芯片中的计算单元的种类和数目、计算单元的计算能力、或者内存的大小等参数确定执行效率较高(比如,高于一定阈值)的拓扑序列,作为目标拓扑序列。也可以是根据目标芯片按照拓扑序列对神经网络输入数据的运算时长确定运算时长小于预设时长的拓扑序列作为目标拓扑序列。只要是可以从多个拓扑序列中选取出执行效率较高的目标拓扑序列的方式都适用,本公开实施例不作限制。
74.目标芯片可以是对神经网络进行推理的各种类型的芯片,比如,可以是cpu、gpu、各种ai芯片或者是其他具有对神经网络进行推理功能的芯片,本公开实施例不做限制。在步骤s206中,在确定目标拓扑序列后,可以基于目标拓扑序列对神经网络进行编译,得到机
器指令,然后输入到目标芯片中,以便目标芯片执行该机器指令,完成神经网络的推理过程。
75.通过确定待编译的神经网络的计算图,从计算图的多个拓扑序列中筛选出目标芯片执行效率较高的目标拓扑序列,然后基于目标拓扑序列对神经网络进行编译得到机器指令,供目标芯片执行。通过根据目标芯片的硬件能力,筛选出较优的目标拓扑序列,再进行神经网络的编译,可以最大程度的发挥目标芯片的计算能力,提高推理过程中的处理效率。
76.在一些实施例中,可以根据目标芯片按照每个拓扑序列所表示的算子执行顺序对神经网络的输入数据进行运算的运算时长,从这多个拓扑序列中确定目标拓扑序列,运算时长代表了该拓扑序列在目标芯片上的执行效率,运算时长越短,其对应的执行效率越高,因此,可以从多个拓扑序列中选取运算时长符合一定条件的拓扑序列,作为目标拓扑序列,比如,可以选择运算时长最短的拓扑序列。当然,在一些场景,如果遍历每个拓扑序列以筛选出运算时长最短的拓扑序列,耗费的时间和计算资源过多,因而,也可以仅筛选出运算时长小于预设时长的一种拓扑序列即可,以保证目标芯片的执行效率较优。
77.在一些实施例中,本公开实施例中的目标芯片包括至少两种类型的计算单元,该至少两种类型的计算单元可以并行地对神经网络的输入数据进行不同类型的运算,即该至少两种计算单元可以并行地执行神经网络中不同类型的算子。针对通用型的芯片,比如,cpu、gpu等,由于其只有一个计算单元,其不存在多个计算单元并行执行不同类型的算子的情况,因而,针对这种芯片,对于不同的拓扑序列,其运算时长差异不大。而对于包括至少两种类型的计算单元的目标芯片,由于该至少两种类型的计算单元可以并行地执行不同类型的算子,因而,不同的算子执行顺序(即不同拓扑序列)可能会对计算单元之间的并行产生较大影响,比如,针对某些拓扑序列,其可能会造成有些计算单元长时间的处于闲置状态,严重浪费计算资源,降低目标芯片的处理效率。因而,本公开实施例提供的编译方法,主要用来提升具有至少两种类型的计算单元的目标芯片的处理效率,而cpu、gpu等则有其对应的优化手段。
78.在从计算图的多个拓扑序列中确定目标拓扑序列时,一种方式是直接遍历计算图中的所有拓扑序列,然后确定目标芯片按照每个拓扑序列表示的算子执行顺序对输入数据进行运算的运算时长,然后基于运算时长筛选出目标拓扑序列。当然,这种方式可能对于结构简单,拓扑序列较少的计算图比较适用,而对于结构较复杂的计算图,要遍历其所有的拓扑序列较为繁琐。
79.因而,在一些实施例中,可以先将计算图划分成多个子图,确定出每个子图对应的较优或最优的目标子拓扑序列,然后将各个目标子拓扑序列链接起来,得到整个计算图的目标拓扑序列。其中,在进行子图划分时,划分得到的每个子图需包括至少两个子拓扑序列,然后针对每个子图,可以从子图的至少两个拓扑序列中确定目标子拓扑序列,目标子拓扑序列基于目标芯片按照该至少两个子拓扑序列表示的算子执行顺序对输入数据进行运算的运算时长确定,比如,目标子拓扑序列可以是该子图的拓扑序列中对应的运算时长最短的子拓扑序列,或者是该子图的子拓扑序列中运算时长小于预设时长的一种子拓扑序列,只要保证目标芯片按照该目标子拓扑序列的算子执行顺序对数据进行运算时,具有较高的处理效率即可。在得到每个子图的目标子拓扑序列后,可以将目标子拓扑序列按照计算图中的数据流向链接起来,即可以得到整个计算图的目标拓扑序列。通过将计算图划分
成多个子图,筛选出每个子图的较优或者最优的目标子拓扑序列,再链接得到整个计算图的较优或最优的目标拓扑序列,可以将复杂的计算图简单化,方便最优拓扑序列的筛选。
80.当然,当子图的子拓扑序列组合数太多时,可以使用随机选取的方法,从候选的子拓扑序列中随机选取指定数量的候选子拓扑序列,并从候选子拓扑序列中选取较优或者最优的目标子拓扑序列,也可以对子图本身进行特征归纳和提取,借助机器学习或者蒙特卡洛等方法优化寻找最优子拓扑序列的过程,以提高筛选目标子拓扑序列的处理效率。
81.在一些实施例中,在对计算图进行划分,得到多个子图时,可以先从计算图的节点中确定关键节点,然后基于该关键节点将计算图划分成多个子图。其中,关键节点为计算图中至少两条路径的汇聚点,即计算图中存在具有两条或者两条以上路径的分支的节点,节点具有两条或者两条以上分支,表示经过该节点的时存在多种执行顺序。比如,如图4所示,图中灰色背景的算子节点表示关键节点,从图4中可知,针对每个关键节点,至少可以从该节点引出两条路径,或者至少有两条路径汇聚于该节点。在确定关键节点后,可以基于关键节点将计算图划分成多个子图,比如,在一些实施例中,可以将邻近的至少两个关键节点以及该至少两个关键节点之间的节点和边构成的计算图作为一个子图。
82.比如,如图4中的选框1所框选的部分,可以将相邻两个关键节点以及位于该相邻两个关键点节点之间的节点和边构成的计算图作为一个子图,通过将相邻两个关键节点之间的节点和边构成的计算图作为一个子图,每个子图中仅包括两个关键节点,即子图的开始和结束为关键节点,这样每个子图中包括的拓扑序列也比较少。当然,也可以将邻近的多个关键节点以及该多个关键节点之间的节点和边构成计算图作为一个子图,如图4中选框2所框选的部分,比如,每个子图中可以包括2个以上的关键节点,这样每个子图的拓扑序列种类会多一些,但子图的数量会少一些。
83.在一些实施例中,在对计算图进行划分的时候,如果是将相邻两个关键节点之间的部分作为一个子图,那么得到的子图数量可能会比较多,后续对子图进行编译和链接时间也较长。为了减少子图的数量,节省后续编译和链接的时间,可以从划分得到的子图中确定节点数量小于预设数量的目标子图,然后将目标子图与目标子图的邻近子图融合。比如,针对单个节点构成的子图,可以将其与前一个或者后一个子图合并,以减少子图数量。
84.在一些实施例中,在根据目标拓扑序列确定神经网络对应的机器指令时,可以先确定每个子图对应的目标子拓扑序列对应的机器指令,然后将每个目标子拓扑序列对应的机器指令按照计算图中指示的数据流向链接,得到整个神经网络对应的机器指令。比如,可以确定每个子图对应的目标子拓扑序列对应的二进制机器码,然后通过链接器(linker)将不同子图生成的二进制机器码按照计算图中指示的数据流向进行组合,从而将单独编译的神经网络子图组合成一个完整的神经网络。
85.在一些实施例中,在确定目标芯片按照每个拓扑序列表示的运算顺序对输入数据进行运算的运算时长时,可以针对每个拓扑序列,确定目标芯片按照该拓扑序列表示的算子执行顺序对输入数据进行运算对应的机器指令,然后利用目标芯片执行该机器指令,得到目标芯片执行该机器指令的时长,即为目标芯片按照该拓扑序列表示的算子执行顺序对输入数据进行运算的运算时长。这种方式需要将拓扑序列对应的机器指令真实地在目标芯片上执行一次,得到的运算时长比较准确,但是这种方式需要目标芯片参与,比较繁琐和耗时。
86.在一些实施例中,为了实现无需真实地在目标芯片上运行,也可以预估出每个拓扑序列对应的运算时长,可以预先构建一个代价模型,该代价模型可以根据目标芯片的硬件参数以及拓扑序列的类型预估目标芯片按照每个拓扑序列表示的算子执行顺序对输入数据进行运算的运算时长。其中,目标芯片执行机器指令所耗费的时间主要包括目标芯片从存储设备中读取指令的时间、目标芯片中计算单元对输入数据进行计算的计算时间,以及运算过程中一些等待时间(一般可以忽略不计)。而从存储设备中读取指令的时间可以根据目标芯片的端口的传输带宽以及传输的数据量确定,对数据进行计算的时间也可以根据待计算的数据量以及目标芯片的计算单元的计算能力确定,因此,代价模型的运算逻辑是:根据目标芯片的硬件性能参数(比如,目标芯片包括几种类型的计算单元、每种类型的计算单元的数量、每种类型的计算单元的计算能力、目标芯片读取数据的接口的数据传输带宽等)、输入数据数据量的大小以拓扑序列指示的算子执行顺序(比如,先卷积,再相加,或者相加,再卷积等)预估出运算时长。通过利用该代价模型模拟基于各拓扑序列得到的机器指令在真实的目标芯片运行的情况,预估出运算时长,从而不需要在真实的硬件上运行即可完成神经网络拓扑序列的寻优过程。
87.在一些实施例中,在基于预设的代价模型确定目标芯片按照每个拓扑序列表示的算子执行顺序对输入数据进行运算的运算时长时,可以针对每个拓扑序列,确定目标芯片按照该拓扑序列表示的算子执行顺序对输入数据进行运算对应的机器指令,然后再根据预设的代价模型以及该机器指令确定运算时长。当然,由于基于拓扑序列将神经网络编译成二进制指令这个过程比较耗时,在一些实施例中,可以对构建的代价模型进行优化和改进,使其可以直接根据拓扑序列预估出运算时长,从而可以省去基于拓扑序列对神经网络进行编译的步骤,节省了编译这一步骤所耗费的时间。
88.在一些实施例中,在确定待编译的神经网络对应的计算图时,可对所述神经网络进行解析,得到神经网络对应的原始计算图。由于目标芯片的内存不一样,针对原始计算图中的有些算子,目标芯片的内存可能过小,无法存储该算子对应的运算数据,导致无法一次完成该算子的运算。其中,运算数据包括该算子对应输入数据、模型参数以及输出数据等各种张量。这种情况下,可以根据目标芯片的内存大小以及该原始计算图中每个算子对应的运算数据占用的内存大小对原始计算图中的算子进行调整,以得到神经网络最终的计算图。
89.在一些实施例中,在根据目标芯片的内存大小以及原始计算图中每个算子对应的运算数据占用的内存大小对原始计算图中的算子进行调整,以得到最终的计算图时,可以针对原始计算图中的每个算子,分别执行以下操作:首先,可确定该算子对应的运算数据所占内存的大小,在该算子对应的运算数据所占内存大小大于预设阈值的情况下,如图5所示,可以在原始计算图中新增一个或多个与该算子同一类型的算子,从而可以将运算数据拆分成多份数据后分别通过新增后的多个算子运算,使得每个算子的运算数据所占内存不会超过目标芯片的内存。其中,该预设阈值基于目标芯片的内存大小确定,比如,可以是目标芯片的内存大小,或者目标芯片的内存大小减去一定的缓冲值得到的数值。针对原始计算图中的每个算子,都可以重复上述操作,然后基于新增后的算子调整原始计算图,以得到最终的计算图。
90.在一些实施例中,在将每个算子的运算数据拆分成多份数据时,可以根据该算子
的类型以及目标芯片的硬件性能参数确定对运算数据进行拆分的拆分维度,然后在所确定的拆分维度上对运算数据进行拆分,以得到多份数据。比如,假设输入数据为10帧100通道的图像,那么可以把10帧100通道的图像拆分成2份数据,每份数据为5帧100通道的图像,或者也可以在通道维度上将这10帧100通道的图像拆分成2份数据,每份数据为10帧50通道的图像。具体选用哪种拆分方式,可以根据算子的类型以及目标芯片的硬件性能参数确定,比如,不同算子计算方式不同,其适用的拆分方式也不一样,另外,针对目标芯片内存大小不一样,也需选用与其适配的方式进行拆分,以满足拆分后的数据满足目标芯片的内存限制。举个例子,对于conv、fc(fullconnection,全连接)、depthwise(深度可分离卷积)等算子,优先在图像数据的帧数维度上对数据进行拆分,如果帧数维度上无法拆分或者拆分后依旧超出目标芯片的内存限制,就在通道维度上继续进行拆分。
91.在一些实施例中,该运算数据可以是图像数据,对图像数据进行拆分的拆分维度包括以下一种或多种:该图像数据的帧数维度、该图像数据的通道维度、该图像数据的宽度维度、或者是该图像数据的高度维度。
92.为了进一步解释本公开实施例提供的神经网络编译方法,以下结合一个具体的实施例加以解释。
93.相关技术中,在将神经网络部署到目标终端时,通常是按照预设的解析规则将神经网络解析成固定的拓扑序列,并基于该固定的拓扑序列将神经网络编译成二进制指令,输出给目标终端的目标芯片执行。对于cpu或者gpu这些通用性较强的处理器,由于其只有单个计算单元,需要考虑的问题主要是处理好线程级、指令级的并行,因而采用这种方式对处理效率的影响不大。但是,对于某些ai芯片或者是某些领域的专用加速器,一般其会包括多种类型的计算单元,不同类型的算子可能是在不同类型的计算单元上执行,比如,针对有些ai芯片,其包括进行访存的dau单元、专门进行卷积等运算的mpu单元以及进行矢量计算的vpu单元,各个计算单元之间可以并发执行。此时,神经网络中算子的执行顺序(对应于拓扑序列)会对不同计算单元的并行度产生影响,如直接使用固定的拓扑序列可能会使得某些计算单元在较长时间内闲置(数据依赖),进而影响整体的推理效率。
94.基于此,本实施例提供了一种神经网络编译方法,具体包括以下步骤:
95.1、基于神经网络各算子运算数据所占内存大小以及目标芯片内存大小对计算图进行更新。
96.首先,可以将神经网络的caffe文件转化为计算图,考虑到目标芯片内存的有限性,对caffe模型的每个算子,如果算子的运算数据(即输入输出tensor)所占据的空间超出设定的大小(基于目标芯片内存大小设置),则将该算子的运算数据进行拆分,拆分成多份多份数据,并且在计算图中新增一个或者多个同样的算子,使得拆分后的每份数据对应一个算子,并且每个算子对应的运算数据可以在目标芯片上一次运算完成。针对计算图中的每个算子,都执行同样的操作,直到计算图中的所有算子单独运行所需要的内存空间都不会超过预先设定的大小,即得到更新后的计算图。
97.在对算子的运算数据进行拆分时,可以根据算子的类型以及目标芯片的内存大小确定拆分维度,在该维度上对数据进行拆分。比如,对于conv、fc、depthwise等算子,优先在图像帧数维度上进行算子拆分,如果图像帧数维度无法拆分或者拆分后依旧超出目标芯片的内存限制,就在图像通道维度上继续进行拆分。
98.对于其余类型的算子,不在规约操作所在的维度进行拆分,而从其他维度中选择拆分后实现复杂度最低的维度。对于resize(调整大小)、pooling(池化)操作,由于涉及到图像高度维度和宽度维度上的规约操作,最好在图像帧数维度或者图像通道数维度上进行拆分;而对于图像通道维度和图像宽度维度上的transpose(转置)操作,则可以在图像帧数维度和图像高度维度上进行拆分。
99.2、将更新后的计算图划分成多个子图
100.遍历和记录从更新后的计算图的输入节点到输出节点的所有路径,对所有的路径取交集,得到更新后的计算图中的所有关键节点,关键节点即为计算图中两条路径的汇聚点,将相邻两个关键节点以及位于这两个关键节点之间的节点和边构成的计算图作为一个子图。然后将单个节点构成的子图向前序子图合并,从而将整个的神经网络计算图拆分成多个子图。其中,对子图进行合并的主要目的是减少子图的个数,节省编译和链接时间。
101.3、子图的拓扑序列寻优
102.在拆分得到多个子图后,由于子图之间一定是按顺序执行的,因此只需要优化每个子图的执行时间,就可以使神经网络整体的运行时间最短。
103.为了模拟子图的各拓扑序列对应的机器指令在目标芯片上的执行时长,本实施例构建了一个代价模型,该代价模型可以读入工具链的编译器基于各拓扑序列编译得到的二进制指令流,并模拟目标芯片的执行过程产生一个预估的执行时间。
104.代价模型的执行逻辑如下:
105.由于目标芯片实际执行二进制指令流所耗费的时间主要包括以下几部分时间:
106.(1)通过目标芯片的数据读取接口从存储器中读取该二进制指令的时间t1。
107.t1主要和目标芯片的数据读取接口的数据传输带宽和要读取的数据量有关,因而,代价模型可以基于目标芯片数据都区接口的一些性能参数(比如,数据传输带宽)和待读取的数据量(比如,神经网络的输入数据)估算出时间t1。
108.(2)通过计算单元对读取的数据进行运算的时间t2。
109.t2主要和目标芯片中计算单元的性能参数(比如,计算单元的类型、计算单元的数量、计算单元的计算能力等)以及神经网络拓扑序列(即算子的执行顺序有关),因而代价模型可以基于目标芯片计算单元的性能参数和神经网络拓扑序列估算出时间t2。
110.(3)实际执行过程中的一些等待时间,这部分时间由于通常较短,因而可以忽略不计。
111.基于上述代价模型,就可以得到子图在给定代价模型下的最优拓扑序列,主要的步骤如下:
112.(1)遍历子图所有可能的拓扑序列;
113.(2)对每一种拓扑序列使用工具链进行编译,生成对应的二进制指令文件,并根据代价模型得到该拓扑序列下子图的执行时间;
114.(3)选择执行时间最短的拓扑序列,作为子图在给定代价模型和工具链版本下的最优拓扑序列。
115.当然,编译过程较为耗时,也可以直接根据拓扑序列模拟在目标芯片上的运行时间。另外,当子图的拓扑序列组合数太多时,可以使用随机选取的方法,从拓扑序列中随机选取指定数量的候选序列进行寻优,也可以对子图本身进行特征归纳和提取,借助机器学
习或者蒙特卡洛等方法优化查找过程。
116.4、在得到不同子图的最优拓扑序列后,可以使用链接器(linker)将不同子图生成的二进制机器码按照原始的数据流向进行组合,从而将单独编译的神经网络子图组合成一个完整的神经网络模型。
117.通过本实施例提供的神经网络编译方法,考虑了目标芯片内存空间的有限性,对计算图中各算子的运算数据进行了更细粒度的切分,并且更新了计算图中的算子的数量,使得每个算子在目标芯片上可以一次性执行完毕。对更新后的计算图根据关键节点进行了拆分得到多个子图,并确定每个子图的最优的拓扑序列,对不同子图的最优拓扑序列进行链接,得到整个计算图的最优拓扑序列,基于该最优拓扑序列对神经网络进行编译,得到机器指令输出给目标芯片执行,可以在更大程度上发挥不同目标芯片不同计算单元之间的并行性,提高目标芯片的处理效率。另外,本技术通过构建的代价模型预估目标芯片的执行时间,不需要在真实的硬件上运行即可完成拓扑序列的寻优过程。
118.与本公开实施例提供的方法相对应,本公开实施例还提供了一种神经网络编译装置,如图6所示,所述装置60包括:
119.计算图确定模块61,用于确定待编译的神经网络对应的计算图,所述计算图中的节点表示所述神经网络中的算子,所述计算图中的边表示所述神经网络的输入数据的流向;
120.筛选模块62,用于从所述计算图的多个拓扑序列中确定目标拓扑序列,其中,每个所述拓扑序列表示该拓扑序列包含的所述神经网络中的算子的对应执行顺序;
121.编译模块63,用于基于所述目标拓扑序列确定所述神经网络对应的机器指令,以使目标芯片执行所述机器指令。
122.在一些实施例中,所述目标拓扑序列基于所述目标芯片按照每个所述拓扑序列表示的所述对应执行顺序对所述神经网络的输入数据进行运算的运算时长确定。
123.在一些实施例中,所述目标芯片包括至少两种类型的计算单元,所述至少两种类型的计算单元可以并行地对所述输入数据进行不同类型的运算。
124.在一些实施例中,所述筛选模块用于从所述计算图的多个拓扑序列中确定目标拓扑序列,具体用用于:
125.将所述计算图划分成多个子图,其中,每个子图包括至少两个子拓扑序列;
126.针对每个子图,从所述每个子图的至少两个子拓扑序列中确定目标子拓扑序列;所述目标子拓扑序列基于所述目标芯片按照所述至少两个子拓扑序列表示的所述对应执行顺序对所述输入数据进行运算的运算时长确定;
127.基于所述每个子图的目标子拓扑序列得到所述目标拓扑序列。
128.在一些实施例中,所述筛选模块用于将所述计算图划分成多个子图,具体用于:
129.从所述计算图的节点中确定关键节点,其中,所述关键节点为所述计算图中至少两条路径的汇聚点;
130.基于所述关键节点将所述计算图划分成多个子图。
131.在一些实施例中,基于所述关键节点将所述计算图拆分成多个子图,包括:
132.将邻近的至少两个关键节点以及位于所述至少两个关键节点之间的节点和边构成的计算图作为一个子图。
133.在一些实施例中,所述筛选模块用于所述计算图拆分成多个子图之后,还用于:
134.确定所述子图中节点数量小于预设数量的目标子图;
135.将所述目标子图与所述目标子图的邻近子图融合。
136.在一些实施例中,所述编译模块用于基于所述目标拓扑序列确定所述神经网络对应的机器指令,具体用于:
137.确定每个所述目标子拓扑序列对应的机器指令;
138.将每个所述目标子拓扑序列对应的机器指令按照所述计算图中的数据流向链接,得到所述神经网络对应的机器指令。
139.在一些实施例中,所述目标芯片按照每个所述拓扑序列表示的所述执行顺序对所述输入数据进行运算的运算时长基于以下方式确定:
140.针对每个所述拓扑序列,确定目标芯片按照每个所述拓扑序列表示的算子执行顺序对所述输入数据进行运算对应的机器指令;
141.基于所述目标芯片执行所述机器指令的时长确定所述运算时长;或
142.针对每个拓扑序列,基于预设的代价模型确定所述目标芯片按照每个所述拓扑序列表示的所述对应执行顺序对所述输入数据进行运算的运算时长,其中,所述代价模型用于根据所述目标芯片的硬件参数以及所述拓扑序列表示的所述对应执行顺序预估所述运算时长。
143.在一些实施例中,基于预设的代价模型确定所述目标芯片按照每个所述拓扑序列表示的所述对应执行顺序对所述输入数据进行运算的运算时长,包括:
144.针对每个拓扑序列,确定目标芯片按照每个所述拓扑序列表示的所述对应执行顺序对所述输入数据进行运算对应的机器指令;
145.基于预设的代价模型以及所述机器指令确定所述运算时长。
146.在一些实施例中,所述计算图确定模块用于确定待编译的神经网络对应的计算图时,具体用于:
147.对所述神经网络进行解析,得到所述神经网络对应的原始计算图;
148.根据所述目标芯片的内存大小以及所述原始计算图中每个算子对应的运算数据占用的内存大小对所述原始计算图中的算子进行调整,以得到所述计算图。
149.在一些实施例中,所述计算图确定模块用于根据所述目标芯片的内存大小以及所述原始计算图中每个算子对应的运算数据占用的内存大小对所述原始计算图中的算子进行调整,以得到所述计算图时,具体用于:
150.针对所述原始计算图中的每个算子,分别执行以下操作:
151.在所述算子对应的运算数据所占内存大小大于预设阈值的情况下,在所述原始计算图中新增至少一个与所述算子同一类型的算子,以将所述运算数据拆分成多份数据后分别通过新增后的多个算子运算;其中,所述预设阈值基于所述目标芯片的内存大小确定;
152.基于新增后的算子调整所述原始计算图,以得到所述计算图。
153.在一些实施例中,所述计算图确定模块用于所述将所述运算数据拆分成多份数据时,具体用于:
154.基于所述算子的类型以及所述目标芯片的硬件性能参数确定对所述运算数据进行拆分的拆分维度;
155.在所述拆分维度上对所述数据进行拆分,以得到多份数据。
156.在一些实施例中,所述运算数据包括图像数据,所述拆分维度包括以下一种或多种:所述图像数据的帧数维度、所述图像数据的通道维度、所述图像数据的宽度维度、所述图像数据的高度维度。
157.此外,本公开实施例还提供一种电子设备,如图7所示,所述电子设备包括处理器71、存储器72、存储在所述存储器72可供所述处理器71执行的计算机指令,所述处理器71执行所述计算机指令时,可实现上述各实施例中所述的方法。
158.本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
159.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd

rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
160.通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
161.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
162.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
163.以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献