CN112465116B - 编译方法、运算方法、电子设备和存储介质 - Google Patents
编译方法、运算方法、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112465116B CN112465116B CN202011341573.2A CN202011341573A CN112465116B CN 112465116 B CN112465116 B CN 112465116B CN 202011341573 A CN202011341573 A CN 202011341573A CN 112465116 B CN112465116 B CN 112465116B
- Authority
- CN
- China
- Prior art keywords
- operator
- operand
- loop
- input
- condition
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/10—Machine learning using kernel methods, e.g. support vector machines [SVM]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical 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)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Neurology (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本公开涉及运算方法、装置、电子设备和存储介质。所述计算机设备包括计算处理装置、接口装置、其他处理装置和存储装置。计算处理装置可以配置成执行用户指定的操作,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据本申请的实施方式,可根据输入操作数的实际规模控制循环的次数,节省计算资源,提高运算效率。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种运算方法、装置、电子设备和存储介质。
背景技术
在人工智能技术领域,神经网络算法是非常流行的一种机器学习算法,在各种领域中都取得了非常好的效果,比如图像识别,语音识别,自然语言处理等。随着神经网络算法的发展,算法的复杂度也越来越高,为了提高识别度,模型的规模也在逐渐增大。
发明内容
有鉴于此,本公开提出了一种运算方法、装置、电子设备和存储介质,可根据输入操作数的实际规模控制循环的次数,节省计算资源,提高运算效率。
根据本公开的一方面,提供了一种编译方法,所述方法包括:
遍历神经网络中的算子,判断所述算子的输入操作数的规模是否可变;
若所述算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络;
其中,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,
所述循环控制流网络包括循环控制条件,所述循环控制条件随所述算子运行时所述输入操作数的实际规模变化,循环控制条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,判断算子的输入操作数的规模是否可变,包括:
若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
在生成的循环控制流网络中,所述循环控制条件的一个输入为所述数据块。
在一种可能的实现方式中,在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络,包括:
将所述循环控制流网络插入到神经网络的计算图中所述算子的输入操作数和输出操作数之间。
在一种可能的实现方式中,所述循环控制条件包括进入循环条件和退出循环条件,在所述计算图中,所述进入循环条件的输入为所述输入操作数,所述数据块为所述退出循环条件的输入,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述进入循环条件包括enter算子和merge算子,所述enter算子的输入端连接所述输入操作数、输出端连接所述merge算子的第一输入端,所述merge算子的第二输入端连接所述退出循环条件的第二输出端,所述merge算子的输出端连接所述动态读算子的输入端;
所述退出循环条件包括switch算子、exit算子以及nextiter算子,所述switch算子的第一输入端连接所述动态写算子的输出端、所述switch算子的第二输入端连接所述数据块、所述switch算子的第一输出端连接所述exit算子的输入端、所述switch算子的第二输出端连接所述nextiter算子的输入端;
所述exit算子的输出端连接所述输出操作数,所述nextiter算子的输出端连接所述merge算子的第二输入端。
根据本公开的另一方面,提供了一种运算方法,所述方法包括:
执行算子对应的运算前,判断算子的输入操作数的规模是否可变;
若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模;其中,所述算子的输入操作数和所述输入操作数之间设置有循环控制流网络,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,所述循环控制流网络包括循环控制条件,循环控制条件包括退出循环条件;
根据所述实际规模设置所述退出循环条件;
其中,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述循环控制条件还包括进入循环条件,所述进入循环条件的输入为所述输入操作数,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件。
在一种可能的实现方式中,所述方法还包括:
采用所述动态读算子从所述输入操作数中读取有效操作数;
通过所述算子对所述有效操作数执行运算得到中间结果;
根据所述退出循环条件、所述实际规模以及所述动态读算子已经读取的有效操作数的规模判断是否退出循环;
若退出循环,将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址;
若不退出循环,则将所述中间结果输出给所述进入循环条件作为下一次计算的操作数。
在一种可能的实现方式中,判断算子的输入操作数的规模是否可变,包括:
若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模,包括:
若算子的输入操作数的规模可变时,从指定的所述数据块获取所述实际规模。
根据本公开的另一方面,提供了一种编译装置,所述装置包括:
第一判断模块,用于遍历神经网络中的算子,判断所述算子的输入操作数的规模是否可变;
插入模块,用于若所述算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络;
其中,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,
所述循环控制流网络包括循环控制条件,所述循环控制条件随所述算子运行时所述输入操作数的实际规模变化,循环控制条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述第一判断模块包括:
第一判断单元,用于若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
在生成的循环控制流网络中,所述循环控制条件的一个输入为所述数据块。
在一种可能的实现方式中,所述插入模块包括:
插入单元,用于将所述循环控制流网络插入到神经网络的计算图中所述算子的输入操作数和输出操作数之间。
在一种可能的实现方式中,所述循环控制条件包括进入循环条件和退出循环条件,在所述计算图中,所述进入循环条件的输入为所述输入操作数,所述数据块为所述退出循环条件的输入,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述进入循环条件包括enter算子和merge算子,所述enter算子的输入端连接所述输入操作数、输出端连接所述merge算子的第一输入端,所述merge算子的第二输入端连接所述退出循环条件的第二输出端,所述merge算子的输出端连接所述动态读算子的输入端;
所述退出循环条件包括switch算子、exit算子以及nextiter算子,所述switch算子的第一输入端连接所述动态写算子的输出端、所述switch算子的第二输入端连接所述数据块、所述switch算子的第一输出端连接所述exit算子的输入端、所述switch算子的第二输出端连接所述nextiter算子的输入端;
所述exit算子的输出端连接所述输出操作数,所述nextiter算子的输出端连接所述merge算子的第二输入端。
根据本公开的另一方面,提供了一种运算装置,所述装置包括:
第二判断模块,用于执行算子对应的运算前,判断算子的输入操作数的规模是否可变;
获取模块,用于若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模;其中,所述算子的输入操作数和所述输入操作数之间设置有循环控制流网络,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,所述循环控制流网络包括循环控制条件,循环控制条件包括退出循环条件;
设置模块,用于根据所述实际规模设置所述退出循环条件;
其中,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述循环控制条件还包括进入循环条件,所述进入循环条件的输入为所述输入操作数,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件。
在一种可能的实现方式中,所述装置还包括:
读取模块,用于采用所述动态读算子从所述输入操作数中读取有效操作数;
运算模块,用于通过所述算子对所述有效操作数执行运算得到中间结果;
第三判断模块,用于根据所述退出循环条件、所述实际规模以及所述动态读算子已经读取的有效操作数的规模判断是否退出循环;
第一输出模块,用于若退出循环,将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址;
第二输出模块,用于若不退出循环,则将所述中间结果输出给所述进入循环条件作为下一次计算的操作数。
在一种可能的实现方式中,所述第二判断模块,包括:
第二判断单元,用于若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
所述获取模块包括:
获取单元,用于若算子的输入操作数的规模可变时,从指定的所述数据块获取所述实际规模。根据本公开的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述方法。
根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。
根据本申请上述实施方式的编译方法或装置,对于输入操作数的规模不变,运行期的操作数的规模可变的情况,即使编译器无法获知操作数运行期的实际规模,通过插入循环控制条件生成循环控制流网络,循环控制条件的具体参数在运行期确定,即可根据输入操作数的实际规模控制循环的次数,节省计算资源,提高运算效率。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本申请一实施例的神经网的编译方法的流程图。
图2a示出相关技术中的计算图的示意图。
图2b示出根据本申请一实施例的计算图的示意图。
图3示出根据本申请一实施例的运算方法的流程图。
图4示出根据本申请一实施例的计算图的示意图。
图5示出根据本申请一实施例的应用场景。
图6示出根据本申请一实施例的编译装置的框图。
图7示出根据本申请一实施例的运算装置的框图。
图8是示出根据本申请实施例的一种组合处理装置1200的结构图。
图9是示出根据本申请实施例的一种板卡1300的结构示意图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
为了减少深度学习推理的时间,编程模型限制了主机端和设备端数据通信的次数。主机端和设备端数据通信(IO)会消耗大量时间,导致运行效率降低,因此,现有的编程模型在对神经网络模型进行编译时,通常会通过限制主机端和设备端数据通信的次数,从而减少运行时间,提高运行效率。
但上述限制主机端和设备端数据通信的次数的方式有一定的局限性,导致现有的编程模型不支持某些应用场景。比如说,当输入数据(操作数)的规模在运行期和编译期不同时,编译期无法获得运行期的输入数据的规模,导致无法正常编译。
神经网络模型中的操作数可以采用张量数据描述,在本申请中,张量数据是对存储的一块数据的特征描述,张量数据记录了数据的形状、类型等信息。本申请实施例中,张量数据可以包括神经网络中输入张量数据、输出张量数据,也可以包括特征张量数据等。其中,输入数据的规模可以是指张量数据的形状、大小等信息。
输入数据的规模在运行期可变可以分为两种场景:第一种是输入的操作数的规模可变,运行期的操作数规模随着输入的操作数的规模的变化而变化;第二种是输入的操作数的规模不变,运行期的操作数的规模可变。对于第一种场景,相关技术中可以通过在编译时根据输入的操作数的规模的变化改变模型中描述数据的基地址的方式,实现运行期的操作数的规模的随着输入的操作数的规模的变化而变化。对于第二种场景,现有的编译方式不支持这种场景。
举例来说,在程序语言中,控制流决定了语句的执行顺序,常见的控制流包括顺序执行、分支 (if/else/switch等)和循环(while)等。若神经网络模型的程序中包括控制流,则在对神经网络模型进行编译时,神经网络模型是静态的,而在运行时神经网络是动态的,编译期无法获知运行期输入的操作数的规模。
对于输入的操作数的规模不变,运行期的操作数的规模可变的情况,如果编译期无法获知运行期的操作数的规模,则有可能造成计算资源的浪费,降低运算效率。
为了解决上述技术问题,本申请提供了一种神经网络模型的编译方法。
图1示出根据本申请一实施例的神经网的编译方法的流程图。如图1所示,本申请实施例的编译方法可以包括以下步骤:
步骤S10,遍历神经网络中的算子,判断算子的输入操作数的规模是否可变;
步骤S11,若算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络;
其中,循环控制流网络可以用于循环读取(比如多次循环读取)所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果。所述循环控制流网络包括循环控制条件,所述循环控制条件随所述算子运行时所述输入操作数的实际规模变化,循环控制条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,编译器可以根据算子的类型判断算子的输入操作数的规模是否可变。比如说,某几个类型(以下称预设类型)的算子的输入操作数的规模通常是可变的,那么编译器可以根据算子的类型判断遍历的算子属不属于预设类型,如果属于预设类型,那么可以判断该算子的输入操作数的规模是可变的,如果不属于预设类型,那么编译器可以判断该算子的输入操作数的规模是不可变的。
在另一种可能的实现方式中,判断算子的输入操作数的规模是否可变,可以包括:若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。在该实现方式中,用户在创建算子时,如果算子的输入操作数的规模是可变的,那么可以为算子贴上规模可变标识,比如说在算子的参数中加入规模可变标识。这样,编译器在对神经网络模型进行编译时,遍历到算子,可以根据算子的参数中是否包括规模可变标识判断算子的输入操作数的规模是否可变。比如说,如果算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,如果算子不包括规模可变标识,则判断所述算子的输入操作数的规模是不可变的。
对于步骤S11,根据所述算子生成循环控制流网络可以是指在所述算子之前和/或之后插入循环控制条件,从而生成循环控制流网络。比如说,可以在算子之前插入for、while等循环控制条件,或者,在算子之后插入switch算子,或者在算子之前和之后插入do…while、enter…switch等循环控制条件,生成循环控制网络。将生成的循环控制网络插入算子的输入操作数和输出操作数之间。
通过循环控制条件可以控制循环控制流网络循环的次数,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址。需要说明的是,循环控制条件中的参数在编译时是空的,也就是参数的值是不确定的,在运行时,根据输入操作数的实际规模确定循环控制条件中的参数的值。因此,循环控制条件可以随运行时输入操作数的实际规模变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,在生成的循环控制流网络中,所述循环控制条件的一个输入为所述数据块。这样,处理器在加载神经网络模型时,获取到输入操作数的实际规模,可以将实际规模填入数据块。处理器在运行到上述算子对应的循环控制条件时,可以从数据块中获取输入操作数的实际规模,对循环控制条件进行设置,从而实现对循环次数的设定。
根据本申请上述实施方式的编译方法,对于输入操作数的规模不变,运行期的操作数的规模可变的情况,即使编译器无法获知操作数运行期的实际规模,通过插入循环控制条件生成循环控制流网络,循环控制条件的具体参数在运行期确定,即可根据输入操作数的实际规模控制循环的次数,节省计算资源,提高运算效率。
在一种可能的实现方式中,步骤S11中的,在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络,可以包括:
将所述循环控制流网络插入到神经网络的计算图中所述算子的输入操作数和输出操作数之间。
计算图(Computational Graph)是通过图论语言表示数据函数的一种方式,在图论中节点通过边连接,节点代表事物,连接两节点的边表示两个事物间具有的关系,而计算图中用节点代表神经网络中的输入数据或者算子,连接两节点的边表示两点之间的输入输出关系,边还可以附有权值等。
因此,上述的输入操作数、算子和输出操作数都可以表示为计算图中的节点。如果要在输入操作数和输出操作数之间插入循环控制流网络,那么可以通过在计算图中代表上述算子的输入操作数和输出操作数的节点之间插入新的节点实现,新的节点可以是与循环控制流网络对应的节点。
在一种可能的实现方式中,所述循环控制条件包括进入循环条件和退出循环条件,在所述计算图中,所述进入循环条件的输入为所述输入操作数,所述数据块为所述退出循环条件的输入。
所述循环控制流网络还可以包括动态读算子和动态写算子。
其中,所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数。
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件。
所述退出循环条件包括两个输出端,所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件,所述退出循环条件用于根据所述数据块记录的所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址。
图2a和图2b分别示出根据本申请一实施例的计算图的示意图。
图2a所示为相关技术中算子以及算子的输入操作数和输出操作数的连接关系的示意图,如图2a所示,Tensor 1为算子OP的输入操作数,算子OP的输出操作数为Tensor2,操作数Count为记录Tensor 1 的有效操作数的实际规模的数据块,但在相关技术中,并没有根据Count记录的实际规模对计算的过程进行控制。
图2b所示为本申请一实施方式的计算图的示意图,如图2b所示,Tensor 1为算子OP的输入操作数,算子OP的输出操作数为Tensor2,Tensor 1和Tensor2之间插入了循环控制流网络(虚线框圈出了循环控制流网络)。基于图2b所示的计算图,在执行运算的过程中,可以根据输入操作数的实际规模控制循环的次数。
图3示出根据本申请一实施例的运算方法的流程图。如图3所示,本申请实施例的运算方法可以包括以下步骤:
步骤S31,执行算子对应的运算前,判断算子的输入操作数的规模是否可变。
如上所述,可以根据算子是否包括规模可变标识判断算子的输入操作数的规模是否可变,或者可以根据算子的类型判断算子的输入操作数的规模是否可变。
步骤S32,若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模。
如上所述,在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块。因此,步骤S32可以包括:若算子的输入操作数的规模可变时,从指定的所述数据块获取所述实际规模。如图2b所示,处理器可以从操作数Count中获取输入操作数的实际规模。或者,处理器也可以直接根据输入操作数的大小确定输入操作数的实际规模,本申请对获取上述实际规模的具体方式不作限定。
步骤S33,根据所述有效操作数的实际规模设置所述退出循环条件。
如图2b所示,可以根据从数据块Count中获取的实际规模设置退出循环条件。
这样,根据本申请实施例的运算方法可以通过以下过程完成运算的过程:
进入循环:
步骤S34,采用所述动态读算子从所述输入操作数中读取有效操作数;
步骤S35,通过所述算子对所述有效操作数执行运算得到中间结果;
步骤S36,根据所述退出循环条件、所述实际规模以及所述动态读算子已经读取的有效操作数的规模判断是否退出循环;
步骤S37,若退出循环,将所述中间结果作为算子的运算结果输出到所述输出操作数对应的地址;
步骤S38,若不退出循环,则将所述中间结果输出给所述进入循环条件作为下一次计算的操作数。
需要说明的是,本申请实施例的循环控制条件也可以不包括进入循环条件动态读算子直接连接输入操作数Tensor 1,处理器可以通过动态读算子从输入操作数中读取得到有效操作数B。处理器可以采用算子OP对有效操作数B进行运算得到中间结果C。处理器通过动态写算子将中间结果C写入操作数D 的存储空间。之后,处理器可以根据已经读取的有效操作数的规模、实际规模判断是否退出循环:如果已经读取的有效操作数的规模和实际规模相同,那么可以退出循环,将所述中间结果作为运算结果输出到所述输出操作数(Tensor2)对应的地址;如果已经读取的有效操作数的规模小于实际规模,那么,处理器可以返回继续采用动态读算子读取有效操作数,或者,处理器也可以将中间结果输出给进入循环条件作为下一次计算的操作数。
在一种可能的实现方式中,所述进入循环条件包括enter算子和merge算子,所述退出循环条件包括switch算子、exit算子以及nextiter算子。
图4示出根据本申请一实施例的计算图的示意图。
enter算子将输入操作数转发到由给定名称(name)唯一标识的执行帧(executionframe),用于将一个执行帧中的张量传递给子执行帧,当输入操作数可用时,将启用enter执行传递的过程。
merge算子将一个可用输入操作数转发到输出,当merge的任何输入操作数可用时,将启用该merge 以执行转发的过程。
switch算子根据布尔张量(tensor of bool)将输入操作数(input tensor)转发到算子的输出操作数之一,当switch的两个输入操作数都可用时,switch被启用以执行转发的过程。
exit算子将输入操作数从执行帧转发到其父执行帧,用于将子执行帧中计算的输出操作数返回到其父帧,退出操作在输入操作数可用时启用。
Nextiter算子将输入操作数转发到当前执行帧中的下一个迭代。TensorFlow运行时在执行帧中跟踪迭代,在执行帧中执行的任何操作都有一个唯一的迭代id,迭代id在迭代计算中唯一地标识同一操作的不同调用。在一个执行帧中可以有多个Nextiter操作。当输入操作数可用时,将启用Nextiter操作。
如图4所示,所述enter算子的输入端连接所述输入操作数、输出端连接所述merge算子的第一输入端,所述merge算子的第二输入端连接所述退出循环条件的第二输出端,所述merge算子的输出端连接所述动态读算子的输入端。所述switch算子的第一输入端连接所述动态写算子的输出端、所述switch 算子的第二输入端连接所述数据块、所述switch算子的第一输出端连接所述exit算子的输入端、所述 switch算子的第二输出端连接所述nextiter算子的输入端;所述exit算子的输出端连接所述输出操作数,所述nextiter算子的输出端连接所述merge算子的第二输入端。
下面结合一个应用示例对本申请的运算方法进行说明。图5示出根据本申请一实施例的应用场景,如图5所示,本申请的编译方法可以应用于第一处理器中,本申请的运算方法可以应用于第二处理器,其中,第一处理器可以是通用处理器,第二处理器可以是通用处理器、也可以是人工智能处理器。第一处理器对神经网络编译生成可执行指令输出到第二处理器中,第二处理器可以执行指令,在执行指令的过程中,可以从第一处理器获取执行指令需要的数据,在执行指令完成对数据的运算得到运算结果后,第二处理器还可以将运算结果写回到第一处理器。
第一处理器可以为中央处理单元CPU(Central Processing Unit)、图形处理单元GPU(Graphics Processing Unit)等。第二处理器可以为于执行人工智能运算的人工智能处理器,人工智能运算可包括机器学习运算,类脑运算等。其中,机器学习运算包括神经网络运算、k-means运算、支持向量机运算等。该人工智能处理器可例如包括NPU(Neural-Network Processing Unit,神经网络处理单元)、DSP(Digital Signal Process,数字信号处理单元)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)芯片中的一种或组合。
神经网络中包括算子OP,算子OP的输入操作数Tensor 1的规模是可变的,用户指定了Tensor 1的规模为1000。用户在创建算子OP时,为算子OP添加了规模可变标识,并且规模可变标识指定了数据块Count用于记录运行时Tensor 1的实际规模。
第一处理器在对神经网络模型进行编译时,遍历神经网络中的算子,如果算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在计算图中所述算子的输入操作数和输出操作数之间插入所述循环控制流网络,插入循环控制流网络之后的计算图可以如图4的示例所示。
第一处理器对神经网络模型编译完成后,可以在第二处理器上生成可执行指令。第二处理器在运行可执行指令,在执行到算子OP时,算子OP之前的算子运行得到的操作数Tensor 1以及操作数Count,其中操作数Tensor 1的规模为1000,操作数Count指定了操作数Tensor 1中有效操作数的规模为10,也就是操作数Tensor 1的实际规模为10。传统的处理方法会将这1000个数据全部处理,无效的数据会用0 来补齐,这样消耗了大量的内存、损耗性能。
本申请的编译方法插入一个循环控制流网络,对这1000个框中的有效操作数进行循环处理,每次从1000个数据中提取N个数据,并采用算子处理这N个数据,当N为1时,循环10次就可以完成计算,无需计算那990个无效的数据。当然,N的数值用户可以自行选取减少循环次数,加快计算速度。
如图4所示,循环控制流网络包含了算子OP、循环控制条件和动态读算子、动态写算子,其中,动态读算子、动态写算子分别实现了从原数据块中读取有效、需要计算的数据和将计算结果、有效的结果写入目标数据中。
整体流程如下:进入循环,Enter算子将输入操作数Copy到子帧内(循环内)。操作数A*可用,算子Merge将操作数A*Copy到操作数A。动态读算子从操作数A读取有效操作数,一次输入有效操作数的规模可以预先设置,本申请对此不作限定。比如说,对于本示例来说,可以读取一个或者多个有效操作数。读取数据规模的不同,循环次数也不相同。
动态读算子读取有效操作数得到操作数B,算子OP对操作数B进行运算得到中间结果C,动态写算子D将中间结果C写到有效结果的位置D。通过Switch算子根据Tensor 1的实际规模以及已经读取的有效操作数的规模判断是否退出循环,如果已经完成10个有效操作数的运算过程,则可以退出循环,采用Switch算子将中间结果写入到D*,exit算子将输入操作数D*从执行帧转发到其父执行帧,也就是退出循环的过程,将结果输出到Tensor 2。如果没有完成10个有效操作数的运算过程,则不能退出循环,采用Switch算子将中间结果写入到操作数E,通过Nextiter算子将输入操作数E转发到当前执行帧中的下一个迭代E*,操作数E*可用之后,Merge算子将操作数E*Copy到操作数A。动态读算子继续从操作数A读取输入操作数的有效操作数以及E*,算子OP继续进行运算。这样的循环虽然进行了数次,但是从计算量来看,相比于传统的计算过程,本申请的运算过程大大减少了时间的开销,提高了运算效率。
图6示出根据本申请一实施例的编译装置的框图。如图6所示,所述装置可以包括:
第一判断模块61,用于遍历神经网络中的算子,判断所述算子的输入操作数的规模是否可变;
插入模块62,用于若所述算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络;
其中,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,
所述循环控制流网络包括循环控制条件,所述循环控制条件随所述算子运行时所述输入操作数的实际规模变化,循环控制条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
根据本申请上述实施方式的编译装置,对于输入操作数的规模不变,运行期的操作数的规模可变的情况,即使编译器无法获知操作数运行期的实际规模,通过插入循环控制条件生成循环控制流网络,循环控制条件的具体参数在运行期确定,即可根据输入操作数的实际规模控制循环的次数,节省计算资源,提高运算效率。
在一种可能的实现方式中,所述第一判断模块61包括:
第一判断单元,用于若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,在生成的循环控制流网络中,所述循环控制条件的一个输入为所述数据块。
在一种可能的实现方式中,所述插入模块62包括:
插入单元,用于将所述循环控制流网络插入到神经网络的计算图中所述算子的输入操作数和输出操作数之间。
在一种可能的实现方式中,所述循环控制条件包括进入循环条件和退出循环条件,在所述计算图中,所述进入循环条件的输入为所述输入操作数,所述数据块为所述退出循环条件的输入,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述进入循环条件包括enter算子和merge算子,所述enter算子的输入端连接所述输入操作数、输出端连接所述merge算子的第一输入端,所述merge算子的第二输入端连接所述退出循环条件的第二输出端,所述merge算子的输出端连接所述动态读算子的输入端;
所述退出循环条件包括switch算子、exit算子以及nextiter算子,所述switch算子的第一输入端连接所述动态写算子的输出端、所述switch算子的第二输入端连接所述数据块、所述switch算子的第一输出端连接所述exit算子的输入端、所述switch算子的第二输出端连接所述nextiter算子的输入端;
所述exit算子的输出端连接所述输出操作数,所述nextiter算子的输出端连接所述merge算子的第二输入端。
图7示出根据本申请一实施例的运算装置的框图。如图7所示,所述装置可以包括:
第二判断模块71,用于执行算子对应的运算前,判断算子的输入操作数的规模是否可变;
获取模块72,用于若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模;其中,所述算子的输入操作数和所述输入操作数之间设置有循环控制流网络,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,所述循环控制流网络包括循环控制条件,循环控制条件包括退出循环条件;
设置模块73,用于根据所述实际规模设置所述退出循环条件;
其中,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址。
在一种可能的实现方式中,所述循环控制条件还包括进入循环条件,所述进入循环条件的输入为所述输入操作数,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件。
在一种可能的实现方式中,所述装置还包括:
读取模块,用于采用所述动态读算子从所述输入操作数中读取有效操作数;
运算模块,用于通过所述算子对所述有效操作数执行运算得到中间结果;
第三判断模块,用于根据所述退出循环条件、所述实际规模以及所述动态读算子已经读取的有效操作数的规模判断是否退出循环;
第一输出模块,用于若退出循环,将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址;
第二输出模块,用于若不退出循环,则将所述中间结果输出给所述进入循环条件作为下一次计算的操作数。
在一种可能的实现方式中,所述第二判断模块,包括:
第二判断单元,用于若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
在一种可能的实现方式中,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
所述获取模块包括:
获取单元,用于若算子的输入操作数的规模可变时,从指定的所述数据块获取所述实际规模。根据本公开的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述方法。
根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。
图8是示出根据本披露实施例的一种组合处理装置1200的结构图。如图8中所示,该组合处理装置 1200包括计算处理装置1202、接口装置1204、其他处理装置1206和存储装置1208。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置1210,该计算装置可以配置用于执行本文结合附图 1或图3所描述的操作。
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics ProcessingUnit,GPU)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
在一些实施例里,本披露还公开了一种芯片(例如图9中示出的芯片1302)。在一种实现中,该芯片是一种系统级芯片(System on Chip,SoC),并且集成有一个或多个如图8中所示的组合处理装置。该芯片可以通过对外接口装置(如图9中示出的对外接口装置1306)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如DRAM接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图9对该板卡进行详细地描述。
图9是示出根据本披露实施例的一种板卡1300的结构示意图。如图9中所示,该板卡包括用于存储数据的存储器件1304,其包括一个或多个存储单元1310。该存储器件可以通过例如总线等方式与控制器件1308和上文所述的芯片1302进行连接和数据传输。进一步,该板卡还包括对外接口装置1306,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1312(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准PCIE接口等。
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(Micro ControllerUnit,MCU),以用于对所述芯片的工作状态进行调控。
根据上述结合图8和图9的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、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等。
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器 (EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/ 或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种编译方法,其特征在于,所述方法包括:
遍历神经网络中的算子,判断所述算子的输入操作数的规模是否可变;
若所述算子的输入操作数的规模可变,则根据所述算子生成循环控制流网络、并在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络;
其中,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,
所述循环控制流网络包括循环控制条件,所述循环控制条件随所述算子运行时所述输入操作数的实际规模变化,循环控制条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址;
在所述算子的输入操作数和输出操作数之间插入所述循环控制流网络,包括:
将所述循环控制流网络插入到神经网络的计算图中所述算子的输入操作数和输出操作数之间;
所述循环控制条件包括进入循环条件和退出循环条件,在所述计算图中,所述进入循环条件的输入为所述输入操作数,用于保存输入操作数的实际规模的数据块为所述退出循环条件的输入,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址。
2.根据权利要求1所述的方法,其特征在于,判断算子的输入操作数的规模是否可变,包括:
若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
3.根据权利要求2所述的方法,其特征在于,所述规模可变标识中指定了所述数据块,
在生成的循环控制流网络中,所述循环控制条件的一个输入为所述数据块。
4.根据权利要求1所述的方法,其特征在于,
所述进入循环条件包括enter算子和merge算子,所述enter算子的输入端连接所述输入操作数、输出端连接所述merge算子的第一输入端,所述merge算子的第二输入端连接所述退出循环条件的第二输出端,所述merge算子的输出端连接所述动态读算子的输入端;
所述退出循环条件包括switch算子、exit算子以及nextiter算子,所述switch算子的第一输入端连接所述动态写算子的输出端、所述switch算子的第二输入端连接所述数据块、所述switch算子的第一输出端连接所述exit算子的输入端、所述switch算子的第二输出端连接所述nextiter算子的输入端;
所述exit算子的输出端连接所述输出操作数,所述nextiter算子的输出端连接所述merge算子的第二输入端。
5.一种运算方法,其特征在于,所述方法包括:
执行算子对应的运算前,判断算子的输入操作数的规模是否可变;
若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模;其中,所述算子的输入操作数和输出操作数之间设置有循环控制流网络,所述循环控制流网络用于循环读取所述输入操作数中的有效操作数、并采用所述算子对每次读取的有效操作数进行运算得到中间结果,所述循环控制流网络包括循环控制条件,循环控制条件包括退出循环条件;
根据所述实际规模设置所述退出循环条件;
其中,所述退出循环条件用于根据所述实际规模判断是否退出循环,并在判断为退出循环时将所述中间结果作为运算结果输出到所述输出操作数对应的地址;
所述循环控制条件还包括进入循环条件,所述进入循环条件的输入为所述输入操作数,
所述循环控制流网络还包括动态读算子和动态写算子,
所述动态读算子位于所述进入循环条件和所述算子之间,所述动态读算子用于读取所述输入操作数中的有效操作数,
所述动态写算子位于所述算子和所述退出循环条件之间,所述动态写算子用于将所述算子根据所述有效操作数计算得到的中间结果输出给所述退出循环条件;
所述退出循环条件的第一输出端连接所述输出操作数、所述退出循环条件的第二输出端连接所述进入循环条件。
6.根据权利要求5所述的运算方法,其特征在于,所述方法还包括:
采用所述动态读算子从所述输入操作数中读取有效操作数;
通过所述算子对所述有效操作数执行运算得到中间结果;
根据所述退出循环条件、所述实际规模以及所述动态读算子已经读取的有效操作数的规模判断是否退出循环;
若退出循环,将所述中间结果作为所述算子的运算结果输出到所述输出操作数对应的地址;
若不退出循环,则将所述中间结果输出给所述进入循环条件作为下一次计算的操作数。
7.根据权利要求5所述的运算方法,其特征在于,判断算子的输入操作数的规模是否可变,包括:
若所述算子包括规模可变标识,则判断所述算子的输入操作数的规模是可变的,其中,所述规模可变标识用于表示所述算子的输入操作数的实际规模在运行时能够变化。
8.根据权利要求7所述的运算方法,其特征在于,所述规模可变标识中指定了用于保存所述输入操作数的实际规模的数据块,
若算子的输入操作数的规模可变时,获取输入操作数的有效操作数的实际规模,包括:
若算子的输入操作数的规模可变时,从指定的所述数据块获取所述实际规模。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现权利要求1至4中任意一项所述的方法,或者,所述处理器被配置为执行所述可执行指令时实现权利要求5至8中任意一项所述的方法。
10.一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至4中任意一项所述的方法,或者,所述计算机程序指令被处理器执行时实现权利要求5至8中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011341573.2A CN112465116B (zh) | 2020-11-25 | 2020-11-25 | 编译方法、运算方法、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011341573.2A CN112465116B (zh) | 2020-11-25 | 2020-11-25 | 编译方法、运算方法、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112465116A CN112465116A (zh) | 2021-03-09 |
CN112465116B true CN112465116B (zh) | 2022-12-09 |
Family
ID=74808317
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011341573.2A Active CN112465116B (zh) | 2020-11-25 | 2020-11-25 | 编译方法、运算方法、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112465116B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022267049A1 (zh) * | 2021-06-25 | 2022-12-29 | 华为技术有限公司 | 人工智能模型的处理方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6026241A (en) * | 1997-06-13 | 2000-02-15 | Silicon Graphics, Inc. | System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation |
US9600254B1 (en) * | 2015-11-30 | 2017-03-21 | International Business Machines Corporation | Loop branch reduction |
CN111582459A (zh) * | 2020-05-18 | 2020-08-25 | Oppo广东移动通信有限公司 | 执行操作的方法、电子设备、装置及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090125894A1 (en) * | 2007-11-14 | 2009-05-14 | Nair Sreekumar R | Highly scalable parallel static single assignment for dynamic optimization on many core architectures |
CN103473111A (zh) * | 2013-08-16 | 2013-12-25 | 运软网络科技(上海)有限公司 | 一种仿脑计算虚拟化的方法和系统 |
US20150220343A1 (en) * | 2014-02-05 | 2015-08-06 | Mill Computing, Inc. | Computer Processor Employing Phases of Operations Contained in Wide Instructions |
EP4202782A1 (en) * | 2015-11-09 | 2023-06-28 | Google LLC | Training neural networks represented as computational graphs |
US11263011B2 (en) * | 2018-11-28 | 2022-03-01 | International Business Machines Corporation | Compound instruction set architecture for a neural inference chip |
-
2020
- 2020-11-25 CN CN202011341573.2A patent/CN112465116B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6026241A (en) * | 1997-06-13 | 2000-02-15 | Silicon Graphics, Inc. | System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation |
US9600254B1 (en) * | 2015-11-30 | 2017-03-21 | International Business Machines Corporation | Loop branch reduction |
CN111582459A (zh) * | 2020-05-18 | 2020-08-25 | Oppo广东移动通信有限公司 | 执行操作的方法、电子设备、装置及存储介质 |
Non-Patent Citations (2)
Title |
---|
QingLong:一种基于常变量异步拷贝的神经网络编程模型;杜伟健等;《计算机学报》;20200415(第04期);全文 * |
支持循环自动流水线的粗粒度可重构阵列体系结构;窦勇等;《中国科学(E辑:信息科学)》;20080415(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112465116A (zh) | 2021-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110298443B (zh) | 神经网络运算装置及方法 | |
KR102486030B1 (ko) | 완전연결층 신경망 정방향 연산 실행용 장치와 방법 | |
KR102470264B1 (ko) | 완전연결층 신경망 역방향 트레이닝 실행용 장치와 방법 | |
AU2014203218B2 (en) | Memory configuration for inter-processor communication in an MPSoC | |
CN112465133B (zh) | 控制流多核并行方法、计算机设备和存储介质 | |
CN112070202A (zh) | 一种融合图的生成方法、生成装置和计算机可读存储介质 | |
CN114692823A (zh) | 一种算子融合的方法、装置、存储介质及电子设备 | |
CN112463159B (zh) | 编译方法、装置、电子设备和存储介质 | |
CN112465116B (zh) | 编译方法、运算方法、电子设备和存储介质 | |
CN112463160A (zh) | 编译方法、装置、电子设备和存储介质 | |
CN108628693B (zh) | 处理器调试方法和系统 | |
CN110009100B (zh) | 自定义算子的计算方法及相关产品 | |
CN111857821A (zh) | 一种用于生成服从一定分布的随机向量装置和方法 | |
JP7042870B2 (ja) | コンピューティングデバイスによって実行される方法、装置、機器及びコンピュータ読み取り可能な記憶媒体 | |
CN112463158B (zh) | 编译方法、装置、电子设备和存储介质 | |
CN111966399B (zh) | 指令处理方法、装置及相关产品 | |
CN112766475A (zh) | 处理部件及人工智能处理器 | |
CN115373646A (zh) | 扩展信息方法、装置和相关产品 | |
CN114579131A (zh) | 用于获取硬件性能数据的方法、设备和系统 | |
CN115329923A (zh) | 用于神经网络模型的编译方法和相关产品 | |
CN114127681A (zh) | 用于实现数据流ai应用的自主加速的方法和装置 | |
Liqat et al. | An evolutionary scheduling approach for trading-off accuracy vs. verifiable energy in multicore processors | |
CN112394985B (zh) | 执行方法、装置及相关产品 | |
WO2022001438A1 (zh) | 一种计算装置、集成电路芯片、板卡、设备和计算方法 | |
CN114298292A (zh) | 获取算子数据和离线模型操作的设备及方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |