掌桥专利:专业的专利平台
掌桥专利
首页

一种算子确定、运行方法及装置

文献发布时间:2023-06-19 12:22:51


一种算子确定、运行方法及装置

技术领域

本发明涉及人工智能技术领域,具体而言,涉及一种算子确定、运行方法及装置。

背景技术

近年来,随着神经网络爆发式的研究和发展,其强大的特征提取和拟合能力使其在图像识别、自然语言处理、语音识别等领域得到了广泛的应用。为了提高神经网络模型的性能,研究人员普遍会设计更深和更复杂的网络,使得模型的参数量和计算量大大增加,导致对硬件资源(例如CPU、内存、带宽)的要求也越来越高,成本十分昂贵。同时,将如此复杂的神经网络直接部署在计算能力和续航能力有限移动设备上(例如手机、无人机、机器人、智能眼镜)也具有很大的难度,限制了其更广泛的应用。因此,研究人员也考虑从加快网络的计算速度方面入手来提高神经网络模型的性能。

现有的神经网络一般由各个运算(Operation)组成,其中最常用的运算有例如卷积(Convolution)运算和矩阵乘法(Matrix Multiplication)运算等。因为含有巨大的计算量,卷积和矩阵乘法的运行速度对神经网络的训练和推理性能具有决定性的影响。为了充分利用各个计算平台的体系结构特征以获得较为优秀的加速效果,在工程实践中卷积和矩阵乘法运算往往又被细分为各个算子。不同算子面向的场景不同,在不同运行配置下的性能也各异,而且不同运算的算子之间可能存在相互依赖。且为了迎合神经网络对算力的需求,近年来不仅传统计算平台例如CPU、GPU等开始加快更新迭代的速度,而且新型嵌入式神经网络处理器(NPU)也逐渐兴起,神经网络要适配的平台日趋复杂化。对于给定神经网络模型和运行环境,如何从诸多算子中选择性能优秀的算子成为难点。

发明内容

本发明旨在至少在一定程度上解决相关技术中的技术问题,为达上述目的,第一方面,本发明提供了一种算子确定方法,其包括:

获取神经网络中待搜索运算对应的第一搜索空间,所述第一搜索空间包括多个算子;

运行所述第一搜索空间的所述多个算子,当所述多个算子中的第一算子调用目标运算时,搜索所述目标运算对应的第二搜索空间;以及

根据所述多个算子的运行参数,从所述多个算子中确定所述待搜索运算对应的目标算子。

为达上述目的,第二方面,本发明提供了一种算子确定装置,其包括:

获取模块,用于获取神经网络中待搜索运算对应的第一搜索空间,所述第一搜索空间包括多个算子;

搜索模块,用于运行所述第一搜索空间的所述多个算子,当所述多个算子中的第一算子调用目标运算时,搜索所述目标运算对应的第二搜索空间;

确定模块,用于根据所述多个算子的运行参数,从所述多个算子中确定所述待搜索运算对应的目标算子。

使用本发明的算子确定方法或装置,通过获取待搜索运算在目标平台运行的所有算子作为第一搜索空间,运行第一搜索空间中的多个算子,并确定其对应的运行参数,并根据运行参数找到性能最优的目标算子。并通过递归搜索确定第一算子所依赖的目标运算,通过深度优先遍历等方式对算子及其依赖的运算进行递归搜索,确保当算子调用目标运算时,其依赖的运算也会选到目标算子,并设计去重机制规避冗余搜索,进一步减少搜索耗时和计算资源开销。本发明还考虑了当模型需要部署在多个平台时,如何提供统一的使用接口,将平台细节隐藏起来,提供给用户统一的表示,对于神经网络模型的部署场景具有很强的实用性。

为达上述目的,第三方面,本发明提供了一种神经网络的运行方法,其包括:

确定所述神经网络运行时的所有运算;以及

在所述神经网络的运行过程中,执行每个所述运算的目标算子,其中,所述目标算子采用如上所述的算子确定方法进行确定。

为达上述目的,第四方面,本发明提供了一种神经网络的运行装置,其包括:

处理模块,用于确定所述神经网络运行时的所有运算;

