CN115480743A - 用于神经网络的编译方法、编译器及相关产品 - Google Patents

用于神经网络的编译方法、编译器及相关产品 Download PDF

Info

Publication number
CN115480743A
CN115480743A CN202110668264.4A CN202110668264A CN115480743A CN 115480743 A CN115480743 A CN 115480743A CN 202110668264 A CN202110668264 A CN 202110668264A CN 115480743 A CN115480743 A CN 115480743A
Authority
CN
China
Prior art keywords
data
code
constant
shape
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110668264.4A
Other languages
English (en)
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202110668264.4A priority Critical patent/CN115480743A/zh
Publication of CN115480743A publication Critical patent/CN115480743A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Neurology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本披露公开了一种用于神经网络模型的编译方法和相关产品,该相关产品包括编译器、设备和计算机可读存储介质。该编译方法可以应用于包括在组合处理装置的计算处理装置中,该计算处理装置可以包括一个或多个数据处理装置。前述的组合处理装置还可以包括接口装置和其他处理装置。所述计算处理装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与设备和其他处理装置连接,用于存储该设备和其他处理装置的数据。通过利用本披露的方案,可以对可变张量形状的神经网络进行编译,从而提升编译性能。

Description

用于神经网络的编译方法、编译器及相关产品
技术领域
本公开一般地涉及软件领域。更具体地,本公开涉及一种用于神经网络的编译方法、编译器、电子设备、计算机程序产品和用于对可变神经网络模型进行实时编译的***。
背景技术
传统的深度学习框架(例如TensorFlow、MXNet、Caffe和PyTorch) 采用人工优化算子并且建立运行时图解释器来解决内存分配调度等问题。进一步,深度学习框架下的深度学习编译器一般在优化过程中执行自动或者半自动的代码生成操作,以用以替代人工优化。
尽管深度学习编译器在编译方面相对于现有技术具有一些优势,但其针对输入张量形状可变神经网络的性能优化一般要劣于输入张量形状不变的神经网络。例如,在利用神经网络对目标进行检测且目标框尺寸不一的场景中,深度学习编译器的应用存在一定缺陷。具体来说,针对不同目标框尺寸的神经网络,在保证优化性能的前提下,深度学习编译器需要进行多次的编译操作,从而造成相当高的时间成本。进一步,在每次编译操作后,智能处理器仅能运行一次编译文件,这给使用带来显著的不便并且造成较差的用户体验。
发明内容
鉴于上述背景技术部分所提及的技术问题,本公开在多个方面中提出了用于神经网络的编译方案,其通过对输入张量形状进行赋值,可以实现对具有不同输入张量形状的神经网络生成一份代码,以减少代码量并缩短编译时间。本公开实施例的神经网络可以应用于各种领域,诸如图像处理、语音处理、文本处理等等,这些处理例如可以包括但不限于识别和分类。
在第一方面中,本公开提供了一种用于神经网络的编译方法,包括:获取神经网络的计算图,其中计算图包括计算节点和数据节点及其各自的标签数据,其中标签数据包括用于描述张量形状的形状参数;对数据节点的标签数据中的形状参数进行赋值;以及根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。
在第二方面中,本公开提供了一种用于神经网络的编译器,包括:获取单元,其用于获取神经网络的计算图,其中计算图包括计算节点和数据节点及其各自的标签数据,其中标签数据包括用于描述张量形状的形状参数;赋值单元,其用于对数据节点的标签数据中的形状参数进行赋值;以及算子生成单元,其用于根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。
在第三方面中,本公开提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本公开第一方面任一项的方法。
在第四方面中,本公开提供了一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现本公开第一方面任一项的方法。
在第五方面中,本公开提供了一种用于对可变神经网络模型进行实时编译的***,包括:互联的主机和设备,其中主机包括根据本公开第二方面的编译器;其中设备配置成执行经编译器编译的代码。
通过如上所提供的用于神经网络的编译方法、编译器、电子设备、计算机程序产品和用于对可变神经网络模型进行实时编译的***,本公开的方案可以通过对输入张量形状进行赋值,由此实现对不同输入张量形状的神经网络生成一份代码,以减少代码量、缩短编译时间。在运行根据本公开的方案生成的编译代码时,用户填写新的输入张量形状,即可对不同输入张量形状的神经网络进行编译,用户友好。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出了根据本公开实施例的用于神经网络的编译方法的流程示意图;
图2示出了根据本公开实施例的计算图;
图3示出了本公开的实施例的张量形状示意图;
图4示出了本公开的实施例的另一个计算图;
图5示出了根据本公开另一个实施例的用于神经网络的编译方法的流程示意图;
图6示出了包含根据本披露实施例的用于指示神经网络数据类别的类别数据的计算图;
图7示出了本公开的实施例的另一个计算图;
图8示出了根据本披露实施方式的用于神经网络的编译器的功能框图;
图9示出了根据本披露实施例的一种组合处理装置的结构图;以及
图10示出了根据本披露实施例的一种板卡的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
下面结合附图来详细描述本公开的具体实施方式。
图1示出了根据本公开实施例的用于神经网络的编译方法的流程示意图。如图1所示,在步骤S101处,获取神经网络的计算图。在一个实施方式中,这里的计算图可以包括计算节点和数据节点及其各自的标签数据,其中标签数据可以包括用于描述张量形状的形状参数。根据不同的应用场景,该形状参数可以是一个或多个,并且可以包括常量数据和/或变量数据。在本披露的上下文中,这里的形状参数还可以用于描述张量具体每一阶的长度(稍后结合图3描述)。为了便于理解本公开的方案,下面将首先结合图2来对神经网络的计算图进行介绍。
神经网络(即本发明上下文中的神经网络模型)通常可以包括输入层、卷积层、激活函数层、池化层和/或全连接层等。根据不同的应用场景,神经网络的层数可以是少量的若干层或多至上百层。在运算操作中,神经网络的每一层可以执行对应的一个算子,例如卷积层执行卷积算子以实现卷积运算。通常,可以使用计算图来描述神经网络模型中算子的计算过程,从而展示神经网络模型中所涉及的计算和状态。
图2示出了根据本公开实施例的计算图200。在机器学习领域中,计算图是描述计算过程的有向图,其通常包含一组节点和边。具体地,节点可以表示数据的输入节点、输出节点、模型参数等。另外,节点也可以表示各类操作处理,包括数学运算、变量读写、数据填充等。鉴于此,计算图中的节点可以大致分为数据节点202和计算节点204,在图中分别以圆形和长方形示出。对于计算图中的边(如图中的206所指示),其通常可以分为两类,其中一类是传递具体数据的边而另一类是表示节点之间控制依赖关系的边。而神经网络模型中所有的数据可以被建模成张量(Tensor),张量可以表示计算图中的所有数据,张量在计算图的节点之间传递。对于计算图中像模型参数这样的有状态参数,则可以通过变量(Variable)来存储。与变量对应的是常量(即Constant或Const),用于表示不可变的参数。
张量的形状对应张量的shape属性,表示张量各阶的长度。张量可以看作N维数组,张量的阶数可以理解为数组的维数,而张量中每一阶的长度用形状(shape)来表示。为了便于理解本公开的方案,下面将继续结合图3对张量形状进行介绍。
图3示出了本公开的实施例的张量形状示意图。如图3所示,一个0 阶张量对应一个标量数据,它的shape为空;一个1阶张量对应一个一维向量,其shape包含一个元素,元素值为向量的长度,所示示例中1阶张量的shape为(3);一个2阶张量对应一个矩阵,图中以3×3矩阵为例,则该2阶张量的shape为(3,3);一个3阶张量对应一个三维数组,其shape应包含3个元素,每个元素值分别对应每一阶的长度,因此示例中的3阶张量的shape为(2,3,3)。可以看出,用于描述张量每一阶长度的形状参数可以是变量数据或常量数据。其中,张量形状的形状参数中的变量数据可以是指在运行时才能获得其参数值的数据。张量形状的形状参数中的常量数据可以是指编译时就能够获得其参数值的数据。
张量除了具有形状(shape)属性,还具有数据类型(type)、名称(name)、计算出该张量的操作(op)、包含该张量的计算图(graph)等属性。张量的数据类型包括符号整数、无符号整数、浮点数、复数、布尔型、字符串等等。
在本披露的上下文中,计算图中的所有数据节点和计算节点都具有如上所述的相关联的张量。具体地,计算图中计算节点和数据节点的标签数据,即为与该计算节点或数据节点关联的张量。为了便于理解本公开的方案,下面将结合图4对具有标签数据的计算图进行说明。
图4示出了本公开的实施例的另一个计算图400。如图4所示,计算图400包括五个数据节点和两个计算节点,其中“输入”、“卷积核”、“偏置”、“隐藏”、“输出”五个圆形或椭圆形框为数据节点,“卷积”和“激活”两个矩形框为计算节点。其中,计算图400中节点处的矩形框表示与该节点关联的张量数据,也即该节点的标签数据。以“输入”节点处的标签数据“Shape=(in=?,ic=256,ih=?,iw=?),Type=int”为例,shape表示“输入”节点张量的形状,Type表示“输入”节点张量的数据类型。“输入”节点处的张量形状是4阶张量,即输入张量数量(in)、输入张量通道(ic)、输入张量高度(ih)、输入张量宽度(iw),“输入”节点处的张量数据类型为int(整数型)。其中,输入张量数据、输入张量高度、输入张量宽度为变量,输入张量通道为常量(256)。
依次类推,“卷积核”节点处的张量形状是4阶张量,即核张量数量 (kn)、核张量通道(kc)、核张量高度(kh)、核张量宽度(kw),“卷积核”节点处的张量数据类型为int(整数型)。其中,核张量数量、核张量通道、核张量高度、核张量宽度均为常量。“隐藏”节点处的张量形状是4阶张量,即隐藏张量数量(tn)、隐藏张量通道(tc)、隐藏张量高度(th)、隐藏张量宽度(tw),“隐藏”节点处的张量数据类型为浮点型(float)。其中,隐藏张量数量、隐藏张量通道、隐藏张量高度、隐藏张量宽度均为变量。“输出”节点处的张量形状是4阶张量,即输出张量数量(on)、输出张量通道(oc)、输出张量高度(oh)、输出张量宽度 (ow),“输出”节点处的张量数据类型为浮点型(float)。其中,输出张量数量(on)、输出张量通道(oc)、输出张量高度(oh)、输出张量宽度(ow)为变量。
“偏置”节点处的张量形状是1阶张量,即偏置数量(bn),“偏置”节点处的张量数据类型为浮点型(float)。其中,偏置数量(bn)为常量 (512)。“卷积”节点处的张量形状是2阶张量,即步长高度(sh)、步长宽度(sw),且步长高度(sh)、步长宽度(sw)均为常量。
继续参考图1,在获取神经网络如上所述的计算图后,在步骤S102,对数据节点的标签数据中的形状参数进行赋值。如前所述,本披露的形状参数可以包括变量数据和/或常量数据。
在本实施例中,上述的变量数据/常量数据可以是计算图中输入节点处的变量数据/常量数据或者是计算图中隐藏节点处的变量数据/常量数据,并且本实施例并不限制变量数据/常量数据在计算图中所处的位置。以输入节点处的变量数据为例,若输入节点处的张量形状为4阶张量(in,ic,ih,iw),其中每阶张量均为变量,则可以对输入节点处的张量形状进行赋值,生成如下赋值代码:
shapes[0]=in;//输入张量形状赋值
shapes[1]=ic;
shapes[2]=ih;
shapes[3]=iw;
其中,shapes[0],shapes[1],shapes[2],shapes[3]为张量形状存储区地址。
在本实施例中,作为N阶张量的张量形状可以是每阶均为变量,也可以是部分阶为变量。仍以输入节点处的标签数据为例,若输入节点处的张量形状为4阶张量(in,ic,ih,iw),其中in、ih、iw为变量,ic为常量IC,则对输入节点处的张量形状(也即形状参数)进行赋值,生成如下赋值代码:
shapes[0]=in;//输入张量形状赋值
shapes[1]=IC;
shapes[2]=ih;
shapes[3]=iw;
其中,shapes[0],shapes[1],shapes[2],shapes[3]为张量形状存储区地址。
接着,在步骤S103处,根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。
在一个实施方式中,上述计算图中的计算节点包含了对于神经网络的运算,并且每个计算节点存在对应于神经网络运算的算子。这里,神经网络运算的算子可以包括但不限于卷积、最大池化、加偏置、softmax、sigmoid、 ReLU等操作。根据各个算子的属性,各个算子的输入张量形状与输出张量形状存在固定的对应关系。以ReLU算子为例,对输入张量形状为 (in,ic,ih,iw)的4阶张量进行ReLU激活运算后,得到的输出张量形状为 (in,ic,ih,iw)。也即,对于ReLU算子,输入张量形状(in,ic,ih,iw)与输出张量形状(on,oc,oh,ow)存在如下公式:on=in,oc=ic,oh=ih,ow=iw。
以上仅仅示出了ReLU算子的输出形状公式,本领域技术人员可知,神经网络运算的各个算子都有对应的输出形状公式。因此,可以将各个算子的输出形状公式进行汇集,从而形成算子输出形状公式库。
在本实施例中,在对数据节点处的形状参数进行赋值后,可以遍历计算图中的计算节点,找到与该数据节点相连的计算节点。然后,可以根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。下面以计算图中的卷积计算节点为例,说明该计算节点所对应的卷积算子的代码生成过程。
以输入节点处的变量数据为例,若输入节点处的张量形状为4阶张量 (in,ic,ih,iw),在对输入节点处的变量数据进行赋值后,得到变量数据 (in=shapes[0],ic=shapes[1],ih=shapes[2],iw=shapes[3])。通过遍历计算图中的计算节点,找到与输入节点相连的计算节点为卷积。根据卷积算子的输出形状公式库:on=in,oc=kn,oh=(ih-kh)/sh+1,ow=(iw-kw)/sw+1,可以得到该计算节点对应的卷积算子的输出形状为:
shapes[4]=shapes[0];
shapes[5]=KN;
shapes[6]=(shapes[2]-KH)/SH+1;
shapes[7]=(shapes[3]-KW)/SW+1;
其中,KN是与该计算节点相连的“卷积核”数据节点处的核张量数量(常量型),KH是与该计算节点相连的“卷积核”数据节点处的核张量高度 (常量型),KW是与该计算节点相连的“卷积核”数据节点处的核张量宽度(常量型),SH是该计算节点处的步长高度(常量型),SW是该计算节点处的步长宽度(常量型)。其中, shapes[4],shapes[5],shapes[6],shapes[7]为卷积算子的输出张量的张量形状存储区地址,该张量形状的存储区地址的确定方式可参见下文的描述。从而该“隐藏”卷积计算节点的输出张量的形状参数进行赋值。接着,可以利用前述获得的shapes[4]~shapes[7]对输出节点处的张量形状参数进行赋值,从而得到赋值后的张量形状数据 (on=shapes[4],oc=shapes[5],oh=shapes[6],ow=shapes[7])。
进一步地,可以根据赋值后的形状参数和卷积计算节点的属性可以得到卷积计算节点的算子代码。例如,该卷积计算节点的算子代码可以表示如下:
int temp[shape[4]*shape[5]*shape[6]*shape[7]];
conv(input,kernel,bias,temp,shape[0],shape[1],shape[2],shape[3],KN,KH,KW,SH,SW)。
以此类推,可以针对计算图中的每个计算节点生成对应的算子代码。
可以看出,本公开的用于神经网络的编译方法通过将输入数据节点中的形状参数(如变量数据)采用统一的赋值进行表示,并通过算子输出形状公式库推导出该输入数据节点对应的输出数据节点。接着,可以对该输出数据节点的形状进行前述类似的赋值操作,从而本披露的神经网络编译过程中无需关注输入数据的具体形状。基于这样的赋值操作,本披露的方案可以将具有不同输入张量形状的计算图编译成一份代码,由此可以减少编译代码量并且显著缩短编译时间。进一步,在运行根据本公开的方案生成的编译代码时,用户仅通过输入新的输入张量形状,即可对不同输入张量形状的神经网络进行编译,从而获得相对友好的用户体验。
图5示出了根据本公开另一个实施例的用于神经网络的编译方法的流程示意图。
如图5所示,在步骤S501处,获取神经网络的计算图。可以理解的是步骤S501与图1中步骤S101实施基本上相同的操作,因此关于图1中步骤S101的描述也同样适用于此处步骤S501,并且因此不再赘述。
在步骤S502处,根据输入数据节点、输出数据节点和标签数据来生成前置代码。
在本实施例中,输入数据节点指的是与计算图中的第一个计算节点在输入方向相连的数据节点。以图4所示的计算图400为例,该计算图400 的输入数据节点包括图中以圆或椭圆所示出的“输入”、“卷积核”和“偏置”数据节点。输出数据节点指的是神经网络的输出层在计算图中对应的数据节点,仍以图4所示的计算图400为例,该计算图400的输出数据节点包括图中以椭圆所示出的“输出”数据节点。若以图2所示的计算图200 为例,该计算图200的输出数据节点为210。
在本实施例中,标签数据指的是计算图所有节点的标签数据,包括计算节点的标签数据和数据节点的标签数据。在一个实施方式中,这里的标签数据可以包括变量数据和/或常量数据。
在本实施例中,前置代码指的是用于辅助根据步骤S503生成赋值代码以及根据步骤S504生成算子代码的代码。以根据步骤S503生成的赋值代码为“shapes[0]=in;shapes[1]=IC;shapes[2]=ih;shapes[3]=iw”例,由于IC为常量,即用户不可改变的数据,为了使该赋值代码具有可执行性,在生成赋值代码之前需要对常量IC进行定义。这里,对常量IC进行定义的代码即为前置代码。示例性地,该前置代码为“#define IC 256”。
在生成上述的前置代码后,在步骤S503处,对数据节点对应的标签数据中的形状参数进行赋值。可以理解的是步骤S503与图1中步骤S102 执行基本上相同的操作,因此此处不再赘述。接着,在步骤S504处,根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。类似地,步骤S504与图1中步骤S103基本相同,因此不再赘述。
在本实施例的一些可选的实现方式中,前置代码包括定义常量代码和函数头代码。定义常量代码指的是对计算图节点处的标签数据中的常量数据进行定义的代码,例如“#define IC 256”(IC为常量)。在一些实施例中,可以对计算图中至少一个输入数据节点以及对应计算节点处的标签数据中的常量数据进行定义。以图4所示的计算图400为例,该计算图400 中的一个输入数据节点为:“输入”数据节点、“卷积核”数据节点、“偏置”数据节点,与该输入节点相连的计算节点为“卷积”计算节点。首先读取“输入”数据节点、“卷积核”数据节点、“偏置”数据节点处的标签数据中的第一常量数据:ic=256、bn=512、kn=512、kc=256、kh=2、kw=2,以及“卷积”计算节点处的标签数据中的常量数据:sh=2、sw=2;然后对第一常量和第二常量进行命名:ic命名为IC、bn命名为BN、kc命名为 KC、kn命名为KN、kh命名为KH、kw命名为KW、sh命名为SH、sw 命名为SW;最后,生成用于定义命名后的第一常量和第二常量的代码,以获得定义常量代码。生成如下“定义常量”代码:
#define IC 256;
#define KC 256
#define KN 512;
#define BN 512
#define KH 2;
#define KW 2;
#define SH 2;
#define SW 2。
在另一些实施例中,可以对计算图中所有节点处的常量数据进行定义以生成定义常量代码。具体定义常量代码的生成方法与前述输入数据节点以及对应计算节点处的定义常量代码的生成方法基本相同,因此不再赘述。
在又一些实施例中,对第一常量和第二常量进行命名还包括:响应于检测到第一常量和/或第二常量中存在重复的常量元素,对重复的常量元素合并命名。以图4所示的计算图400为例,该计算图400中“输入”数据节点处的标签数据中的“ic”和“卷积核”数据节点处的标签数据中的“kc”的常量相同(均为256),“卷积核”数据节点处的标签数据中的“kn”和“偏置”数据节点处的标签数据中的“bn”的常量相同(均为512)。对此,可以将“ic”和“kc”合并命名为“IC”,将“kn”和“bn”合并命名为“KN”。合并命名后,计算图400的输入数据节点以及对应计算节点处的定义常量代码为:
#define IC 256;
#define KN 512;
#define KH 2;
#define KW 2;
#define SH 2;
#define SW 2。
函数头代码指的是函数体之前的代码,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息。在本披露实施例中,函数体可以是根据本披露实施例中的步骤S103生成的计算图中的计算节点所对应算子的算子代码。在一些实施例中,可以根据输入数据节点、输出数据节点和标签数据中的变量数据来生成函数头代码。其中,函数头代码可以包括函数名和参数代码,根据输入数据节点、输出数据节点和标签数据中的变量数据来生成函数头代码包括:根据至少一个输入数据节点、至少一个输出数据节点的标签数据中的数据,生成函数名与参数代码。
以图4所示的计算图400为例,该计算图400中的输入数据节点为:“输入”数据节点、“卷积核”数据节点、“偏置”数据节点,输出数据节点为:“输出”数据节点。其中,可以遍历计算图400中的输入数据节点、输出数据节点的标签数据,生成如下函数名和参数代码:
void kernel(int*input,int*kernel,float*bias,float*output,int in,intih, int iw)。
其中,“int*input”表示“输入”数据节点处的数据类型为整型,“int* kernel”表示“卷积核”数据节点处的数据类型为整型,“float*bias”表示“偏置”数据节点处的数据类型为整型,“float*output”表示函数体的返回数据类型为浮点型,“int in,int ih,intiw”表示输入张量数量(in)、输入张量高度(ih)、输入张量宽度(iw)的数据类型为整型。“void kernel”表示函数名为“kernel”。
在另一些实施例中,函数头代码可以包括申请形状区代码,根据输入数据节点、输出数据节点和标签数据中的变量数据来生成函数头代码包括:根据计算图中包含变量数据的数据节点的数量以及每个数据节点对应的数据确定的张量形状存储区大小,生成申请形状区代码。以图4所示的计算图400为例,该计算图400中包含变量数据的数据节点为:“输入”数据节点、“隐藏”数据节点、“输出”数据节点。也即,计算图400中的包含变量数据的数据节点的数量为3个。而每个数据节点对应的张量的形状为4阶,因此可以计算出包含变量数据的数据节点所需的张量形状存储空间大小为3*4=12。之后,可以基于计算出的张量形状存储空间大小生成如下申请形状区代码:
int shapes[12];
其中,shapes[0]、shapes[1]、shapes[2]、shapes[3]、shapes[4]...shapes[11]为张量形状存储区地址。
在执行上述的申请张量形状存储区后,可以在包含变量数据的数据节点处的标签数据中增加或更新张量形状存储区地址索引(index),从而可以根据索引确定当前数据节点中的张量的形状表示。其中,该地址索引的取值范围可以根据计算图中数据节点所需的张量形状存储空间大小来确定。接上文的例子,数据节点所需的张量形状存储空间大小为3*4=12,则该地址索引的取值范围可以为0-11。进一步地,数据节点的标签中记录的地址索引可以是该张量形状的首地址的索引。例如,“输入”数据节点处数据标签中的地址索引可以为index=0,该“输入”数据节点处的张量形状可以用shapes[0]、shapes[1]、shapes[2]、shapes[3]表示,“隐藏”数据节点处数据标签中的地址索引可以为index=4,表示“隐藏”数据节点的张量形状存储区从index=4开始计算,从而根据该索引可以确定“隐藏”数据节点的张量形状可以用shapes[4]、shapes[5]、shapes[6]、shapes[7]表示。“输出”数据节点处数据标签中的地址索引可以为index=8,表示“输出”数据节点的张量形状存储区从index=8开始计算,该“输出”数据节点处的张量形状可以用shapes[8]、shapes[9]、shapes[10]、shapes[11]表示。
在本实施例的一些可选的实现方式中,计算图中数据节点的标签数据还包括用于指示神经网络数据类别的类别数据,其中类别数据用于指示输入神经元、常量权重、常量神经元、隐藏神经元和输出神经元中的一项或多项。这里的类别数据指的是神经网络数据分类(Neural Data Classification, NDC)。神经网络数据的类别包括输入神经元(NDC=IN)、常量权重 (NDC=CW)、常量神经元(NDC=CN)、隐藏神经元(NDC=HN)、输出神经元(NDC=ON)、输入权值(NDC=IW)、输出权值(NDC=OW)、硬件指令(NDC=Inst)、辅助数据(NDC=Aux)等。不同的类别数据具有不同的数据特性,例如硬件指令(NDC=Inst)、辅助数据(NDC=Aux)、常量权重(NDC=CW)、常量神经元(NDC=CN)的数据为常量数据;输入神经元(NDC=IN)、隐藏神经元(NDC=HN)、输出神经元(NDC=ON)、输入权值(NDC=IW)、输出权值(NDC=OW)的数据为变量数据。图6 示出了包含根据本披露实施例的用于指示神经网络数据类别的类别数据的计算图600。本披露实施例通过读取计算图中节点处的标签数据中的类别数据,可以快速对标签数据进行相应的处理,提高了神经网络的编译效率。
在本实施例的一些可选的实现方式中,算子代码还可以包括隐藏神经元空间申请代码和/或算子模板代码,其中通过搜索与计算节点相连的隐藏神经元来生成隐藏神经元空间申请代码,并且根据计算节点中的算子的属性来生成算子模板代码。以图6所示的计算图600为例,可以搜索与“卷积”计算节点相连的数据节点,并提取其中NDC=HN的节点处的张量形状(即获取了与“卷积”计算节点相连的隐藏神经元)。由于“隐藏”数据节点处的张量形状为4阶,因此可以为该隐藏神经元申请4个张量形状存储地址,并生成以下隐藏神经元空间申请代码:
int temp[shape[4]*shape[5]*shape[6]*shape[7]];
其中,shape[4]、shape[5]、shape[6]、shape[7]为张量形状存储地址。
其中,算子模板代码与算子的属性有关,以图7所示的计算图700为例,卷积算子(“卷积”计算节点对应的算子)相连的输入节点包括:“输入”数据节点、“卷积核”数据节点、“偏置”数据节点,卷积算子连续的输出节点包括“隐藏”数据节点,shape[0]、shape[1]、shape[2]、shape[3] 为“输入”数据节点处的张量形状存储地址,KN、KH、KW、SH、SW 为“卷积核”数据节点、“偏置”数据节点和“卷积”计算节点处的定义常量。为此,可以生成卷积算子的模板代码:
conv(input,kernel,bias,temp,shape[0],shape[1],shape[2],shape[3],KN,KH,KW,SH,SW)。
在介绍了本披露示例性实施方式的方法之后,接下来参考图8对本披露示例性实施方式的用于神经网络的编译器进行描述。
图8示意性地示出了根据本披露实施方式的用于神经网络的编译器的功能框图。如图8中所示,编译器800可以包括:获取单元810,其用于获取神经网络的计算图,其中计算图包括计算节点和数据节点及其各自的标签数据,其中标签数据包括用于描述张量形状的形状参数;赋值单元820,其用于对数据节点的标签数据中的形状参数进行赋值;以及算子生成单元 830,其用于根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。
在一些实施例中,数据节点包括输入数据节点和输出数据节点,编译器还包括:前置代码生成单元,配置成在对标签中的形状参数进行赋值之前,根据输入数据节点、输出数据节点和标签数据来生成前置代码。
在一些实施例中,前置代码包括定义常量代码和函数头代码。
在一些实施例中,前置代码生成单元包括常量代码生成单元,配置成根据标签数据中的常量数据来生成定义常量代码。
在一些实施例中,前置代码生成单元包括函数头代码生成单元,配置成根据输入数据节点、输出数据节点和标签数据中的变量数据来生成函数头代码。
在一些实施例中,计算图中数据节点的标签数据还包括用于指示神经网络数据类别的类别数据,类别数据用于指示输入神经元、常量权重、常量神经元、隐藏神经元和输出神经元中的一项或多项。
在一些实施例中,常量代码生成单元包括:读取单元,配置成读取至少一个输入数据节点的标签数据中的第一常量以及对应算子的标签数据的第二常量;命名单元,配置成对第一常量和第二常量进行命名;以及生成单元,配置成生成用于定义命名后的第一常量和第二常量的代码,以获得定义常量代码。
在一些实施例中,命名单元进一步配置成:响应于检测到第一常量和 /或第二常量中存在重复的常量元素,对重复的常量元素合并命名。
在一些实施例中,函数头代码包括函数名和参数代码,其中函数头代码生成单元进一步配置成:根据至少一个输入数据节点、至少一个输出数据节点的标签数据中的数据,生成函数名与参数代码。
在一些实施例中,函数头代码还包括申请形状区代码,其中函数头代码生成单元进一步配置成:根据计算图中包含变量数据的数据节点的数量以及每个数据节点对应的数据确定的张量形状存储区大小,生成申请形状区代码。
在一些实施例中,算子代码还包括隐藏神经元空间申请代码和/或算子模板代码,其中算子生成单元进一步配置成通过搜索与计算节点相连的隐藏神经元来生成隐藏神经元空间申请代码,并且根据计算节点中的算子的属性来生成算子模板代码。
应当理解,编译器800中记载的诸单元与参考图1和图1描述的方法中的各个步骤相对应。由此,上文针对用于神经网络的编译方法描述的操作和特征同样适用于编译器800及其中包含的单元,在此不再赘述。
图9是示出根据本披露实施例的一种组合处理装置的结构图。可以理解的是,这里公开的组合处理装置可以用于执行本公开前述结合附图所描述的编译操作。在一些场景中,该组合处理装置可以包括本公开前述结合附图所描述的编译器。在另一些场景中,该组合处理装置可以与本公开前述结合附图所描述的编译器连接,以便执行经编译器编译后所获得的可执行程序。
如图9中所示,该组合处理装置900包括计算处理装置902、接口装置904、其他处理装置906和存储装置908。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置910,该计算装置可以配置用于执行各类计算操作,例如人工智能领域内的机器学习所涉及的各类运算。
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。由此,本披露上文结合附图描述的算子代码可以在智能处理器执行。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(Central Processing Unit, CPU)、图形处理器(Graphics ProcessingUnit,GPU)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列 (Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和 /或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。在一些场景中,该接口装置还可以实现为计算处理装置和其他处理装置之间的应用编程接口,包括例如驱动程序接口,以便在二者之间传递由计算处理装置将要执行的各类指令和程序。
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
在一些实施例里,本披露还公开了一种芯片(例如图10中示出的芯片1002)。在一种实现中,该芯片是一种***级芯片(System on Chip, SoC)。该芯片可以通过对外接口装置(如图10中示出的对外接口装置 1006)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如DRAM接口) 等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图10对该板卡进行详细地描述。
图10是示出根据本披露实施例的一种板卡1000的结构示意图,其可以包括本披露结合附图所描述的智能处理器架构。如图10中所示,该板卡包括用于存储数据的存储器件1004,其包括一个或多个存储单元1010。该存储器件可以通过例如总线等方式与控制器件1008和上文所述的芯片 1002进行连接和数据传输。进一步,该板卡还包括对外接口装置1006,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1012(例如服务器或计算机)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准PCIE接口等。
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(Micro ControllerUnit,MCU),以用于对所述芯片的工作状态进行调控。
根据上述结合图9和图10的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备 (例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和 /或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个***,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于U盘、闪存盘、只读存储器 (Read Only Memory,ROM)、随机存取存储器(Random Access Memory, RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、 FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1、一种用于神经网络的编译方法,包括:
获取神经网络的计算图,其中所述计算图包括计算节点和数据节点及其各自的标签数据,其中所述标签数据包括用于描述张量形状的形状参数;
对所述数据节点的标签数据中的形状参数进行赋值;以及
根据赋值后的所述形状参数和算子输出形状公式库来生成所述计算节点中对应算子的算子代码。
条款A2、根据条款A1所述的方法,其中所述数据节点包括输入数据节点和输出数据节点,所述方法还包括:
在对所述标签中的形状参数进行赋值之前,根据所述输入数据节点、输出数据节点和所述标签数据来生成前置代码。
条款A3、根据条款A2所述的方法,其中所述前置代码包括定义常量代码和函数头代码。
条款A4、根据条款A3所述的方法,其中根据所述标签数据中的常量数据来生成所述定义常量代码。
条款A5、根据A3所述的方法,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码。
条款A6、根据条款A1所述的方法,其中所述计算图中数据节点的标签数据还包括用于指示神经网络数据类别的类别数据,其中所述类别数据用于指示输入神经元、常量权重、常量神经元、隐藏神经元和输出神经元中的一项或多项。
条款A7、根据条款A4所述的方法,其中根据所述标签数据中的常量数据来生成定义常量代码包括:
读取至少一个输入数据节点的标签数据中的第一常量以及对应算子的标签数据的第二常量;
对所述第一常量和所述第二常量进行命名;以及
生成用于定义命名后的所述第一常量和所述第二常量的代码,以获得所述定义常量代码。
条款A8、根据条款A7所述的方法,其中对所述第一常量和所述第二常量进行命名还包括:
响应于检测到所述第一常量和/或第二常量中存在重复的常量元素,对所述重复的常量元素合并命名。
条款A9、根据条款A5所述的方法,其中所述函数头代码包括函数名和参数代码,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码包括:
根据至少一个输入数据节点、至少一个输出数据节点的标签数据中的数据,生成函数名与参数代码。
条款A10、根据条款A9所述的方法,其中所述函数头代码还包括申请形状区代码,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码包括:
根据所述计算图中包含变量数据的数据节点的数量以及每个数据节点对应的数据确定的张量形状存储区大小,生成申请形状区代码。
条款A11、根据条款A1所述的方法,其中所述算子代码还包括隐藏神经元空间申请代码和/或算子模板代码,其中通过搜索与所述计算节点相连的隐藏神经元来生成隐藏神经元空间申请代码,并且根据所述计算节点中的算子的属性来生成算子模板代码。
条款A12、一种用于神经网络的编译器,包括:获取单元,其用于获取神经网络的计算图,其中计算图包括计算节点和数据节点及其各自的标签数据,其中标签数据包括用于描述张量形状的形状参数;赋值单元,其用于对数据节点的标签数据中的形状参数进行赋值;以及算子生成单元,其用于根据赋值后的形状参数和算子输出形状公式库来生成计算节点中对应算子的算子代码。
条款A13、根据条款A12所述的编译器,其中数据节点包括输入数据节点和输出数据节点,编译器还包括:前置代码生成单元,配置成在对标签中的形状参数进行赋值之前,根据输入数据节点、输出数据节点和标签数据来生成前置代码。
条款A14、根据条款A13所述的编译器,其中前置代码包括定义常量代码和函数头代码。
条款A15、根据条款A14所述的编译器,其中前置代码生成单元包括常量代码生成单元,配置成根据标签数据中的常量数据来生成定义常量代码。
条款A16、根据条款A14所述的编译器,其中前置代码生成单元包括函数头代码生成单元,配置成根据输入数据节点、输出数据节点和标签数据中的变量数据来生成函数头代码。
条款A17、根据条款A12所述的编译器,其中计算图中数据节点的标签数据还包括用于指示神经网络数据类别的类别数据,其中类别数据用于指示输入神经元、常量权重、常量神经元、隐藏神经元和输出神经元中的一项或多项。
条款A18、根据条款A15所述的编译器,其中常量代码生成单元包括:读取单元,配置成读取至少一个输入数据节点的标签数据中的第一常量以及对应算子的标签数据的第二常量;命名单元,配置成对第一常量和第二常量进行命名;以及生成单元,配置成生成用于定义命名后的第一常量和第二常量的代码,以获得定义常量代码。
条款A19、根据条款A18所述的编译器,其中命名单元进一步配置成:响应于检测到第一常量和/或第二常量中存在重复的常量元素,对重复的常量元素合并命名。
条款A20、根据条款A16所述的编译器,其中函数头代码包括函数名和参数代码,其中函数头代码生成单元进一步配置成:根据至少一个输入数据节点、至少一个输出数据节点的标签数据中的数据,生成函数名与参数代码。
条款A21、根据条款A20所述的编译器,其中函数头代码还包括申请形状区代码,其中函数头代码生成单元进一步配置成:根据计算图中包含变量数据的数据节点的数量以及每个数据节点对应的数据确定的张量形状存储区大小,生成申请形状区代码。
条款A22、根据条款A12所述的编译器,其中算子代码还包括隐藏神经元空间申请代码和/或算子模板代码,其中算子生成单元进一步配置成通过搜索与计算节点相连的隐藏神经元来生成隐藏神经元空间申请代码,并且根据计算节点中的算子的属性来生成算子模板代码。
条款A23、一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本披露第一方面任一项的方法。
条款A24、一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现本披露第一方面任一项的方法。
条款A25、一种用于对可变神经网络模型进行实时编译的***,包括:互联的主机和设备,其中主机包括根据本披露第二方面的编译器;其中设备配置成执行经编译器编译的代码。
应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。

Claims (15)

1.一种用于神经网络的编译方法,包括:
获取神经网络的计算图,其中所述计算图包括计算节点和数据节点及其各自的标签数据,其中所述标签数据包括用于描述张量形状的形状参数;
对所述数据节点的标签数据中的所述形状参数进行赋值;以及
根据赋值后的所述形状参数和算子输出形状公式库来生成所述计算节点中对应算子的算子代码。
2.根据权利要求1所述的方法,其中所述数据节点包括输入数据节点和输出数据节点,所述方法还包括:
在对所述标签数据中的所述形状参数进行赋值之前,根据所述输入数据节点、输出数据节点和所述标签数据来生成前置代码。
3.根据权利要求2所述的方法,其中所述前置代码包括定义常量代码和函数头代码。
4.根据权利要求3所述的方法,其中根据所述标签数据中的常量数据来生成所述定义常量代码。
5.根据权利要求3所述的方法,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码。
6.根据权利要求1所述的方法,其中所述计算图中数据节点的标签数据还包括用于指示神经网络数据类别的类别数据,其中所述类别数据用于指示输入神经元、常量权重、常量神经元、隐藏神经元和输出神经元中的一项或多项。
7.根据权利要求4所述的方法,其中根据所述标签数据中的常量数据来生成定义常量代码包括:
读取至少一个输入数据节点的标签数据中的第一常量以及对应算子的标签数据的第二常量;
对所述第一常量和所述第二常量进行命名;以及
生成用于定义命名后的所述第一常量和所述第二常量的代码,以获得所述定义常量代码。
8.根据权利要求7所述的方法,其中对所述第一常量和所述第二常量进行命名还包括:
响应于检测到所述第一常量和/或第二常量中存在重复的常量元素,对所述重复的常量元素合并命名。
9.根据权利要求5所述的方法,其中所述函数头代码包括函数名和参数代码,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码包括:
根据至少一个输入数据节点、至少一个输出数据节点的标签数据中的数据,生成函数名与参数代码。
10.根据权利要求9所述的方法,其中所述函数头代码还包括申请形状区代码,其中根据所述输入数据节点、输出数据节点和所述标签数据中的变量数据来生成函数头代码包括:
根据所述计算图中包含变量数据的数据节点的数量以及每个数据节点对应的数据确定的张量形状存储区大小,生成申请形状区代码。
11.根据权利要求1所述的方法,其中所述算子代码还包括隐藏神经元空间申请代码和/或算子模板代码,其中通过搜索与所述计算节点相连的隐藏神经元来生成隐藏神经元空间申请代码,根据所述计算节点中的算子的属性来生成算子模板代码。
12.一种用于神经网络的编译器,包括:
获取单元,其用于获取神经网络的计算图,其中所述计算图包括计算节点和数据节点及其各自的标签数据,其中所述标签数据包括用于描述张量形状的形状参数;
赋值单元,其用于对所述数据节点的标签数据中的所述形状参数进行赋值;以及
算子生成单元,其用于根据赋值后的所述形状参数和算子输出形状公式库来生成所述计算节点中对应算子的算子代码。
13.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被
所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-11中任一项所述的方法。
14.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-11中任一项所述的方法。
15.一种用于对可变神经网络模型进行实时编译的***,包括:
互联的主机和设备,
其中所述主机包括根据权利要求12所述的编译器;
其中所述设备配置成执行经所述编译器编译的代码。
CN202110668264.4A 2021-06-16 2021-06-16 用于神经网络的编译方法、编译器及相关产品 Pending CN115480743A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110668264.4A CN115480743A (zh) 2021-06-16 2021-06-16 用于神经网络的编译方法、编译器及相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110668264.4A CN115480743A (zh) 2021-06-16 2021-06-16 用于神经网络的编译方法、编译器及相关产品

Publications (1)

Publication Number Publication Date
CN115480743A true CN115480743A (zh) 2022-12-16

Family

ID=84420183

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110668264.4A Pending CN115480743A (zh) 2021-06-16 2021-06-16 用于神经网络的编译方法、编译器及相关产品

Country Status (1)

Country Link
CN (1) CN115480743A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115658331A (zh) * 2022-12-28 2023-01-31 杭州登临瀚海科技有限公司 动态神经网络的编译方法、装置、电子设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115658331A (zh) * 2022-12-28 2023-01-31 杭州登临瀚海科技有限公司 动态神经网络的编译方法、装置、电子设备及存储介质
CN115658331B (zh) * 2022-12-28 2023-03-21 杭州登临瀚海科技有限公司 动态神经网络的编译方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
WO2018171717A1 (zh) 面向神经网络处理器的自动化设计方法和***
US20230023101A1 (en) Data processing method and device
CN112292667B (zh) 选择处理器的方法和装置
WO2021000970A1 (zh) 深度学习算法的编译方法、装置及相关产品
WO2020042739A1 (zh) 数据预处理方法、装置、计算机设备和存储介质
CN112465133B (zh) 控制流多核并行方法、计算机设备和存储介质
CN112070202B (zh) 一种融合图的生成方法、生成装置和计算机可读存储介质
CN112463159B (zh) 编译方法、装置、电子设备和存储介质
CN114580606A (zh) 数据处理方法、装置、计算机设备和存储介质
Wloka et al. Smiler: Saliency model implementation library for experimental research
CN115480743A (zh) 用于神经网络的编译方法、编译器及相关产品
CN110428359A (zh) 用于处理感兴趣区域数据的装置和方法
Yuan Implementation of self-organizing maps with Python
CN115438768A (zh) 模型推理方法、装置、计算机设备及存储介质
Wah New computers for artificial intelligence processing
WO2023030507A1 (zh) 编译优化方法、装置、计算机设备以及存储介质
Sun et al. Efficient tensor cores support in tvm for low-latency deep learning
CN115840894A (zh) 一种用于处理多维张量数据的方法及其相关产品
CN115329923A (zh) 用于神经网络模型的编译方法和相关产品
Pias et al. Perfect storm: DSAs embrace deep learning for GPU-based computer vision
CN112463158B (zh) 编译方法、装置、电子设备和存储介质
Oltean et al. Method for rapid development of Arduino-based applications enclosing ANN
Nie Memory-driven data-flow optimization for neural processing accelerators
Ali et al. Generating Efficient FPGA-based CNN Accelerators from High-Level Descriptions
McCune The PSI Program Model Builder-synthesis of very high-level programs

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination