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

用于神经网络模型的编译方法和相关产品与流程

2022-11-13 11:09:27 来源:中国专利 TAG:


1.本公开一般地涉及编译领域。更具体地,本公开涉及一种用于神经网络模型的编译方法、编译器、用于神经网络模型编译的设备和计算机可读存储介质。


背景技术:

2.随着人工智能领域的高速发展,作为该领域研究热点之一的神经网络算法得到广泛应用。为了高效执行神经网络算法,当前通常使用人工智能处理器(简称“智能处理器”)来进行加速。在运算过程中,神经网络算法将产生大量的标量运算和张量运算。然而,当前的神经网络硬件架构并没有针对该标量运算和张量运算来优化处理,从而导致处理标量运算和张量运算的效率不高。特别地,当前并没有有效的方案来将神经网络模型的各类运算合理地分发到硬件设备上,使得模型的推断(“inference”)性能达到最优。进一步,由于没有相应的优化处理,神经网络的运算也未得到良好的加速并由此造成计算系统整体性能无法得到提升。


技术实现要素:

3.鉴于上述背景技术部分所提及的技术问题,本公开提供了一种用于优化编译的方案。利用本公开的方案,可以在编译过程中将神经网络模型所涉及的运算进行划分和评估,并且根据评估结果将运算分配给不同类型的处理器以便执行。由此,本公开的方案可以加速神经网络的运算,提升神经网络计算系统的整体性能。基于此,本公开在如下的多个方面中提供用于优化编译的方案。
4.在第一方面中,本公开提供了一种用于神经网络模型的编译方法,包括:对所述神经网络模型进行运算分析,以获取在执行所述神经网络模型时所要进行的张量运算和标量运算;对所述张量运算和标量运算在多个处理器上执行时的性能指标进行评估;以及根据所述评估的评估结果将所述张量运算和标量运算分配至相应的处理器以便执行。
5.在第二方面中,本公开提供了一种编译器,包括:运算分析单元,其配置成对神经网络模型进行运算分析,以获取在执行所述神经网络模型时所要进行的张量运算和标量运算;运算分配单元,其配置成:对所述张量运算和标量运算在多个处理器上执行时的性能指标进行评估;以及根据所述评估的评估结果将所述张量运算和标量运算分配至相应的处理器以便执行。
6.在第三方面中,本公开提供了一种用于神经网络模型编译的设备,包括:处理器;存储器,其存储有程序,当所述程序由处理器执行时,使得所述设备执行前述的编译方法及其将在下文描述的多个实施例。
7.在第四方面中,本公开提供了一种计算机可读存储介质,其上存储有用于神经网络模型编译的程序,当所述程序由一个或多个处理器执行时,使得实现前述的编译方法及其将在下文描述的多个实施例。
8.利用本公开所提供的编译方案,可以对神经网络模型的运算根据张量运算和标量
运算进行划分,以便合理地分配至适合的处理器(例如通用处理器或智能处理器)处进行执行。在分配过程中,本公开对张量运算和标量运算在处理器上运行时的性能指标进行评估,从而根据评估结果来进行分配。基于此,本公开的编译优化方案可以用于加速神经网络的运算从而获得良好的加速比,并且也提升了计算系统的整体性能。另外,由于性能指标的引入,将张量运算和标量运算分配至合适的处理器也更为准确,从而也显著减小了神经网络运算的成本和功耗比。在应用于包括主机(其包括通用处理器)和设备(其包括智能处理器)的异构架构的计算系统中时,本披露的方案可以在计算系统中合理地分配张量运算和标量运算,从而优化了计算系统的操作性能并提升了计算系统的计算效率。
附图说明
9.通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
10.图1是示出根据本公开实施例的用于神经网络模型的编译方法的流程图;
11.图2是示出根据本公开实施例的编译器的简化框图;
12.图3是示出根据本公开实施例的编译器的详细框图;
13.图4是示出根据本公开实施例的运算分配单元的示意框图;
14.图5是示出根据本披露实施例的一种组合处理装置的结构图;以及
15.图6是示出根据本披露实施例的一种板卡的结构示意图。
具体实施方式
16.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
17.鉴于当前神经网络模型中的标量运算和张量运算的效率不高,本公开提出了在神经网络模型的编译过程对标量运算和张量运算进行划分,并且对标量运算和张量运算在处理器上执行的性能指标进行评估,并且根据评估结果来将标量运算和张量运算分配到合适的处理器上。在一个实施例中,前述性能指标的评估可以基于代价函数和/或收益函数。在另一个实施例中,前述的处理器可以包括多种类型的处理器,包括通用处理器(cpu)或图形处理器(gpu)。在一个实施场景中,当前述的处理器是多核处理器时,本公开的方案可以将标量运算或张量运算分配到合适的处理器核上。
18.图1是示出根据本公开实施例的用于神经网络模型的编译方法100的流程图。如图1所示,在步骤s102处,对神经网络模型进行运算分析,以获取在执行神经网络模型时所要进行的张量运算(“tensor op”)和标量运算(“scalar op”)。在一个实施方式中,可以在编译得到神经网络模型的中间表达的基础上,对神经网络模型进行运算分析,以获得前述的两种运算。
19.关于本披露的神经网络模型,就结构而言,其通常可以包括输入层、输出层以及位于所述输入层和输出层之间的隐藏层。当给定训练样本后,神经网络的输入层和输出层的
节点数就确定了,而隐藏层的层数和神经元的个数可以调整。就表现形式而言,神经网络模型也可以以计算图的形式来表示。在一个实施场景中,该计算图可以包括多个算子(op)和用于连接算子的“边”,其中边体现算子执行时彼此之间的依赖关系或算子之间的数据传递关系,而算子是通过将神经网络中大量的共性运算进行封装而得到的,例如卷积算子、最大池化算子或relu算子(即激活函数算子)。在本披露的上下文中,前述算子可以包括用于进行张量运算的算子和用于进行标量运算的算子。
20.关于前述中间表达,如本领域技术人员所知,编译器通常可以分为前端和后端。在编译过程中,前端会对所输入的程序进行例如包括词法分析、语法分析或语义分析等各类分析,并且接着生成类似于数据结构的中间表达ir(intermediate representation)。此后,由编译器的后端对ir进行优化,然后生成目标代码。本技术实施例的编译器可以是指神经网络编译器,如tvm等。该神经网络编译器可以从神经网络编程框架(如tensorflow、pytorch或caffe等)接收神经网络模型。接着,由编译前端首先对神经网络进行解析和重构,从而获得上文所提到的计算图。然后,可以利用编译器中的优化器对生成的计算图进行融合(例如多个算子的融合)或剪枝(例如去除计算图中与最终输出节点无关的边和算子)等优化操作,从而获得图形式的中间表达,即前述的“ir”。接着,可以将该图形式的中间表达转换为与硬件相适配的中间表达。最后,可以根据该硬件相适配的中间表达来生成该硬件上能够执行的代码,也即本披露的代码生成单元所执行的操作。
21.进一步,上文获取的张量运算可以包括但不限于向量运算、矩阵运算(如卷积运算)等运算;标量运算可以涉及参数运算、控制操作以及循环次数调度等运算。在一个实施例中,进行运算分析以获取所要进行的张量运算和标量运算可以包括,根据运行神经网络模型的硬件配置来对所述神经网络模型进行编译,以获得执行神经网络模型时所要进行的张量运算和标量运算。这里,运行神经网络模型的硬件配置可以涉及运算神经网络模型的计算系统的处理器个数、分布、所支持的计算颗粒度(例如8位、16位、32位、64位或更高位数据的计算)、片上和片外数据存储布置等。
22.在一个实施例中,上述的编译可以涉及对神经网络模型执行张量形状推导、张量分块和张量优化处理中的一项或多项,以获得执行神经网络模型时所要进行的张量运算。进一步地,上述的张量分块过程中不可避免的会产生一部分标量运算,如循环运算等。附加地,在一个实施例中,前述的编译还可以包括标量运算的标量优化,以获得执行神经网络模型时所要进行的标量运算。该执行神经网络模型时所要进行的标量运算可以包括但不限于神经网络模型中包含的标量运算,以及张量分块过程中产生的标量运算。在一个场景中,本公开还提出在编译中将执行形状推导、分块和优化处理中的一项或多项所产生的标量运算进行标量优化。关于形状推导、分块和优化操作,稍后将结合图3进行详细地描述。
23.接着,在步骤s104处,对上述的张量运算和标量运算在多个处理器上执行时的性能指标进行评估。在本公开的上下文中,处理器可以是包括在异构架构系统中的通用处理器和智能处理器(例如“gpu”)。在一些场景中,当智能处理器是多核处理器时,本公开的方案也考虑对张量运算和标量运算在多核处理器的各个核上执行时的性能指标进行评估。关于前述的性能指标,其例如可以涉及当张量运算或标量运算在某个处理器上执行时在运算的时间、复杂度、效率以及数据传输等方面所能获得的收益或代价。基于此,本公开提出使用代价函数和收益函数来评估张量运算和标量运算的所述性能指标,其中前述代价函数可
以用于确定张量运算或标量运算在候选的处理器上运行时所产生的代价,而收益函数可以用于确定张量运算或标量运算在候选的处理器上运行时所产生的收益。
24.在一个实施例中,前述的代价函数可以包括数据传输代价和/或累积代价,其中数据传输代价可以包括所述张量运算或标量运算在候选的处理器上运行时传输数据所产生的代价,而累积代价可以通过累加张量运算或标量运算在候选的处理器上持续运行所产生的代价而获得。进一步,在一个实施方式中,这里的收益函数可以包括加速收益和/或复杂度收益,其中加速收益可以是所述张量运算或标量运算在候选的处理器上运行时所获得的运算效率收益,而复杂度收益是所述张量运算或标量运算在候选的处理器上运行时,运算复杂度得以降低时所获得的收益。
25.在一个实施场景中,上述的代价函数可以下式来表达:
26.c(i,j)=t(i,j) a(i,j)
ꢀꢀꢀꢀꢀ
(1)
27.其中c(i,j)即是上文的代价函数,t(i,j)表示第i个操作(“op[i]”)在第j个处理器或处理器核(“core[j]”)上运行时,数据传输的代价;a(i,j)表示第i个操作在第j处理器或处理器核上运行时的累积代价。
[0028]
根据不同的场景,前述数据传输的代价可以涉及处理数据的类型、大小和是否带控制流类。以存在控制流的场景为例,在包括通用处理器和智能处理器的异构架构中,控制流以外的语句(其涉及用于标量运算的某个或某些算子)可以在启动(“launch”)kernel函数前由通用处理器来计算,并且例如可以通过kernel参数来传递给智能处理器,以便由智能处理器在对其他的算子(例如张量算子)进行运算时使用。然而,对于控制流(例如可以是“if”和“for”语句),当由智能处理器运行kernel函数时,控制流语句中的表达式仅在智能处理器执行到该语句基本块时才能确定。对于控制流语句中的标量运算,则需要中止智能处理器上kernel函数的运算,并且将数据传递到通用处理器来执行前述的标量运算,并且将该标量运算的计算结果再传递回智能处理器,以便由智能处理器基于该计算结果来执行后续的运算操作。由此,控制流形成不同于常规数据的较大传输代价。
[0029]
在一个实施场景中,上述的收益函数可以下式来表达:
[0030]
p(i,j)=s(i,j) o(i,j)
ꢀꢀꢀꢀꢀ
(2)
[0031]
其中p(i,j)即是上文的收益函数,s(i,j)表示第i个操作(“op[i]”)在第j个处理器或处理器核(“core[j]”)上运行时所获得的运算效率收益;o(i,j)表示第i个操作(“op[i]”)在第j个处理器或处理器核(“core[j]”)上运行时,运算复杂度得以降低时所获得的收益。就运算效率收益而言,通用处理器在处理标量数据时相对于智能处理器具有优势,因此可以获得显著的收益。例如,对于前述提到的控制流以外的标量计算,通用处理器需要在计算完成后通过参数传递至智能处理器,以便由智能处理器利用这些标量计算的结果来执行相关张量算子的张量运算。可以看出,就控制流外的标量运算而言,在通用处理器上的运算操作可以实现传输代价的降低和运算效率收益的增加。在一个实施场景中,这里的o(i,j)可以指代标量或张量操作在智能处理器或智能处理器核上运行时所获得的收益。该运算复杂度降低所获得的收益可以涉及运算符的复杂度(例如乘法操作相对于加法运算更为复杂)以及计算量的多少和类型(例如浮点类型数据的乘法操作相对于整型数据的乘法操作更为复杂)。
[0032]
通过上述方式对张量运算和标量运算进行评估后,在步骤s106处,根据所述评估
的评估结果将张量运算和标量运算分配至相应的处理器以便执行。在一个实施例中,可以使用代价函数和收益函数来查找函数库(如图4中所示出的,稍后详细描述),以获得代价函数和收益函数的代价值和收益值。接着,可以基于代价值和收益值来确定将张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0033]
在一个实施方式中,可以针对于收益函数设置有第一阈值,针对于代价函数设置有第二阈值,并且可以根据收益值与第一阈值的比较和/或代价值与第二阈值的比较来将张量运算或标量运算分配至相应的通用处理器或智能处理器之一。具体来说,当收益值大于或等于第一阈值时,可以将对应的张量运算或标量运算分配至相应的通用处理器或智能处理器之一。附加地,当代价值小于或等于第二阈值时,可以将对应的张量运算或标量运算分配至相应的通用处理器或智能处理器之一。替代地,当收益值大于或等于第一阈值并且代价值小于或等于第二阈值时,可以将对应的张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0034]
在一个实施场景中,上述的智能处理器可以包括多个智能处理器核,例如四核、八核、十六核或更多核。作为示例,每个智能处理器核内可以包括多个运算单元,以用于根据神经网络模型的计算要求来执行张量运算或标量运算。对于该多个智能处理器核,本披露的方案可以根据上述的收益值和/或代价值来将张量运算或标量运算分配至相应的智能处理器核之一。换句话说,本披露的方案也支持智能处理器核层级的运算任务分配。
[0035]
以上结合图1对本披露的编译方法进行了详细的描述。利用本披露的编译方法,可以针对运算硬件(如上文的通用处理器和智能处理器)来对神经网络模型中的运算进行专门的分配,从而可以显著优化运行神经网络模型的硬件平台的运算性能。进一步,通过前述的运算分配,也可以使所述硬件平台获得高性能的功耗比和加速比。另外,对于可变神经网络模型来说,通过本披露的方案可以对该网络中可能产生的大规模标量运算进行优化,从而从另一方面优化和提升了硬件平台的性能。
[0036]
图2是示出根据本公开实施例的编译器200的简化框图。应当理解的是编译器200可以执行上述结合图1所描述的编译方法,因此关于图1所做的描述也同样适用于下文关于编译器的具体阐述。进一步,在包括通用处理器和智能处理器的异构架构中,该编译器200可以布置于通用cpu处,以便执行例如上述结合图1所讨论的编译方法。
[0037]
作为一种可选的实施例,该编译器200可以是神经网络编译器,用于将从神经网络框架接收的神经网络编译为能够在至少一个处理器上运行的目标代码。该编译器可以包括编译器前端,用于将神经网络模型转换为图形式的中间表达以及比图形式的中间表达更低级别的中间表达。如图2中所示,该编译器200还可以包括运算分析单元201和运算分配单元202。该运算分析单元201和运算分配单元202用于根据中间表达对神经网络模型中的运算进行分析,以便可以将该神经网络模型中的运算分配至至少一个处理器上进行运行,并生成与相应的处理器相对应的目标代码。
[0038]
在一个实施例中,运算分析单元可以配置成对神经网络模型进行运算分析,以获取在执行所述神经网络模型时所要进行的张量运算和标量运算。可以看出,此处运算分析单元执行的即是图1方法100中的步骤s102。相应地,在一个实施例中,运算分配单元可以配置成对前述的张量运算和标量运算在多个处理器上执行时的性能指标进行评估,以及根据评估的评估结果将所述张量运算和标量运算分配至相应的处理器以便执行。类似地,此处
运算分配单元执行的即是图1方法100中的步骤s104和s106。
[0039]
尽管图中没有示出,在一个实施方式中,编译器200还可以包括代码生成单元,其与运算分配单元连接。在操作中,该代码生成单元可以针对运算分配单元分配后的标量运算和张量运算来生成对应的代码,以便由通用处理器和智能处理器来相应地执行分配的运算。对于数据并行操作的场景,代码生成单元可以令生成的代码中包含处理器或处理器核的标识符(“id”)。
[0040]
从上面的描述可以看出,编译器200通过其包括的运算分析单元201和运算分配单元202可以实现图1中方法100所包括的步骤,从而通过对张量运算和标量运算的划分来对运行神经网络模型的硬件平台进行优化,由此提升神经网络模型的运算效率并改善硬件平台的整体性能。
[0041]
图3是示出根据本公开实施例的编译器的详细框图。可以理解的图3所示出的编译器是图2所示编译器的一种具体实施方式并且相同的组件以相同的编号表示,因此关于图2中编译器的描述同样也适用于图3所示编译器。
[0042]
如图3中所示,该编译器包括运算分析单元201和运算分配单元202,也即图2中所示出的相同单元。作为示例,该运算分析单元包括运算遍历单元203。在一个实施场景中,如前所述,该运算遍历单元可以对编译过程中的神经网络模型对应的中间表达进行遍历,从而确定神经网络模型中的张量运算和标量运算,也即图中分别示出的“tensor op”和“scalar op”。
[0043]
针对于张量运算,运算分析单元还包括形状推导单元204、分块单元205和优化单元206,该三个单元可以构成本披露上下文中的编译单元。在一个实施场景中,对于可变神经网络模型(例如其输入的张量数据形状是可变的),由于模型在执行时是逐层运行的,其每一层输入的形状只有在运行时才能够获得,因此在编译时可以通过本披露的形状推导单元来对逐层输入的张量形状按一定的表达式来表达出来。
[0044]
例如,对于可变神经网络的第一层,模型的计算相对简单,仅通过接收输入的形状参数即可确定输入的张量形状。对于网络的第二层输入来说,其由第一层的输入和第一层的运算(例如卷积层的卷积操作)而获得的,并且在经第一层的运算后,张量数据的形状发生改变,也即该形状的改变是由第一层的tensor op(例如卷积操作)决定的。基于该操作原理,形状推导单元可以将神经网络第二层的输入张量以一定的表达式进行表达,也即完成针对神经网络第二层输入的形状推导。以此类推,形状推导单元直到将各种层的输入和输出的张量形状都以一定的表达式进行表达,从而完成形状推导操作。由此可以理解的是神经网络模型中当前层的输出形状表达式取决于其输入张量的形状表达式和当前层执行的张量操作。仍以卷积运算为例,该形状推导的输出表达式例如可以是下式:
[0045][0046]
关于上述的分块单元205,由于执行神经网络模型的硬件架构(例如片上系统)的存储空间是有限的,对于大尺寸的张量运算(如大尺寸张量间的卷积运算),在片上系统执行前,需要对张量数据进行分块操作,即执行对张量数据的拆分操作。以二维张量的大矩阵乘操作为例,当片上系统仅支持8*8大小的矩阵块相乘操作时,则对于16*16大小的矩阵来说,就需要对其进行分块,以适配片上的缓存和计算要求。由此也可以理解,分块单元所执行的拆分操作考虑到运行神经网络模型的硬件配置,例如片上系统的存储空间(例如缓存
大小)和/或处理器核所具有的运算能力。由于分块单元在执行分块的过程中需要对由形状推导单元所产生的表达式进行计算,并且由此需要执行循环操作(例如“for”循环语句),因此在此期间也会产生大量的表达式,该表达式可以包括标量的表达式,例如具体的分块数。仍以卷积层的卷积操作为例,为了适合于在片上系统执行卷积运算,作为卷积层输入的表达式(由形状推导单元生成)将由分块单元来执行分块操作,从而生成另一表达式。
[0047]
关于上述的优化单元206,其用于对计算图或ir进行优化。根据不同的实现场景,该优化例如可以包括编译器经常处理的片上系统数据的存储复用、流水线(例如后一数据的拷贝和前一数据的计算两类指令之间的同时执行)和融合(包括将张量数据驻留于片上而非加载到片外)。在优化单元执行前述的优化操作期间,也会产生大量的标量操作。例如,在融合时,如将前一分块操作和后一分块操作的“for”语句合在一些时将涉及确定有多少的数据块以及这些数据块往何处搬运时,将必然涉及到标量的计算,由此也产生一定量的标量运算。
[0048]
在经过形状推导单元204、分块单元205和优化单元206的操作后,经优化后的张量运算将传递到运算分配单元202,以便由其将张量运算分配至由图中所示的通用处理器208或智能处理器核209来进行执行。
[0049]
下面将描述如图中进一步示出的、针对于标量运算的优化单元207。在一个实施场景中,优化单元207针对于标量运算可以执行标量简化(“simplify”)、常量传递和/或死代码删除(“dead code elimination”),以便简化中间表达,并从而减小代码量。以常量传递为例,对于前一表达a=4,后一表达为c=a b,则可以经由优化单元将后一表达式优化为c=4 b。再以“死代码删除”为例,对于形状推导单元所生成的一个张量形状,当其在后续的计算中不再使用时,则也可以直接删除与该形状相关的代码。如箭头210所示,优化单元207也可以接收来自于形状推导单元、分块单元和优化单元206在操作期间所产生的各种标量运算,并且也执行前述类似的优化操作,以便将经优化后的标量操作传递到运算分配单元202。此后,经优化后的标量运算将传递到运算分配单元202,以便由其将标量运算分配至由图中所示的通用处理器208或智能处理器核209来进行执行。
[0050]
在一个实施场景中,运算分配单元可以将复杂度高的标量运算分配给通用处理器,而将复杂的张量运算和一般复杂度的标量运算分配给智能处理器来执行。在另一个实施场景中,运算分配单元也可以直接将标量运算统一分配给通用处理器来执行而将张量运算统一分配给智能处理器来进行执行,即根据运算的类型来进行统一的分配。下面将结合图4对运算分配单元202的操作原理进行详细的描述。
[0051]
图4是示出根据本公开实施例的运算分配单元202的示意框图。如前所述,本披露的运算分配单元可以配置成使用代价函数的值(如图中示出的c(i,j)值)和/或收益函数(如图中所示出的p(i,j)值)来评估张量运算和标量运算,其中代价函数用于确定张量运算或标量运算在候选的处理器上运行时所产生的代价,并且收益函数用于确定所述张量运算或标量运算在候选的处理器上运行时所产生的收益。关于该代价函数和收益函数的各种实施方式已经在前文进行了详细的描述,此处不再赘述。
[0052]
为了实现对代价函数值和/或收益函数值的确定,本披露的方案在运算分配单元中布置有代价计算单元401和/或收益计算单元402。在示例性的具体操作中,代价计算单元和收益计算单元可以通过利用函数库403来计算某一操作(如图中所示出的op[i])的代价
值或收益值。在一个实施方式中,本披露的函数库可以实现为操作与代价值或收益值的映射集合,也即对于某一操作(其可能对应于一个或多个算子),其具有对应于运行于某一处理器或处理器核上的代价值或收益值,这些值例如可以是实验数值或经验数值等。
[0053]
在一个实施场景中,代价计算单元或收益计算单元可以根据操作所涉及的数据类型或大小等参数来利用函数库中的对应函数计算出相应的代价值和收益值。例如,在实际操作中,当op[i]为标量操作时,则函数库可以根据该标量操作所涉及的算子、算子执行运算时的数据类型和大小来给出在例如第j个处理器核上运行时所能获得的一个对应收益值;当op[i]为张量操作时,则可以从函数库获取在例如第j个处理器核上运行时所造成的一个相对大的代价值。根据不同的实施方式,前述的第j个处理器核也可以替换为通用处理器或智能处理器。附加地,前述的第j个处理器核也可以是多核架构中的计算系统的智能处理器核之一。
[0054]
在获得op[i]在第j个处理器核上运行的代价值和收益值,则可以在404处,判断收益值是否大于或等于第一阈值(图中的“th1”)。当收益值大于或等于第一阈值时,则可以在405处,判断代价值是否小于或等于第二阈值(图中的“th2”)。当代价值小于或等于第二阈值时,则可以将该op[i]分配给第j个处理器核以便执行。从图中所给出的例子可以看出,在两次阈值的比较中,仅当收益值满足最低限值而代价值没有超出最高限值时,可以将该操作分配给对应的处理器核(即图中的core[j])以便执行。进一步,通过分支407,也可以将op[i]分配给具体某个处理器核的信息记录于函数库,以用于后一操作例如op[i 1]生成代价值或收益值时考虑的因素。例如,当对op[i 1]进行分配操作时,代价计算单元和收益计算单元可以计算在将op[i 1]和op[i]进行算子融合后所获得的代价值和收益值。进一步,当所获得的代价值和收益值满足阈值要求时,可以将后一操作op[i 1]和前一操作op[i]分配到相同的处理器核上,也即前一操作op[i]所分配的处理器核上。
[0055]
如图中的分支406所示出的,当收益值小于第一阈值或者代价值大于第二阈值时,即收益值和代价值都未达到预设的期望值,则图中所示流程可以返回到函数库。这里,与分支407类似,可以将op[i]没有成功分配于core[j]的状态记录于函数库中。接着,代价计算单元和收益计算单元可以利用函数库来计算op[i]在第“j 1”个处理器核(即“core[j 1]”)上的代价值和收益值,并且将二者与上述的第一阈值和第二阈值进行比较。进一步,在满足阈值的条件下将op[i]分配在第“j 1”个处理器核上。与上文描述的方案类似,在一个场景中,没有成功分配于core[j]上运行的op[i]也可以与op[i-1]进行融合。进一步,代价计算单元和收益计算单元可以分别计算融合后的操作的代价值和收益值,并且在融合后的代价值和收益值满足阈值要求时,将op[i]分配到与op[i-1]相同的处理器核上。
[0056]
上面结合附图4对本披露的运算分配单元进行了描述。可以理解的是,上述的描述仅仅是示例性的而非限制性的,本领域技术人员根据本披露的教导,也会想到对运算分配单元的实施方式进行适当的改变。例如,当本披露的运算分配单元在利用图4所示流程仍无法确定将op[i]分配到具体的哪个处理器核上时,其可以选择将获得代价值最小和/或收益值最大的处理器核选择作为最终所要分配到的处理器核。
[0057]
图5是示出根据本披露实施例的一种组合处理装置的结构图。如图5中所示,该组合处理装置500包括计算处理装置502、接口装置504、其他处理装置506和存储装置508。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置510,该计算装置可以配
置用于执行各类计算操作,例如人工智能领域内的机器学习所涉及的各类运算。
[0058]
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。由此,本披露上文结合附图描述的运算分配方案可以将标量或张量运算合理地分配各个处理器上。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
[0059]
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0060]
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0061]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。在一些场景中,该接口装置还可以实现为计算处理装置和其他处理装置之间的应用编程接口,包括例如驱动程序接口,以便在二者之间传递由计算处理装置将要执行的各类指令和程序。
[0062]
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0063]
在一些实施例里,本披露还公开了一种芯片(例如图6中示出的芯片602)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc)。该芯片可以通过对外接口装置(如图6中示出的对外接口装置606)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还
公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图6对该板卡进行详细地描述。
[0064]
图6是示出根据本披露实施例的一种板卡600的结构示意图,其可以包括本披露结合附图所描述的智能处理器架构。如图6中所示,该板卡包括用于存储数据的存储器件604,其包括一个或多个存储单元610。该存储器件可以通过例如总线等方式与控制器件608和上文所述的芯片602进行连接和数据传输。进一步,该板卡还包括对外接口装置606,其配置用于芯片(或芯片封装结构中的芯片)与外部设备612(例如服务器或计算机)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0065]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0066]
根据上述结合图5和图6的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0067]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0068]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0069]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0070]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0071]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0072]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如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等。
[0073]
依据以下条款可更好地理解前述内容:
[0074]
条款a1、一种用于神经网络模型的编译方法,包括:
[0075]
对所述神经网络模型进行运算分析,以获取在执行所述神经网络模型时所要进行的张量运算和标量运算;
[0076]
对所述张量运算和标量运算在多个处理器上执行时的性能指标进行评估;以及
[0077]
根据所述评估的评估结果将所述张量运算和标量运算分配至相应的处理器以便执行。
[0078]
条款a2、根据条款a1所述的编译方法,其中对所述张量运算和标量运算在多个处理器上执行时的性能指标进行评估包括:
[0079]
使用代价函数和/或收益函数来评估所述张量运算和标量运算的所述性能指标,
[0080]
其中所述代价函数用于确定所述张量运算或标量运算在候选的处理器上运行时所产生的代价,并且所述收益函数用于确定所述张量运算或标量运算在候选的处理器上运行时所产生的收益。
[0081]
条款a3、根据条款a2所述的编译方法,其中所述代价函数包括数据传输代价和/或累积代价,其中所述数据传输代价是所述张量运算或标量运算在候选的处理器上运行时传输数据所产生的代价,而所述累积代价是通过累加所述张量运算或标量运算在候选的处理器上持续运行所产生的代价而获得的。
[0082]
条款a4、根据条款a3所述的编译方法,其中所述收益函数包括加速收益和/或复杂度收益,其中所述加速收益是所述张量运算或标量运算在候选的处理器上运行时所获得的运算效率收益,而所述复杂度收益是所述张量运算或标量运算在候选的处理器上运行时,运算复杂度得以降低时所获得的收益。
[0083]
条款a5、根据条款a1-a4的任意一项所述的编译方法,其中根据所述评估结果将所述张量运算和标量运算分配至相应的处理器以便执行包括:
[0084]
使用所述代价函数和收益函数来查找函数库,以获得所述代价函数和收益函数的代价值和收益值;以及
[0085]
基于所述代价值和收益值来确定将所述张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0086]
条款a6、根据条款a5所述的编译方法,其中针对于所述收益函数设置有第一阈值并且针对于所述代价函数设置有第二阈值,并且其中分配至相应的处理器包括根据以下的比较来将所述张量运算或标量运算分配至相应的通用处理器或智能处理器之一:
[0087]
根据所述收益值与所述第一阈值的比较;和/或
[0088]
根据所述代价值与所述第二阈值的比较。
[0089]
条款a7、根据条款a6所述的编译方法,其中:
[0090]
当所述收益值大于或等于所述第一阈值时,将对应的张量运算或标量运算分配至相应的通用处理器或智能处理器之一;或者
[0091]
当所述代价值小于或等于所述第二阈值时,将对应的张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0092]
条款a8、根据条款a6所述的编译方法,其中:
[0093]
当所述收益值大于或等于所述第一阈值并且所述代价值小于或等于第二阈值时,将对应的所述张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0094]
条款a9、根据条款a6-a8的任意一项所述的编译方法,其中所述智能处理器包括多个智能处理器核,所述编译方法包括将所述张量运算或标量运算分配至相应的智能处理器核之一。
[0095]
条款a10、根据条款a1所述的编译方法,其中进行所述运算分析以获取所要进行的所述张量运算和标量运算包括:
[0096]
根据运行所述神经网络模型的硬件配置来对所述神经网络模型进行编译,以获得
执行神经网络模型时所要进行的张量运算和标量运算。
[0097]
条款a11、根据条款a10所述的编译方法,其中所述编译包括对神经网络模型执行形状推导、分块和张量优化处理中的一项或多项,以获得执行所述神经网络模型时所要进行的张量运算。
[0098]
条款a12、根据权利要求条款a10所述的编译方法,其中所述编译还包括对所述神经网络模型中的标量运算进行标量优化,以获得执行所述神经网络模型时所要进行的标量运算。
[0099]
条款a13、根据条款a11所述的编译方法,其中所述编译还包括将执行形状推导、分块和优化处理中的一项或多项所产生的标量运算进行标量优化。
[0100]
条款a14、一种编译器,包括:
[0101]
运算分析单元,其配置成对神经网络模型进行运算分析,以获取在执行所述神经网络模型时所要进行的张量运算和标量运算;
[0102]
运算分配单元,其配置成:
[0103]
对所述张量运算和标量运算在多个处理器上执行时的性能指标进行评估;以及
[0104]
根据所述评估的评估结果将所述张量运算和标量运算分配至相应的处理器以便执行。
[0105]
条款a15、根据条款a14所述的编译器,其中在对所述张量运算和标量运算进行评估中,所述运算分配单元配置成:
[0106]
使用代价函数和/或收益函数来评估所述张量运算和标量运算,
[0107]
其中所述代价函数用于确定所述张量运算或标量运算在候选的处理器上运行时所产生的代价,并且所述收益函数用于确定所述张量运算或标量运算在候选的处理器上运行时所产生的收益。
[0108]
条款a16、根据条款a15所述的编译器,其中所述代价函数包括数据传输代价和/或累积代价,其中所述数据传输代价是所述张量运算或标量运算在候选的处理器上运行时传输数据所产生的代价,而所述累积代价是通过累加所述张量运算或标量运算在候选的处理器上持续运行所产生的代价而获得的。
[0109]
条款a17、根据条款a16所述的编译器,其中所述收益函数包括加速收益和/或复杂度收益,其中所述加速收益是所述张量运算或标量运算在候选的处理器上加速运行时所获得的收益,而所述复杂度收益是所述张量运算或标量运算在候选的处理器上运行时,运算复杂度得以降低时所获得的收益。
[0110]
条款a18、根据条款a17所述的编译器,其中所述运算分配单元还配置成:
[0111]
将张量运算和标量运算分配至相应的通用处理器或智能处理器。
[0112]
条款a19、根据条款a18所述的编译器,其中所述运算分配单元还配置成:
[0113]
使用所述代价函数和收益函数来查找函数库,以获得所述代价函数和收益函数的代价值和收益值;以及
[0114]
基于所述代价值和收益值来确定将所述张量运算或标量运算分配至相应的通用处理器或智能处理器之一。
[0115]
条款a20、根据条款a19所述的编译器,其中针对于所述收益函数设置有第一阈值并且针对于所述代价函数设置有第二阈值,并且其中所述运算分配单元还配置成:
或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0132]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献