运行模块,用于在所述神经网络的运行过程中,执行每个所述运算的目标算子,其中,所述目标算子采用如上所述的算子确定方法进行确定。

使用本发明的神经网络的运行方法或装置,通过获取每个运算在对应目标平台的目标算子的缓存序列化文件,并进行反序列化确定对应的目标算子,并根据目标算子进行运行,且当算子调用目标运算时确保其依赖的运算也会选到目标算子的问题,从而大大增强神经网络的性能,对具有相互依赖运算的神经网络的训练和部署都具有很强的实用性。

为达上述目的,第五方面,本发明提供了一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现根据本发明第一方面所述的算子确定方法或根据本发明第三方面所述的神经网络的运行方法。

为达上述目的,第六方面,本发明提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现根据本发明第一方面所述的算子确定方法或根据本发明第三方面所述的神经网络的运行方法。

根据本发明的非临时性计算机可读存储介质和计算设备,具有与根据本发明第一方面的算子确定方法或根据本发明第三方面的神经网络的运行方法具有类似的有益效果,在此不再赘述。

附图说明

图1为根据本发明实施例的算子确定方法的流程示意图;

图2为根据本发明实施例的确定目标算子的流程示意图;

图3为根据本发明实施例的多进程搜索示意图;

图4为根据本发明实施例的递归搜索的流程示意图;

图5为根据本发明实施例的递归确定运行参数的流程示意图;

图6为根据本发明实施例的多算子依赖搜索的示意图;

图7为根据本发明实施例的算子确定装置的结构示意图;

图8为根据本发明实施例的神经网络的运行方法的流程示意图;

图9为根据本发明实施例的运行神经网络模型的运算的示意图;

图10为根据本发明实施例的神经网络的运行装置的结构示意图。

具体实施方式

下面将参照附图详细描述根据本发明的实施例,描述涉及附图时,除非另有表示,不同附图中的相同附图标记表示相同或相似的要素。要说明的是,以下示例性实施例中所描述的实施方式并不代表本发明的所有实施方式。它们仅是与如权利要求书中所详述的、本发明公开的一些方面相一致的装置和方法的例子,本发明的范围并不局限于此。在不矛盾的前提下,本发明各个实施例中的特征可以相互组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个、三个等,除非另有明确具体的限定。

近年来,深度神经网络由于泛化性好,易训练等优点,现已被广泛应用在图像识别、语音识别、自动驾驶、自然语言处理等领域。与此同时,一方面由于应用面的不断增大,另一方面由于数据量的不断增加,神经网络对算力的需求也越来越大。为了迎合神经网络对算力的需求,近年来不仅传统计算平台例如CPU、GPU等开始加快更新迭代的速度,而且新型嵌入式神经网络处理器(NPU)也逐渐兴起,神经网络要适配的平台日趋复杂化。

神经网络一般由各个运算(Operation)组成,其中最常用的运算有卷积(Convolution)运算和矩阵乘法(Matrix Multiplication)运算等。因为含有巨大的计算量,卷积和矩阵乘法的运行速度对神经网络的训练和推理性能具有决定性的影响。为了充分利用各个计算平台的体系结构特征以获得较为优秀的加速效果,在工程实践中卷积和矩阵乘法运算往往又被细分为各个算子。不同算子面向的场景不同,在不同运行配置下的性能也各异,而且不同运算的算子之间可能存在相互依赖。

给定神经网络模型和运行环境,如何从诸多算子中选择性能优秀的算子成为难点。现有工作主要采取启发式搜索和暴力搜索两种策略选择最优算子。其中,启发式搜索分为两种,一种是基于人工经验设定的规则,另一种则是利用机器学习和神经网络等只能算法作为启发式算法的方案。而暴力搜索则会遍历执行所有的算子,最终选择一个用时最短的算子。但启发式方法和暴力搜索的方法仍然存在以下问题:

(1)无法在选择最优算子的同时降低搜索耗时和系统资源开销。启发式方法的原理是基于经验猜测,这种方法往往只能找到局部最优解而不是全局最优解。暴力搜索算法虽然可以找到全局最优解,但是由于需要运行所有算子,其搜索时间一般为神经网络运行时间的上百倍,而且搜索过程中有可能因为所需计算资源不足而失败。

(2)没有科学的统一管理多种计算平台。不同计算平台可能有不同的搜索策略,现有方案没有做到多种计算平台的搜索接口的统一。

(3)没有本质解决算子依赖问题。现有方案没有解决一个算法的算子可能会调用其他多个算法的问题。

本发明通过在目标平台实际运行算子来保证选择到性能最优的算子,同时通过对算子搜索空间进行动态剪枝,解决传统暴力搜索方法运行慢、资源需求大的问题。还通过深度优先遍历的方式对算子及其依赖的运算进行递归搜索,并设计去重机制规避冗余搜索,进一步减少搜索耗时和计算资源开销。且本发明抽取多平台的搜索策略的抽象接口,将平台细节隐藏起来,提供给用户统一的表示,有效统一多平台搜索接口,提升搜索效率。

首先定义一些概念,以便更好地解释本发明。

operation:神经网络中的各种运算。

operation id:运算编号,用于区分不同运算。

shape:形状,用于描述数据。

param:用户描述运算的固有属性。

device id:平台编号,用于区分不同平台。

cache:存储搜索结果的缓存。

命中:cache中含有要查的内容。

OpenCL:一种移动端GPU范式。

图1所示为根据本发明实施例的算子确定方法的流程示意图,包括步骤S1至S3。

在步骤S1中,获取神经网络中待搜索运算对应的第一搜索空间,所述第一搜索空间包括多个算子。在本发明实施例中,提供接口返回可搜索的operation列表,只有那些由多个算子实现的operation才能被搜索,例如矩阵乘、卷积运算等。当用户设置好了需要搜索的operation以及目标平台后,可确定该运算在目标平台中运行的所有算子,构成该运算的第一搜索空间。可以理解的是,当用户不想搜索模型中的某个卷积时,可以通过配置文件设置该卷积operation不被搜索即可。

在本发明实施例中,可适用的神经网络运算包括但不限于矩阵乘、卷积、反卷积、池化运算。算子是运算的具体实现方式,例如卷积运算的算子可以包括快速傅里叶算子、winograd算子、直接卷积算子、im2col算子等,这些运算的不同算子在不同的运行配置例如不同的硬件、不同的输入大小下表现出的性能不尽相同,所以针对每一种运算,需要进行搜索才能得到该运算性能最优的算子。

在本发明实施例中,当用户设置好了需要搜索的operation以及目标平台后,可确定cache中的键设置为(device id,operation id,shape,param)四元组。在cache中存储的是键-值对,通过键可以唯一找到该键对应的值,cache的键就是一个唯一标识符。例如cache c={1:“operation1”,2:“operation2”},其中c表示cache,1和2分别表示键,“operation1”和“operation2”表示键1和键2对应的值。可以理解的是,构成键的多元数据组也可根据实际应用场景进行设置,本发明对此不做限制。

在步骤S2中,运行所述第一搜索空间中的所述多个算子,当所述多个算子中的第一算子调用目标运算时,搜索所述目标运算对应的第二搜索空间。

在步骤S3中,根据所述多个算子的运行参数,从所述多个算子中确定所述待搜索运算对应的目标算子。在本发明实施例中,所述运行参数包括算子的运行时间和/或算子运行时占用的计算资源等相关参数,所述目标算子包括所述运行参数满足运行条件的算子,所述运行条件包括所述算子的运行时间最短和/或所述算子的运行性能最优。可以理解的是,目标算子表示满足某些运行条件的算子,例如运行时间最短、运行性能最优,其中运行性能例如可根据运行时间与占用的计算资源计算得到。在一些实施例中,运行性能最优的目标算子例如为运行时间较短、占用的计算资源最少的算子,但本发明实施例并不以此为限。在本发明实施例中,根据目标算子需满足的运行条件来选择相应的运行参数进行计算和统计,由此确定待搜索运算对应的目标算子。上述运行时间最短和/或运行性能最优作为运行条件只是给出示例性的说明,本发明并不以此为限。

图2所示为根据本发明实施例的确定目标算子的流程示意图,包括步骤S31至S33。

在步骤S31中,获取所述多个算子的排序。在本发明实施例中,可根据人工经验设定的规则对第一搜索空间中的所有算子进行排序,由此,可较为优化地运行目标算子的搜索,且当某个operation没有被搜索时,该operation也能选到性能尽可能好的算子运行。排序规则例如可由人工测试给出,依靠人工经验设定规则,例如针对CPU平台下的卷积算子,用汇编语言写的算子速度最快,所以排在最前面,用NEON语言写的性能其次,然后是C++写的fallback算子,最后是C++写的暴力计算的算子。

在步骤S32中,为所述算子创建对应的子进程,并将执行配置传递给所述子进程,所述执行配置包括历史最优运行参数。图3所示为根据本发明实施例的多进程搜索示意图,在本发明实施例中,每个待运行的算子作为一个父进程,根据目标平台中指定的运行环境配置,为算子开辟所需要的计算资源,创建子进程执行该算子并统计运行时间。其中,父进程需要将执行配置传递给子进程,执行配置中包括子进程需要的计算资源、子进程需要执行的算子的相关参数和历史最优运行参数,例如历史最短算子运行时间。可以理解的是,历史最短算子运行时间为一个搜索空间中当前维持的最短的算子运行时间,随着最优算子搜索的进行,该历史最短算子运行时间可能会发生变化,在父进程传递给子进程的执行配置中,总是将当前最新的历史最短算子运行时间传递给子进程。即在本发明实施例中,总是将当前最新的历史最优运行参数传递给子进程。

在步骤S33中,按照所述多个算子的排序,依次运行每个所述算子对应的所述子进程,直至每个所述算子对应的所述子进程均结束,根据所述子进程的运行结果确定每个所述算子的运行参数,并将运行参数满足运行条件和/或运行参数小于所述历史最优运行参数的算子作为所述待搜索运算的所述目标算子。在本发明实施例中,依次运行所有算子对应的所述子进程,确定每个子进程对应的运行参数,直至每个所述算子对应的所述子进程均结束,并将运行参数满足运行条件和/或运行参数小于所述历史最优运行参数的算子作为所述待搜索运算的所述目标算子,例如确定所述运行参数最优的子进程对应的算子作为所述待搜索的运算的所述目标算子。

在本发明实施例中,根据配置传递运行子进程,并记录该子进程的运行参数,当该子进程的运行参数超过了执行配置中包含的历史最优运行参数时(例如当该子进程的运行时间超过了执行配置中包含的历史最短算子运行时间),则说明正在运行中的算子不可能为性能最优的算子,则不必继续运行该算子,直接结算该子进程的运行并返回无效运行时间给父进程,父进程回收步骤S32中开辟的计算资源,然后开始运行下一算子。由此,可不必完整运行所有的算子,通过对算子运行进行动态剪枝,解决传统暴力搜索方法运行慢、资源需求大的问题,有效提高了搜索效率,节省计算资源。可以理解的是,考虑到实际环境的性能抖动情况,在本发明实施例中可给出一定的容错机制,即子进程结束之前应等待的时间为历史最短算子运行时间加上容错时间,以提高搜索运行的稳定性和可靠性。

在本发明实施例中,当对搜索空间中的每个算子均运行一次后,可确定运行参数最优的算子作为该operation的目标算子,即当为每个算子创建的子进程均结束时,表明每个算子都运行了一次,根据每个算子的子进程返回的运行时间即可确定最短运行时间,则对应的算子即为该operation的目标算子。

在本发明实施例中,当确定了一个operation的目标算子后,将确定的目标算子按照缓存格式写入缓存,所述缓存格式包括根据运行平台的属性和所述待搜索运算的属性构成的多元组,例如以(device id,operation id,shape,param)四元组作为键,以算子序列化目标作为值写入cache中,即在该cache中保存所有已经搜索过了的运行配置(deviceid,operation id,shape,param)和该配置下性能最好的目标算子。

在本发明实施例中,当正在运行的算子还需调用目标运算时,则递归搜索确定该算子调用的目标运算及其对应的最优算子和运行时间,通过深度优先遍历的方式对算子及其依赖的运算进行递归搜索,并设计去重机制规避冗余搜索,进一步减少搜索耗时和计算资源开销。图4所示为根据本发明实施例的递归搜索的流程示意图,包括步骤S331至S332。

在步骤S331中,确定每个第一算子调用的目标运算对应的目标算子和所述目标运算的目标算子对应的运行参数。图5所示为根据本发明实施例的递归确定运行参数的流程示意图,包括步骤S3311至S3315。

在步骤S3311中,确定所述第一算子调用的所述目标运算对应的第二搜索空间。在本发明实施例中,根据目标平台确定该算子调用的下一级目标运算的第二搜索空间,即该算子调用的下一级运算在目标平台中运行的所有算子。图6所示为根据本发明实施例的多算子依赖搜索的示意图,在本发明实施例中,operation0的某一算子需要调用operation1和operation3,则operation1和operation3的搜索空间为该算子调用的目标运算对应的第二搜索空间。

在步骤S3312中,确定所述第二搜索空间中的每个算子是否继续调用其他目标运算,并确定对应的第二搜索空间,直至达到最底层搜索空间,所述最底层搜索空间中的算子均不再调用目标运算。在本发明实施例中,operation1的某一算子需要调用operation2,则operation2的搜索空间为对应的第二搜索空间,同样,operation3的某一算子也需要调用operation2,则operation2的搜索空间也为对应的第二搜索空间,但operation2的算子均不需调用目标运算,则operation2的搜索空间为最底层搜索空间。

在步骤S3313中,确定所述最底层搜索空间中的目标算子和对应运行参数,写入缓存并传递至上一级搜索空间。在本发明实施例中,确定operation2的第一搜索空间并根据上述方法运行搜索空间中的所有算子,从而确定operation2的目标算子及其运行参数,并将搜索结果按照上述缓存格式写入cache。可以理解的是,确定operation2的目标算子并写入cache后,将该目标算子的运行参数返回至上一级搜索空间(即operation1和operation3的搜索空间)中,作为调用operation2的算子的运行参数。

在步骤S3314中,依次确定每一级搜索空间中的目标算子和对应运行参数并写入所述缓存,直至返回所述第一算子调用的所述目标运算对应的所述第二搜索空间。在本发明实施例中,在operation1的第二搜索空间中继续运行所有算子并确定operation1的目标算子及其运行参数,可以理解的是,调用operation2的算子的运行参数为上述步骤中确定的operation2的目标算子的运行参数。同样,在operation3的第二搜索空间中继续运行所有算子并确定operation3的目标算子及其运行参数,可以理解的是,调用operation2的算子的运行参数同样为operation2的目标算子的运行参数。

在步骤S3315中,根据所述第二搜索空间中的算子的运行参数确定所述第一算子调用的目标运算对应的目标算子及其运行参数。在本发明实施例中,根据每一级搜索空间中的目标算子的所述对应运行参数确定上一级算子的运行参数。可以理解的是,当某个算子只调用一个运算时,则根据该运算的目标算子的运行时间作为该算子的运行参数,例如operation1中调用operation2的算子,其运行时间为operation2的目标算子的运行参数;当某个算子调用多个运算时,则根据其所调用的目标运算的运行参数来确定该算子的运行参数,例如operation0中调用operation1和operation3的算子,其运行参数根据operation1和operation3的目标算子的运行参数来确定。由此可有效解决算子依赖的问题,同时确保其依赖的运算也会选到最优算子。

在步骤S332中,将所述第一搜索空间中运行参数满足所述运行条件和/或所述运行参数小于所述历史最优运行参数的算子确定为所述目标算子。在本发明实施例中,当算子调用目标运算时,根据上述递归搜索确定其对应的运行参数,对于不调用目标运算的算子,则直接运行子进程记录其运行参数。可以理解的是,当子进程的运行参数优于历史最优运行参数时,则直接关闭该子进程进入下一算子的子进程运行。运行完第一搜索空间中所有的算子后,即可根据其每个算子的运行参数,选择运行参数满足运行条件和/或运行参数小于历史最优运行参数的子进程对应的算子,作为所述目标算子。

在本发明实施例中,在所述缓存中查找是否存在调用的下一级运算的目标算子;当所述缓存中存在调用的所述下一级运算的目标算子时,不再继续搜索所述下一级运算。如图6所示,operation1和operation3均调用operation2,例如在搜索operation1的目标算子时,会递归进行对operation2的目标算子的搜索,在operation2的目标算子搜索完成后,将结果写入cache中,则在运行对operation3的目标算子进行搜索时,当运行到需调用operation2的算子时,则先在cache中查找是否存在operation2的目标算子,此时cache命中,则直接返回operation2的目标算子的运行参数,不必重新搜索operation2,由此进行去重规避冗余搜索,有效提升搜索效率。

在本发明实施例中,为不同的所述目标平台提供统一的上层接口作为搜索接口,根据本发明实施例的多平台搜索结构,考虑到面向多种计算平台例如CPU、GPU、OpenCL等,为了方便使用,在本发明实施例中提供统一的上层接口(API,Application ProgrammingInterface),包括但不限于:获取算子搜索空间、运行并计时等。各个计算平台实现该统一的接口,具体实现方式因平台而异,例如对于获取算子搜索空间的接口get_search_space(shape,param),在GPU平台上实现该接口的伪代码如下:

由此,抽取多平台的搜索策略的抽象接口,将平台细节隐藏起来,提供给用户统一的表示。考虑了当模型需要部署在多个平台时,可提供统一的使用接口,对于神经网络模型的部署场景具有很强的实用性。

在本发明实施例中,还可包括查询步骤,即根据所述待搜索运算的属性,在cache(缓存)中查询是否存在所述待搜索运算对应的第三算子;当所述缓存中存在所述第三算子时,将所第三算子确定为所述目标算子;当所述缓存中不存在所述第三算子时,执行所述获取神经网络中待搜索运算对应的第一搜索空间的步骤。对于需要搜索的operation,可根据(device id,operation id,shape,param)四元组查cache是否命中。如果cache命中则直接返回对应的第三算子;如果cache未命中第三算子则获取该operation在目标平台上的第一搜索空间。由此,可避免重复搜索已确定目标算子的运算,提高搜索效率。

在本发明实施例中,在完成所有operation的目标算子搜索后,将搜索得到的cache序列化到持久化设备中。例如算子序列化目标只包含算子的名字,根据算子的名字即可找到对应的算子。可以理解的是,通过反序列化算子的序列化目标可以得到一个唯一标识符,该唯一标识符对应着一个算子实例。在本发明实施例中会创建一个当前所有的算子名字-算子实例之间的映射map,假如map中的内容为{“algo_name0”:algo0},此时算子的序列化目标中只含有算子的名字。在后续神经网络运行过程中通过反序列化该目标得到“algo_name0”,然后再向map中查找该名字对应的算子即可。

采用本发明实施例的算子确定方法,通过获取待搜索运算在目标平台运行的所有算子作为第一搜索空间,依次运行所有算子,并在算子运行时为其创建子进程,记录运行参数,当其运行参数超过当前存在的历史最优运行参数时,则对该子进程进行动态枝剪,不再继续运行该算子,从而有效节省搜索时长,提高搜索效率并节省计算资源,在找到性能最优的算子的前提下解决搜索慢、资源需求大的问题;并通过递归搜索确定算子所调用的目标运算的目标算子和运行参数,通过深度优先遍历的方式对算子及其调用的运算进行递归搜索,确保当算子调用目标运算时,其依赖的运算也会选到目标算子,并设计去重机制规避冗余搜索,进一步减少搜索耗时和计算资源开销。本发明还考虑了当模型需要部署在多个平台时,如何提供统一的使用接口,将平台细节隐藏起来,提供给用户统一的表示,对于神经网络模型的部署场景具有很强的实用性。

本发明第二方面的实施例还提供了一种算子确定装置。图7所示为根据本发明实施例的算子确定装置700的结构示意图,包括获取模块701、搜索模块702和确定模块703。

获取模块701用于获取神经网络中待搜索运算对应的第一搜索空间,所述第一搜索空间包括多个算子。

搜索模块702用于运行所述第一搜索空间的所述多个算子,当所述多个算子中的第一算子调用目标运算时,搜索所述目标运算对应的第二搜索空间。

确定模块703用于根据所述多个算子的运行参数,从所述多个算子中确定所述待搜索运算对应的目标算子。

在本发明实施例中,算子确定装置700还包括查询模块704(图7中未示出),查询模块704用于根据所述待搜索运算的属性,在缓存中查询是否存在所述待搜索运算对应的第三算子;当所述缓存中存在所述第三算子时,将所第三算子确定为所述目标算子;当所述缓存中不存在所述第三算子时,由获取模块701所述获取神经网络中待搜索运算对应的第一搜索空间。

在本发明实施例中,算子确定装置700还包括写入模块705(图7中未示出),写入模块705用于将确定的所述目标算子按照缓存格式写入缓存。在本发明实施例中,所述缓存格式包括根据运行平台的属性和所述待搜索运算的属性构成的多元组。在本发明实施例中,所述目标算子包括所述运行参数满足运行条件的算子,所述运行条件包括所述算子的运行时间最短和/或所述算子的运行性能最优。

在本发明实施例中,确定模块703还用于获取所述多个算子的排序;为每个所述算子创建对应的子进程,并将执行配置传递给所述子进程,所述执行配置包括历史最优运行参数;按照所述多个算子的排序,依次运行每个所述算子对应的所述子进程,直至每个所述算子对应的所述子进程均结束,根据所述子进程的运行结果确定每个所述算子的运行参数,并将运行参数满足运行条件和/或运行参数小于所述历史最优运行参数的算子作为所述待搜索运算的所述目标算子。

在本发明实施例中,确定模块703还用于确定每个第一算子调用的目标运算对应的目标算子和所述目标运算的目标算子对应的运行参数;将所述第一搜索空间中运行参数满足所述运行条件和/或所述运行参数小于所述历史最优运行参数的算子确定为所述目标算子。

在本发明实施例中,确定模块703还用于确定所述第一算子调用的所述目标运算对应的第二搜索空间;确定所述第二搜索空间中的每个算子是否继续调用其他目标运算,并确定对应的第二搜索空间,直至达到最底层搜索空间,所述最底层搜索空间中的算子均不再调用目标运算;确定所述最底层搜索空间中的目标算子和对应运行参数,写入缓存并传递至上一级搜索空间;依次确定每一级搜索空间中的目标算子和对应运行参数并写入所述缓存,直至返回所述第一算子调用的所述目标运算对应的所述第二搜索空间;根据所述第二搜索空间中的算子的运行参数确定所述第一算子调用的目标运算对应的目标算子及其运行参数。在本发明实施例中,根据每一级搜索空间中的目标算子对应的所述运行参数确定上一级算子的运行参数并写入所述缓存。

在本发明实施例中,确定模块703还用于在所述缓存中查找是否存在调用的下一级运算的目标算子;当所述缓存中存在调用的所述下一级运算的目标算子时,不再继续搜索所述下一级运算。在本发明实施例中,为不同的目标平台提供统一的上层接口作为搜索接口。

所述算子确定装置700的各个模块的更具体实现方式可以参见对于本发明的算子确定方法的描述,且具有与之相似的有益效果,在此不再赘述。

本发明第三方面的实施例还提供了一种神经网络的运行方法。图8所示为根据本发明实施例的神经网络的运行方法的流程示意图,包括步骤S01至S02。

在步骤S01中,确定所述神经网络运行时的所有运算。在本发明实施例中,将神经网络模型部署到目标运行平台后,可确定该神经网络模型运行环境所需的所有运算及其环境配置。

在步骤S02中,在所述神经网络的运行过程中,执行每个所述运算的目标算子,其中,所述目标算子采用如上所述的算子确定方法进行确定。在本发明实施例中,执行所述运算时先查找所述运算的执行配置中是否包含所述目标算子;或执行所述运算时先查找缓存中是否存在所述目标算子。

图9所示为根据本发明实施例的运行神经网络模型的运算的示意图,在经过如上所述的算子确定方法进行搜索之后,获取到了cache的序列化文件,记录了各运算在相应目标平台的最优算子及相关执行配置。则在部署好的神经网络模型进行执行时,首先加载并解析该cache的序列化文件,对序列化文件内容进行反序列化后设置到各个operation的执行策略中或者直接保存在内存中。

在本发明实施例中,设置执行配置的方法是执行之前按照反序列化后的device、operation、shape、param等信息将反序列化后对应的算子设置到每个operation的执行配置中。每个operation在运行时先查找自己的执行配置是否为空,若不为空则执行配置中的算子,若为空则从人工设定的算子列表中取出第一个在当前环境配置中可以执行的算子执行,以确保每个operation均以其性能最优的算子进行运行。

在本发明实施例中,还可以查cache的方法来执行。例如每个operation在运行时先按照(device,operation,shape,param)四元组作为键来查找cache,若命中则执行cache中该键对应的算子,若未命中则从人工设定的算子列表中取出第一个在当前环境配置中可以执行的算子执行,也可以确保每个operation均以其性能最优的算子进行运行。

下面给出一个具体的示例以更好的解释本发明。在部署好的神经网络模型运行时首先加载包含各operation目标算子相关信息的cache序列化文件,以卷积运算为例,其在运行时的伪代码如下:

其中,执行配置exec_policy中包含性能最优的算子algo。首先检测自己的执行配置中的目标算子是否为空,若不为空则直接执行该目标算子即可;若执行配置为空,则去cache中查找当前运行环境下的目标算子,若查到了则将目标算子写到自己的执行配置中,并执行该算子;若没有查到目标算子,则从基于人工经验排好序的算子列表中选择第一个可用的算子执行。

采用本发明实施例的神经网络的运行方法,通过获取每个运算在对应目标平台的目标算子的cache序列化文件,并进行反序列化确定对应的目标算子,并根据最优算子进行运行,且当算子调用目标运算时确保其依赖的运算也会选到目标算子的问题,从而大大增强神经网络的性能,对具有相互依赖运算的神经网络的训练和部署都具有很强的实用性。

本发明第四方面的实施例还提供了一种神经网络的运行装置。图10所示为根据本发明实施例的神经网络的运行装置1000的结构示意图,包括处理模块1001和运行模块1002。

处理模块1001用于确定所述神经网络运行时的所有运算。

运行模块1002用于在所述神经网络的运行过程中,执行每个所述运算的目标算子,其中,所述目标算子采用如上所述的算子确定方法进行确定。

在本发明实施例中,运行模块1002还用于执行所述运算时先查找所述运算的执行配置中是否包含所述目标算子;或执行所述运算时先查找缓存中是否存在所述目标算子。

在本发明实施例中,运行模块1002还用于当所述执行配置中不包含所述目标算子或所述缓存中不存在所述目标算子时,根据排序规则选取排序第一的算子进行执行。

所述神经网络的运行装置1000的各个模块的更具体实现方式可以参见对于本发明的神经网络的运行方法的描述,且具有与之相似的有益效果,在此不再赘述。

本发明第五方面的实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现根据本发明第一方面所述的算子确定方法或根据本发明第三方面所述的神经网络的运行方法。

一般来说,用于实现本发明方法的计算机指令的可以采用一个或多个计算机可读的存储介质的任意组合来承载。非临时性计算机可读存储介质可以包括任何计算机可读介质,除了临时性地传播中的信号本身。

计算机可读存储介质例如可以是,但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言,特别是可以使用适于神经网络计算的Python语言和基于TensorFlow、PyTorch等平台框架。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

本发明第六方面的实施例提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现根据本发明第一方面所述的算子确定方法或根据本发明第三方面所述的神经网络的运行方法。可以理解的是,本发明的计算设备可以是服务器,也可以有限算力的终端设备。

根据本发明第五、六方面的非临时性计算机可读存储介质和计算设备,可以参照根据本发明第一方面实施例具体描述的内容实现,并具有与根据本发明第一方面实施例的算子确定方法或根据本发明第三方面实施例的神经网络的运行方法具有类似的有益效果,在此不再赘述。

尽管上面已经示出和描述了本发明的实施例,应当理解的是,上述实施例是示例性的,不能解释为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

技术分类

06120113270426