一种用多核处理器实现神经网络模型拆分方法及相关产品与流程

文档序号:19994353发布日期:2020-02-22 02:35阅读:184来源:国知局
一种用多核处理器实现神经网络模型拆分方法及相关产品与流程
本发明涉及深度学习
技术领域
,尤其涉及一种用多核处理器实现神经网络模型拆分方法及相关产品。
背景技术
:近年来,神经网络处理器被不断提出,并如同通用处理器一样,正在由单核向多核扩展。这种扩展后的多核结构可以在训练阶段支持数据并行的方式来提高数据吞吐量,加快训练速度。然而,在推理阶段,相比吞吐量深度神经网络对端到端的时延有着更高的要求,这往往决定了加速器在某个场景下的可用性。传统的数据并行方案不能满足推理场景下对加速器小数据、低延迟的要求。技术实现要素:为了解决上述所述的技术问题,本申请实施例提供一种用多核处理器实现神经网络模型拆分方法及相关产品。第一方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分方法,该方法包括:根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输出张量数据;遍历所述拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径以及所述拆分路径的权重;根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;根据所述目标拆分路径对所述计算图中的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。在一个可行的示例中,确定所述目标算子的张量数据的目标拆分路径的步骤包括:遍历所述目标算子相关联的张量数据的拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子相关联的输入张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分方式。在一个可行的示例中,所述确定所述目标算子的张量数据的目标拆分路径,包括:遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。在一个可行的示例中,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。在一个可行的示例中,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确定。在一个可行的示例中,所述目标算子相关联的输入张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合中的拆分状态确定。在一个可行的示例中,所述目标算子相关联的输出张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合中的拆分状态确定。在一个可行的示例中,所述有向边的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。第二方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分装置,该装置可以包括:第一确定单元,用于根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输出张量数据;遍历单元,用于遍历所述拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径以及所述拆分路径的权重;第二确定单元,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;拆分单元,用于根据所述目标拆分路径对所述计算图中的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。在一个可行的示例中,所述第二确定单元具体用于:遍历所述目标算子相关联的张量数据的拆分状态集合,对当前拆分状态集合,遍历其中的每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子相关联的输入张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。在一个可行的示例中,所述第二确定单元具体用于:遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。在一个可行的示例中,在当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元具体用于:当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。在一个可行的示例中,在当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元具体用于:当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确定。在一个可行的示例中,所述目标算子相关联的输入张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合中的拆分状态确定。在一个可行的示例中,所述目标算子相关联的输出张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合中的拆分状态确定。在一个可行的示例中,所述有向边的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。为实现上述目的,第三方面,本申请实施例提供了一种计算机设备,包括多个异构处理器和存储器,所述处理器和存储器相互连接,其中,所述多个异构处理器包括通用处理器和人工智能处理器,所述存储器用于存储支持计算机设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。实施本申请实施例,计算机设备通过对神经网络模型对应计算图中算子关联的张量数据进行拆分,获得张量数据对应的拆分状态集合,再确定相邻拆分状态集合之间张量数据的拆分路径和拆分路径的权重,确定目标算子张量数据的目标拆分路径,其中在确定目标拆分路径时,对拆分状态集合进行反向优化;最后根据目标拆分路径对计算图的目标算子相关联的张量数据进行拆分,以分匹配到多核处理器的对应核进行处理。在这个过程中,通过对算子关联的张量数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据对应的拆分状态之间的拆分路径选择,进一步优化张量数据的拆分方式,另外,在选择拆分路径的同时对拆分状态集合也进行优化,减少决策分支,提升神经网络模型的执行效率。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在多核处理器上的端到端时延。附图说明为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。图1a是人工智能处理器的软件栈结构示意图;图1b为本申请实施例提供的一种基于计算图的算子拆分示意图;图1c~图1h为卷积算子在并行度为2的条件下的对应拆分方式示意图;图2为本申请实施例提供的一种计算机设备的结构示意图;图3为本申请实施例提供的一种用多核处理器实现神经网络模型拆分方法的流程示意图;图4为本申请实施例提供的一种神经网络模型中的算子连接关系示意图;图5为本申请实施例提供的一种卷积算子拆分示意图;图6为本申请实施例提供的一种拆分状态集合示意图;图7为本申请实施例提供的一种深度残差网络中的残差块示意图;图8为本申请实施例提供的一种目标算子的拆分示意图;图9为本申请实施例提供的一种多张量数据对应的拆分状态集合示意图;图10为本申请实施例提供的一种用多核处理器实现神经网络模型拆分装置的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。为了便于更好的理解本申请所描述的技术方案,下面先解释本申请实施例所涉及的技术术语:(1)张量(tensor)在本技术方案中,张量仅仅是对存储的一块数据的特征描述,张量记录了数据的形状、类型等信息。本申请实施例中,张量应该理解为张量数据,可以包括神经网络模型中输入张量数据、输出张量数据,也可以包括特征张量数据等。以人工智能深度学习框架tensorflow为例,一般使用阶(rank),形状(shape)和维数(dimensionnumber)来描述张量的维度,其关系可以表示为表1所示:表1阶形状维数例子0[]0-d41[d1]1-d[2]2[d1,d2]2-d[6,2]3[d1,d2,d3]3-d[7,3,2]n[d1,d2,d3,...,dn]n-d形为[d1,d2,d3,...,dn]的张量如表1所示,张量a=4,其表示一个数。如表1所示,张量a=[6,2],其表示二维矩阵,具体地,该矩阵为6行2列的矩阵。(2)数据并行。具体来说,所谓数据并行是指把数据划分成若干块分别映像到不同的处理器上,每一个处理器运行同样的处理程序对所分派的数据进行处理。现有中,大部分并行处理均采用这种处理方式,尤其是对于计算复杂性很高的问题,如流体力学计算、图象处理等。在本申请实施例中,数据并行可以应用于大规模的神经网络并行训练中。具体来说,数据并行的核心是使用多个处理器同时进行对于同一个神经网络模型的训练。在训练的每一轮迭代中,每个处理器从数据集中获取本轮迭代使用的数据,在每个处理器上完成一轮整个网络的推理及训练计算,并返回本轮计算得到的梯度数据来进行模型的更新。维护权值的服务器在收到所有处理器的梯度之后,使用这些梯度进行模型数据的更新。显然,由于多个处理器会并行地执行训练任务,其等价于在每轮迭代中一个更大批量的数据能够被处理,也就加快了系统完成这个训练任务所需要的时间。所以,数据并行的关键在于每一轮迭代中待处理数据的批量的大小,批量越大,尽可能划分到越多的处理器来并行处理。(3)模型并行。在本申请实施例中,模型并行是数据并行之外的另一种神经网络并行计算方式。简单来说,模型并行是通过划分神经网络模型参数的方式把计算负载分配到不同的处理器上。(4)多核处理器。当前多核处理器采用的最普遍的结构是基于存储共享的多核结构,处理器中包含了多个计算核,每个计算核上有独立的缓存,寄存器堆,计算单元以及指令控制单元,所有的计算核共享同一全局存储。现有中,单个核已经足够完成任何复杂逻辑的计算任务,但其性能受限于摩尔定律和芯片工艺。为了进一步提升处理器的性能,多个计算核被引入处理器中,它们可以被用于处理那些有着较高并行度的计算任务。在实际应用中,共享存储多核结构是一种经典的多核结构,并且非常适合数据并行的神经网络训练方法。每个核可以作为数据并行中的一个处理器,分别读取不同的数据,然后并行完成网络模型的正反向计算。每个核在计算阶段仍能够保持其在之前单核架构下良好的性能功耗比,与此同时,整个系统的吞吐量也可以随着核数的扩展而增加。(5)算子拆分。在本申请实施例中,我们采用算子拆分的方式来实现计算任务的拆分,即把单个算子拆分成多个可以并行执行的子算子。需要说明的是,这里,拆分前的原始算子和拆分后的若干个子算子都是人工智能处理器所支持的算子,原始的张量数据随着算子的拆分也被拆分成若干个新的子张量数据。反映到计算图上,则是把原来的包含单个算子的计算图细化成了一张包含更多可并行执行的算子的计算图。通过这一实现方式,可以实现类似于模型并行的算子内任务拆分,同时又保证了拆分后的每个子算子都可以复用单核架构下算子的指令实现来进行计算,避免了对原有算子的指令实现的重构。在本申请实施例中,算子拆分不完全局限于对模型参数的拆分,也会采用数据并行的方式对数据进行拆分,这种方法实际上模糊了模型并行和数据并行的界限。以卷积算子为例,如果把卷积算子的输入数据和权值作为计算图中等同低位的张量数据,那么,数据并行时基于对输入数据的划分来分割计算,而模型并行时基于权值的划分来分割计算,这二者都是通过划分卷积算子相关联的张量数据来实现对计算负载的划分。从这个角度来说,数据并行和模型并行是统一的。(6)人工智能处理器人工智能处理器,也称之为专用处理器,在本申请实施例中,人工智能处理器是指针对特定应用或者领域的处理器。例如:图形处理器(gpu,graphicsprocessingunit),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上进行图像运算工作的专用处理器。又例如:神经网络处理器(npu,neuralprocessingunit),是一种在人工智能领域的应用中针对矩阵乘法运算的专用处理器,采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。(7)人工智能处理器的软件栈人工智能处理器的软件栈:参见图1a,该软件栈结构10包括人工智能应用100、人工智能框架102、人工智能学习库104、人工智能运行时库106以及驱动108。接下来对其进行具体阐述:人工智能应用100对应不同的应用场景,提供对应的人工智能算法模型。该算法模型可以直接被人工智能框架102的编程接口解析,在其中一个可能的实现方式中,通过人工智能学习库104将人工智能算法模型转换为二进制指令,调用人工智能运行时库106将二进制指令转换为人工智能学习任务,将该人工智能学习任务放在任务队列中,由驱动108调度任务队列中的人工智能学习任务让底层的人工智能处理器执行。在其中另一个可能的实现方式中,也可以直接调用人工智能运行时库106,运行先前已固化生成的离线运行文件,减少软件架构的中间开销,提高运行效率。人工智能框架是整个深度学习生态体系中的第一层。早期在caffe中,layer被当做是构建神经网络的基本元素,而在之后的人工智能框架,例如tensorflow、mxnet中,虽然采用了不同的称呼,例如operator,但与caffe的layer在核心思想上依旧是相似的,都是将神经网络计算进一步拆分为各类常见的面向张量数据的算子,人工智能框架需要将神经网络映射的计算图结构所表达的深度学习任务具体化成可以在cpu或者人工智能处理器执行的指令和数据。在这个过程中,人工智能框架采用算子作为落实计算任务的具体元素,为每个算子都提供了在cpu或者人工智能处理器上执行的核函数(kernel),根据计算图,人工智能框架调度执行计算图中每个算子对应的核函数,完成整个神经网络的计算。为了便于更好的理解本申请,下面具体阐述本申请所描述的技术方案的研究思路:现有技术中,数据并行的问题在于,其扩展性依赖于处理的数据批量的大小。尽管在训练阶段这通常不会是一个问题,但是对于推理阶段这个前提则难以保证。一般来说,用于实时服务领域(包括视频监控,自动驾驶等)的神经网络模型,处理的数据通常是以流的方式串行输入,导致了每次处理的数据规模很小甚至往往是单张图片。在这种情况下,数据并行不能提供任何并行度,所有的工作任务会集中在单个核上,这使得多核带来的计算资源不能转化成处理任务的速度。当在线下使用数据集完成了神经网络模型的训练后,就会把模型部署到云端的服务器上来处理外界发来的数据,此时的应用场景就由离线训练变成了在线推理。在在线推理阶段,一个非常重要的指标是时延,也就是从服务器收到待处理数据到返回处理后的结果的时间,进一步来说,是使用神经网络模型处理数据的时间。低时延保证云端服务器能够对客户端发来的数据在最短的时间内做出响应,在一些更加敏感的场景下,直接决定了方案是否可用。因此,在线推理阶段对于人工智能处理器的要求就由处理大批量数据、高吞吐量转变为处理小批量数据、低时延。在这种情况下,传统的数据并行或者模型并行难以有效降低推理任务的时延。对于数据并行来说,大批量数据是前提,这本身与在线推理小批量数据的特点矛盾。对于模型并行来说,它通常是为了解决一个规模很大的神经网络模型超过了单个设备的内存限制而采用的方法,把算子分配到不同的核上并不能降低网络的时延。为了真正能够在多核人工智能处理器上降低推理任务的时延,必须寻找一种方法,能够把对小批量数据甚至单个数据的推理计算任务合理地分配到多核架构的各个核上,保证每一时刻都有尽可能多的核参与计算,才能充分利用多核架构的资源。一种方法是把神经网络中的每个算子的计算任务都拆分到多个核上计算,这种方法即使在处理单张图片的推理任务时也能保证每一时刻都有多个核参与计算,从而达到了利用多核资源降低时延的目的。但是,对于多核人工智能处理器来说,还有很多要解决的问题。首先,深度学习人工智能处理器通过定制化自身的硬件设计来适配深度学习算法本身的数据并行特征,提高计算吞吐量,人工智能处理器往往需要足够的数据规模才能达到较高的计算效率,而算子内的进一步拆分会减小每个核上的计算规模。当拆分达到一定粒度,每个核上计算效率的损失会超过拆分增加并行度所带来的收益。因此,必须在拆分并行和计算效率之间,在保证足够计算效率的同时提供足够的并行度。另一方面,神经网络模型可以看做是一个由通常数以百计甚至千记的算子所构成的复杂计算图。不同种类的算子内的算法逻辑各不相同,这就导致对这些算子进行拆分的方法也不一样。每个算子的拆分,除了平衡自身的计算效率和并行度,还要考虑和前后算子的搭配,甚至于对全局的影响。深度学习的快速发展带来的是越来越多的大规模复杂网络,通过手动方式寻找一种好的并行方法是不现实的,因此需要一种自动化的方法来保证来对于不同的网络都能够给出一种较好的拆分并行策略。此外,还需要考虑的是对于底层人工智能处理器的可移植性。对于没有足够良好的可编程性的人工智能处理器来说,由单核扩展到多核,并且实现算子内部的拆分并行所带来的修改软件栈的工作量是非常大的。传统的数据并行和模型并行的实现仍然是基于一个处理核完成一个算子的计算任务,所以并不会带来很多额外的工作,而单个算子的跨核并行需要对算子本身实现进行修改,这种修改的难易程度依赖于人工智能处理器的可编程性和原有算子实现逻辑的复杂程度。如何减小在多核架构上实现低时延推理过程中的额外开销,缓解实现过程中工作量对于人工智能处理器本身可编程性的依赖,使得方法能够在未来对于不同的多核人工智能处理器都有一定的通用性也是一个需要考虑的问题。基于上述描述,我们采用算子拆分的方式来实现计算任务的拆分,即把单个算子拆分成多个可以并行执行的子算子。拆分前的原始算子和拆分后的若干子算子都是深度学习处理器所支持的元算子,原始张量数据随着算子的拆分也拆分成了若干个新的子张量数据。如图1b所示,图1b为本申请实施例提供的一种基于计算图的算子拆分示意图,如图1b所示,算子op0由在单核core0上执行,经过算子拆分,转换成在core0、core1、core2和core3多个核上并行执行。算子的拆分就隐含了如何对该算子所关联的张量数据进行拆分的信息,算子关联的张量数据包括算子的输入张量数据和输出张量数据,例如在图1b中,算子op0经过拆分成为op0_0、op0_1、op0_2和op0_3四个子算子,算子op0运算操作类型与op0_0的运算操作类型、op0_1的运算操作类型、op0_2的运算操作类型和op0_3的运算操作类型均相同。那么算子op0的输入张量数据tensor1也被对应拆分为tensor1_0、tensor1_1、tensor1_2和tensor1_3。通过这种方法实现了算子内任务拆分,同时又保证了拆分后的每个子算子都可以复用单核架构下算子的指令实现来进行计算,避免了对原有算子的指令实现的重构,即子算子op0_0、op0_1、op0_2和op0_3对应的运算操作指令的格式与op0对应的运算操作指令的格式相同。图1c~图1h给出了计算图上卷积算子在并行度为2的条件下的多种拆分方式。图1c~图1h中每个张量数据给出了各个维度的起点和终点,用来明确拆分后的子张量数据与原始张量数据之间的关系。图中n、ic、ih、iw、oc、oh、ow、kh、kw依次表示输入张量数据批量大小、输入张量数据特征图像数量、输入张量数据特征图像的长度、输入张量数据特征图像的宽度、输出张量数据特征图像数量、输出张量数据特征图像的长度、输出张量数据特征图像的宽度、卷积核窗口长度、卷积核窗口宽度。其中,图1c是原始计算图;图1d按照输入张量张量数据的n维度拆分;图1e按照输出张量数据的c维度拆分;图1f按照输入张量数据c维度拆分;图1g按照输入张量数据的h维度拆分;图1h按照输入张量数据的w维度拆分。这些拆分方式执行在不同的维度上,同时彼此之间可以通过互相组合形成更多新的拆分方式,从而提供最够的并行度来利用多核资源,同时在一定程度上可以避免单个维度上的过度拆分影响计算效率。参见图2,为本申请实施例提供的一种计算机设备的结构示意图。如图2所示,计算机设备20可以包括通用处理器201、存储器202、通信总线203、通信接口204和至少一个人工智能处理器205,通用处理器201、人工智能处理器205通过所述通信总线连接所述存储器202和所述通信接口203。通用处理器201可以是中央处理单元(centralprocessingunit,cpu),该通用处理器201还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器201可以是微处理器或者该通用处理器201也可以是任何常规的处理器等。通用处理器201还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的算子拆分方法的各个步骤可以通过通用处理器201中的硬件的集成逻辑电路或者软件形式的指令完成。存储器202可以是只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)或其他存储器。本申请实施例中,存储器202用于存储数据以及各种软件程序,例如本申请实施例中根据胶水算子的位置关系对神经网络模型进行优化的程序等。可选的,在本申请实施例中,所述存储器可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方法的媒体加以存储。本实施方式所述的存储器又可以包括:利用电能方式存储信息的装置,如ram、rom等;利用磁能方式存储信息的装置,如硬盘、软盘、磁带、磁芯存储器、磁泡存储器、u盘;利用光学方式存储信息的装置,如cd或dvd。当然,还有其他方式的存储器,例如量子存储器、石墨烯存储器等等。通信接口204使用例如但不限于收发器一类的收发装置,来实现计算机设备20与其他设备或通信网络之间的通信。例如,可以通过通信接口204接收其他设备发送的模型文件。人工智能处理器205可以作为协处理器挂载到主cpu(hostcpu)上,由主cpu为其分配任务。在实际应用中,人工智能处理器205可以实现一种或多种运算。例如,以神经网络处理器(networkprocessingunit,npu)npu为例,npu的核心部分为运算电路,通过控制器控制运算电路提取存储器202中的矩阵数据并进行乘加运算。可选的,人工智能处理器205可以包括8个集群(cluster),每个cluster中包括4个人工智能处理器核。可选的,人工智能处理器205可以是可重构体系结构的人工智能处理器。这里,可重构体系结构是指,如果某一人工智能处理器能够利用可重用的硬件资源,根据不同的应用需求,灵活的改变自身的体系结构,以便为每个特定的应用需求提供与之相匹配的体系结构,那么这一人工智能处理器就称为可重构的计算系统,其体系结构称为可重构的体系结构。应当理解,计算机设备20仅为本申请实施例提供的一个例子,并且,计算机设备20可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。下面结合图3所示的本申请实施例提供的一种用多核处理器实现神经网络模型拆分方法的流程示意图,具体说明在本申请实施例中是如何通过对目标算子的输入张量数据的拆分来表征对目标算子的拆分方式,进而达到优化处理器核运算过程的目的,下面以caffe为例参考附图详细描述。可以包括但不限于如下步骤:步骤301、根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的拆分状态集合。在caffe框架下,所述目标算子可以是神经网络模型中的对应目标层(layer),该目标层为所述神经网络模型中的至少一层,所述张量数据包括输入张量数据和输出张量数据。在本申请实施例中,“神经网络模型”也称模型,如“第一神经网络模型”、“第二神经网络模型”或“第三神经网络模型”,可以接收输入数据,并根据接收的输入数据和当前的模型参数生成预测输出。在实际应用中,预测输出可以包括图像检测输出结果、语义分析输出结果、图像分类输出结果等等。该神经网络模型可以包括深度学习神经网络模型(deepneuralnetwork,dnn)、卷积神经网络模型(convolutionalneuralnetwork,cnn)、极限学习机模型(extremelearningmachine,elm)或其他的神经网络模型等。在caffe框架下,神经网络模型具有层级结构,如图4所示,图4为本申请实施例提供的一种神经网络模型中的算子连接关系示意图,神经网络模型中可以包括卷积层conv、激活函数层relu、池化层pool、分类器softmax和全连接层,每一层对应至少一个算子。算子本身的拆分方式具有唯一的与之关联的张量数据的拆分方式与之对应。请参阅图5,图5为本申请实施例提供的一种卷积算子拆分示意图,如图5所示,卷积算子conv的输入张量数据包括输入规模input和权值weight,对于输入规模input{[0,n),[0,ic)[0,ih),[0,iw)}这一输入张量数据,其中n表示输入数据批量大小,ic表示输入数据特征图像数据量,ih表示输入数据特征图像的长度,iw表示输入数据特征图像的宽度,可以进行n维度上的拆分,获得输入子张量数据input1{[0,n/2),[0,ic/2)[0,ih),[0,iw)}和input2{[n/2,n),[ic/2,ic)[0,ih),[0,iw)},我们把张量数据按照任意一种方式拆分得到的所有子张量数据称为该张量数据的一种拆分状态s,张量数据所有可能的状态构成了该张量数据的状态空间s。假设神经网络模型中有算子op按照某一拆分方式进行拆分,则其输入数据tensor0和输出数据tensor1分别有状态s和t,二者分属于tensor0的拆分状态空间s和tensor1的拆分状态空间t。在此基础上,op自身的拆分方式可以视作是一条由s指向t的有向边。例如(input1,input2)即为一种拆分状态s。假设图5中的卷积算子conv的输出子张量数据为partial1{[0,n/2),[0,oc)[0,oh),[0,ow)}和partial2{[n/2,n),[0,oc)[0,oh),[0,ow)},(partial1,partial2)为一种拆分状态t,那么conv算子自身的拆分方式可以视作是一条由s指向t的有向边。理论上与算子关联的张量数据可以按照任意一种算子能够执行的方式进行拆分,但是在实际的神经网络模型中,张量数据往往与多个算子存在关联关系,请参阅图6,图6为本申请实施例提供的一种拆分状态集合示意图,如图6所示,张量数据tensor1既是算子op0的输出张量数据,也是op1的输入张量数据。当op0确定按照某种方式进行拆分后,tensor1作为op0的输出,同样也确定了按照某种方式拆分成了一系列子张量数据,那么op1在选择拆分方式时,必须保证选择的方式与其输入张量数据tensor1已经确定的拆分方式兼容,这使得op1的选择范围受到了约束。继续推而广之,op1在这种约束下所选择的拆分方式又会通过与其关联的张量数据约束其他相邻的算子的拆分选择。在一个可选的实施例中,神经网络模型对应计算图中的目标算子的输入张量数据的拆分状态集合中的拆分状态根据目标算子的运算逻辑和对应输出张量数据的拆分状态集合中的拆分状态确定。算子能够支持的拆分方式取决于算子自身的运算逻辑和数据规模。算子的拆分方式主要包括以下几种:(1)算子支持在任意维度上进行拆分;(2)算子支持在有限维度上拆分;(3)算子不支持拆分。例如relu算子,conv算子,所支持的拆分方式允许其输入数据在nchw(输入数据批量大小、特征图像的个数、特征图像的长和特征图像的宽)中的任意维度上进行拆分;有些算子,譬如softmax算子,所支持的拆分方式只允许其输入数据在某几个特定的维度上进行拆分;而最后一些算子,往往是实现上非常复杂的算子,譬如非极大值抑制(non-maximumsuppression,nms)算子,难以通过算子拆分的方式把计算负载分配到多个核上并行,因此这类算子最终只能在单个核上执行,相应的其输入数据应该保持完整不拆分的状态。那么多层算子之间的拆分方式互相影响结果包括:(1)完全支持;(2)部分支持;(3)不支持。如果相互连接的两个算子都支持在任意维度上进行拆分,那么两个算子之前的拆分方式互相之间完全支持,可以按照任意维度拆分获得两个算子对应的张量数据的拆分状态集合。如果互相连接的两个算子,其中一个支持任意维度上的拆分,另一个不支持拆分,或者只支持有限维度上的拆分,那么两个算子的拆分方式互相之间部分支持,需要对两个算子的张量数据可能的状态拆分集合求交集,获得最终的算子对应的状态拆分集合。或者,如果互相连接的两个算子其中一个支持有限维度的拆分,另一个不支持拆分,或者两个都不支持拆分,那么两个算子的拆分方式互相之间不支持,两个算子的张量数据不能进行拆分,对应的拆分状态集合中的拆分状态只有原张量数据对应的拆分状态。对于算子来说,在已经确定其对应的输出张量数据的拆分状态集合中的拆分状态的情况下,可以根据算子的运算逻辑和输出张量数据的拆分状态集合中的拆分状态确定输入张量数据的拆分状态集合中的拆分状态。例如图6中的算子op0,其输入张量数据的拆分状态集合t0中的拆分状态可以根据op0的运算逻辑和其对应的输出张量数据的拆分状态集合t1中的拆分状态确定。假设op1是一个只能在有限维度上拆分的算子,且已经确定了t1对应的有限个拆分状态,而op0是一个可以在任意维度上拆分的算子,t0中的拆分状态根据t1和op0的所有拆分状态求交集获得。在一个可选的实施例中,神经网络模型对应计算图的目标算子的输出张量数据的拆分状态集合中的拆分状态根据目标算子的运算逻辑和对应输入张量数据的拆分状态集合中的拆分状态确定。同样的,在已经确定算子的输入张量数据的拆分状态集合中的拆分状态的情况下,可以根据算子的运算逻辑和输入张量数据的拆分状态集合中的拆分状态确定输出张量数据的拆分状态集合中的拆分状态。例如图6中的算子op1,在已经确定其输入张量数据的拆分状态集合t1中的拆分状态时,可以根据op1的运算逻辑和t1中的拆分状态确定t2中的拆分状态。假设op1是一个只能在有限维度上拆分的算子,且已经确定了t1对应的有限个拆分状态,那么t2中为与t1中的拆分状态对应的有限维度上拆分获得的拆分状态。步骤302、遍历所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径以及所述拆分路径的权重。得到目标算子关联的张量数据对应的拆分状态集合后,遍历拆分状态集合,确定相邻拆分状态集合之间的拆分路径,路径表示输入张量数据到输出张量数据的中间过程,拆分路径表示相邻拆分状态集合之间拆分状态到拆分状态的中间过程。请参阅图7,图7为本申请实施例提供的一种拆分状态之间的拆分路径示意图,如图7所示,目标算子关联的张量数据的拆分状态集合中的拆分状态之间存在有向边,例如算子op1对应的拆分状态集合t1和t2之间,包括t1:state1指向t2:state2的有向边,其中,有向边可以有两层含义:一表示算子与算子之间的连接关系;二表示人工智能处理器执行神经网络模型的执行顺序。对于第一种含义,是指如果拆分状态之间存在有向边,那么拆分状态对应的算子之间存在连接关系,存在连接关系的算子之间相邻且相互关联。对于第二种含义,是指如果拆分状态之间存在有向边,那么有向边指向的方向对应神经网络模型中的算子在处理器上的执行顺序。在图7中,虚线框代表每个张量数据的拆分状态集合,集合中包含了若干个拆分状态,这些状态来自于该张量数据的拆分状态空间。算子的输入张量数据的拆分状态集合中的拆分状态和输出张量数据的拆分状态集合中的状态之间的每条有向边表示该算子本身的一种拆分方式,使用该拆分方式下的并行执行时间作为有向边的权重。tensor0是整个网络的输入张量,tensor3是整个网络的输出张量数据,任意一条由tensor0的状态集合中的任一状态出发,到tensor3的状态集合中的任一状态结束的路径,都对应了一种该神经网络的有效拆分方案,记为p。对于给定的神经网络模型,要搜索一个好的拆分方案,就是在图7中寻找一条由tensor0的状态到tensor3的状态的目标路径。在本技术方案中,拆分状态与拆分状态之间的有向边具有权重,即拆分路径的权重。每条拆分路径的权重是按照该算子运算操作方式和对应的拆分后的子张量数据在神经网络多核处理器上并行执行的时间。在确定时间时,一方面要考虑算子本身的规模,另一方面要考虑包括访存带宽、运算器频率在内的多个硬件参数。神经网络模型的算子中基本上没有条件跳转,其计算量在给定算子的规模的前提下是确定的。此外,因为执行在各个核上的拆分得到的子算子的对称性,采用均分的方式来评估多核并行执行下每个核在访问全局存储的过程中得到的访存带宽。因此,所述拆分路径的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。在实际中,为了确保拆分路径的权重的精准性,也可以采用实际测试的方式来获得算子在各种拆分并行下的执行时间,做到这一点同样是因为算子本身的执行具有确定性。一旦我们策略并存储了某种算子在某一数据规模下按照某种方式拆分并行的实际时间,就可以将该数值用于表示所有代表该种数据规模的该种算子的该种拆分方式对应的拆分路径的权重。人工智能处理器调用算子进行运算是会有对应的资源消耗,资源消耗的多少与算子的运算操作类型,算子的张量数据经过拆分路径获取的子数据的数据规模以及每个处理器核的吞吐率和访存带宽都有关,因此为了优化人工智能处理器的运算效率,会偏向于选择表示资源消耗更小的权重对应的有向边。步骤303、根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态。在确定相邻拆分状态集合之间的目标算子的张量数据的拆分路径之后,只是针对单个算子的张量数据的拆分路径,对于整个神经网络模型的多层结构来说,还需要进一步获得张量数据对应的拆分路径。在实际中,可以使用类似于viterbi算法的方式从图7中找出最短路径。viterbi算法是一种动态规划算法,用于寻找最有可能产生观测时间序列的隐含状态序列。viterbi算法被广泛用于语音识别、关键字识别和通信解码等领域中。我们可以将张量数据拆分状态集合中的状态看作viterbi算法中的隐含状态,将拆分状态之间的有向边看作是隐含状态之间的转移关系,而有向边的权重对应着隐含状态之间转移概率的对数值。具体实现中,首先由前往后遍历网络计算图中的所有算子,当访问第i个算子时,已知神经网络的输入张量数据的拆分状态集合中的状态到当前算子的输入张量的拆分状态集合中的每个状态的最短路径结合当前算子对应的所有有向边及其权重可以得到由神经网络的输入张量数据的拆分状态集合中的状态到当前算子的输出张量的拆分状态集合中的每个状态的最短路径式1是计算公式。当完成所有算子的遍历后,我们会得到由神经网络模型的输入张量数据的拆分状态集合中的状态到输出张量数据的拆分状态集合中的每个状态的最短路径,从这些最短路径中再次选出最短路径,即是目标的全局最短路径。最后通过回溯的方式由输出张量到输入张量确定最短路径在每个算子处选择的有向边以及每个张量数据处的拆分状态,即是我们要寻找的该计算图上的最优拆分方案。在访问每个算子时,当前算子的输出状态集合中的状态是根据输入状态集合中的状态结合算子本身的计算语义枚举得到的。具体来说,对输入张量数据的拆分状态集合中的每个拆分状态,枚举当前算子存在哪些可能的拆分方式能够兼容当前的输入状态,这些可能的算子拆分方式所对应的输出张量数据的拆分状态将被加入输出张量数据的拆分状态集合中。有些算子也并非仅有一个输入张量数据。例如:convolution、innerproduction可以有包含输入数据、权值和偏执在内至多三个输入张量,batchnorm和scale同样可以有输入数据、均值/α和方差/β在内的最多三个输入张量,而图7中每个算子只有一个输入和一个输出。为了弥合二者之间的差异,在具体实现中我们将输入数据之外的其他输入张量的拆分状态包含在了算子的有向边之内。换句话说,虽然图7中每个算子只有一个输入和输出,其他的一些辅助张量被隐式地放在了有向边中。这种基于viterbi算法的方式降低了搜索最优拆分方案的复杂度。假设神经网络模型有m层,其中每个张量数据的拆分状态集合中至多有n个状态,那么每个算子最多有n2种不同的拆分方式。把拆分路径的比较操作作为基本操作,全遍历的情况下的时间复杂度是o(nm),而viterbi算法下的时间复杂度是o(mn2);把要维护的待选拆分路径数量作为空间复杂度的评价标准,全遍历的空间复杂度是o(nm),viterbi算法是o(n)。在一个可选的实施例中,根据拆分路径的权重,确定目标算子的张量数据的目标拆分路径,包括:遍历目标算子关联的张量数据的拆分状态集合,对当前拆分状态集合,遍历其中的每一拆分状态,获得所有指向当前拆分状态的有向边以及有向边的起点对应的拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径;根据有向边的权重和有向边对应的起始拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径的权重确定当前拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径;其中,拆分路径的权重根据拆分路径对应的所有有向边的权重确定;遍历完目标算子的所有拆分状态集合后,获得目标算子的输入张量数据的拆分状态集合与目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。对于目标算子的拆分状态集合,可以遍历获得所有指向当前拆分状态的有向边,例如图7所示,目标算子为op2时,op2关联的张量数据的拆分状态集合包括t2和t3,假设当前拆分状态集合为t3,遍历t3中的每一个拆分状态,获得指向当前拆分状态的有向边,假设当前拆分状态为t3:state1,那么指向当前拆分状态的有向边有两条,分别为:t2:state1→t3:state1,以及t2:state2→t3:state1,然后获得有向边的起点对应的拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径,对于有向边t2:state1→t3:state1,起点为t0:state1,从有向边起点到目标算子的输入张量数据的拆分状态之间的路径为:t0:state1→t1:state2→t2:state1。对于另一条有向边t2:state2→t3:state1,起点为t0:state2,从有向边起点到目标算子的输入张量数据的拆分状态之间的路径为:t0:state2→t1:state1→t2:state2,这是一个正向遍历的过程。根据拆分路径中包括的所有有向边的权重可以获得拆分路径的权重,包括对所有有向边的权重求和,求乘积,加权求和,或者求积分等。以权重求和为例,对于拆分路径t0:state1→t1:state2→t2:state2,有向边t0:state1→t1:state2的权重为ω1,有向边t1:state2→t2:state2的权重为ω2,拆分路径的权重可以为拆分路径中所有有向边的权重之和,即ω11=ω1+ω2。对于当前拆分状态t3:state1,假设有向边t2:state1→t3:state1和t2:state2→t3:state1对应的权重分别为ω01和ω02,而起始拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径也有两条,其中:t0:state1→t1:state2→t2:state2,权重为ω11;t0:state2→t1:state1→t2:state2,权重为ω12;那么当前拆分状态t3:state1到目标算子的输入张量数据的拆分状态之间的拆分路径也包括2条,即为:t0:state1→t1:state2→t2:state2→t3:state1,权重为ω21=ω01+ω11;t0:state2→t1:state1→t2:state2→t3:state1,权重为ω22=ω02+ω12;遍历完目标算子的所有拆分状态集合后,可以获得目标算子的输入张量数据的拆分状态集合与目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。目标拆分路径根据当前拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径的权重来确定。目标拆分路径是从多条拆分路径中选取的一条,可以是总消耗时长最短的一条,或者是总占用内存最少的一条,或者是吞吐量最大的一条。对应到拆分路径中,即可以选择拆分路径的权重最大的一条,或者权重最小的一条。例如对目标算子op2来说,已经确定了其对应的拆分状态集合中的拆分状态t3:state1到目标算子的输入张量数据的拆分状态之间的拆分路径包括2条,且两条拆分路径对应的权重分别为ω21和ω22,若权重表示算子根据输入张量数据运算获得输出张量数据的时间消耗,且ω21>ω22,那么当需要选择时间消耗更少的拆分路径时,选择ω22对应的拆分路径。同样的,对于算子op2对应的拆分状态集合中的其他拆分状态,获得其他拆分状态到目标算子的输入张量数据的拆分状态之间的拆分路径,并选择其中耗时最少的拆分路径,再从每个拆分状态对应的耗时最少的拆分路径中决策出唯一一条耗时最少的拆分路径。假设算子op2对应的唯一一条耗时最少的拆分路径为ω22对应的拆分路径,在这条拆分路径中,算子op2的输入张量数据的拆分状态集合与输出张量数据的拆分状态集合之间的目标拆分路径可以确定为t2:state2→t3:state1,即对算子对应的目标拆分路径的选择是根据神经网络模型全局拆分路径的权重来选取的,而不是根据单个算子的相邻拆分状态集合的拆分状态之间的有向边权重来确定的。在一个可选的实施例中,确定目标算子的张量数据的目标拆分路径,包括:遍历目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径;根据有向边的权重和有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定当前拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径;其中,拆分路径的权重根据拆分路径对应的所有有向边的权重确定;遍历完目标算子的所有拆分状态集合后,获得目标算子的输入张量数据的拆分状态集合与目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。对于目标算子的拆分状态集合,还可以遍历获得所有以当前拆分状态为起点的有向边,请参阅图7,例如目标算子为op1时,op1关联的张量数据的拆分状态集合包括t1和t2,假设当前拆分状态集合为t1,遍历t1中的每一个拆分状态,获得以当前拆分状态为起点的有向边,假设当前拆分状态为t1:state1,那么以当前拆分状态为起点的有向边有一条:t1:state1→t2:state2,然后获得有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径,对于有向边t1:state1→t2:state2,终点为t3:state1,从有向边终点到目标算子的输出张量数据的拆分状态之间的路径为:t2:state2→t3:state1。这是一个反向遍历的过程。根据拆分路径中包括的所有有向边的权重可以获得拆分路径的权重,同样包括对所有有向边的权重求和,求乘积,加权求和,或者求积分等。以权重求和为例,对于拆分路径t2:state2→t3:state1,其中仅包括一条有向边,那么拆分路径的权重=有向边的权重。对于当前拆分状态t1:state1,假设有向边t1:state1→t2:state2对应的权重为ω31,而有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径有一条,即为:t2:state2→t3:state1,权重为ω41;那么当前拆分状态t1:state1到目标算子的输出张量数据的拆分状态之间的拆分路径为:t1:state1→t2:state2→t3:state1,权重为:ω51=ω31+ω41。遍历完目标算子的所有拆分状态集合后,可以获得目标算子的输入张量数据的拆分状态集合与目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。对于目标算子op1来说,遍历完t1和t2中的所有拆分状态之后,获得以t1中的拆分状态为起点的有向边,到有向边的终点,为一条算子op1对应的全局拆分路径,根据全局拆分路径的权重选择其中一条作为最优拆分路径。同样的,权重对应的含义包括总消耗时长,总占用内存,或吞吐量,对应到拆分路径中,可以选择权重最大的一条,或者权重最小的一条作为最优拆分路径。而从最优拆分路径中,截取出算子op1的相邻拆分状态集合对应的有向边,即为目标算子的输入张量数据的拆分状态集合与目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。可见,在本申请实施例中,通过神经网络模型中全局张量数据的有向边组成的拆分路径的权重确定目标算子张量数据的目标拆分路径,可以在全局最优拆分方式的前提下获得目标算子张量数据的最佳拆分方式,提升了张量数据拆分准确性和适应性,进而提升了人工智能处理器调用神经网络模型的效率,整体上有效降低资源消耗。根据上述获得目标拆分路径的过程可知,目标拆分路径为目标算子的张量数据对应的多条拆分路径中的一条,例如图7中正向遍历确定的算子op2对应的目标算子的张量数据的目标拆分路径为t2:state2→t3:state1,只是拆分状态集合t2和t3之间对应的多条拆分路径t2:state2→t3:state1,t2:state1→t3:state1,t2:state1→t3:state2等等中的一条。在上述情况下确定的多条拆分路径,对应的都是两个拆分状态集合,即一个输入张量数据对应的拆分状态集合和一个输出张量数据对应的拆分状态集合。但是在另一些情况下,同一个算子对应多个输入张量数据,或者对应多个输出张量数据,如图8所示,图8为本申请实施例提供的一种深度残差网络中的残差块示意图,如图8所示,前一算子的输出张量数据xl被最下方的add算子作为输入张量数据,同时被批量标准化算子bn作为输入张量数据,而对于add算子来说,包括xl和两个输入张量数据。这种情况下,请参阅图9,图9为本申请实施例提供的一种多张量数据对应的拆分状态集合示意图,如图9所示,因为tensor2同时作为算子op2和op4的输入张量数据,那么对于包括算子op2和op4的目标算子来说,对应的拆分路径既包括相邻拆分状态集合t2→t31对应的拆分路径,也包括相邻拆分状态集合t2→t31对应的拆分路径,目标算子的多条拆分路径对应3个拆分状态集合,此时,获得目标算子的张量数据的目标拆分路径的过程与前述过程完全相同,但是在确定目标拆分路径后,只需要保留目标拆分路径对应的拆分状态,删除其他拆分对应的拆分状态。在一个可选的实施例中,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。在图9中,算子op1的输出张量数据tensor2被算子op2和op4同时作为输入张量数据,op2和op4根据正向遍历或反向遍历确定的目标拆分路径为t2:state2→t31:state2,但是在进行回溯时,会同时得到t31→t2和t32→t2的拆分路径,选择的目标拆分路径也可能会与正向遍历和反正遍历的结果不同,造成目标拆分路径的决策冲突。因此,为了避免这种决策冲突,在遍历确定目标拆分路径后,删除算子的输出张量数据对应的拆分状态集合中除目标拆分路径之外的所有拆分状态。例如算子op1的输出张量数据对应的拆分状态集合t2,在确定了包括算子op2和op4的层对应的目标拆分路径为t2:state2→t31:state2后,删除t2中除state2之外的所有拆分状态。在一个可选的实施例中,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确定。同样的,算子op3包括两个输入张量数据,分别为tensor31和tensor32,假设确定包括算子op3的层对应的目标拆分路径为t31:state2→t4:state1,同样地,在回溯阶段,会得到t4→t31和t4→t32的拆分路径,确定的目标拆分路径也可能与正向遍历和反向遍历得到的目标拆分路径不同,这样会造成目标拆分路径的决策冲突。因此,为了避免这种决策冲突,在遍历确定目标拆分路径后,删除当前算子的输入张量数据拆分状态集合中除目标拆分路径之外的所有拆分状态。例如算子op3输入张量数据的拆分状态集合t4,在确定了算子op3对应的目标拆分路径为t31:state2→t4:state1后,删除t31中除state2之外的所有拆分状态,同时删除t32中的所有拆分状态。步骤304、根据所述目标拆分路径对所述计算图的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。目标拆分路径是全局最优拆分路径中目标层对应的拆分路径。因此神经网络模型中所有目标拆分路径组合也可以形成全局最优拆分路径,按照最优拆分路径对算子的张量数据进行拆分,进而获得此次拆分时算子的最优拆分方式。在对算子的张量数据进行拆分后,在多核上调用拆分后的子张量数据,即可实现并行执行拆分后的子算子,可以提升神经网络模型的执行效率。另外,多核架构中的核数通常为2的整数次幂,例如1,2,4,8,16等,一个并行度不是2的整数次幂的任务往往会导致核的调度上产生“碎片”,因此拆分后的子算子数量应该为2的整数次幂。算子的拆分个数可以由拆分状态中包括的子张量数据个数确定,例如图5中的(input1,input2)即为一种拆分状态s,包括2个输入子张量数据,即将算子拆分成2个子算子。可见,在本申请实施例中,根据神经网络模型对应计算图中的目标算子,确定与目标算子的算子关联的张量数据的拆分状态集合;遍历拆分状态集合,确定相邻拆分状态集合之间算子的张量数据的拆分路径以及拆分路径的权重;根据拆分路径的权重,确定目标算子的张量数据的目标拆分路径,其中在确定目标拆分路径时,对拆分状态集合进行反向优化;根据目标拆分路径对神经网络模型计算图中的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。这样一方面通过拆分算子对应的张量数据实现拆分算子,可以使得在多核上并行执行拆分算子的情况下,避免了对每个算子原有的指令实现的修改和重构。另一方面,通过对算子关联的张量数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据对应的拆分状态之间的拆分路径选择,进一步优化张量数据的拆分方式。另外,在选择拆分路径的同时对拆分状态集合也进行优化,减少决策分支,提升神经网络模型的执行效率。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在多核处理器上的端到端时延。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。进一步需要说明的是,虽然图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关装置。参见图10,图10为本申请实施例提供的一种用多核处理器实现神经网络模型拆分装置的结构示意图,该装置40至少可以包括:第一确定单元401,用于根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子的算子关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输出张量数据;遍历单元402,用于遍历所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径以及所述拆分路径的权重;第二确定单元403,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;拆分单元404,用于根据所述目标拆分路径对所述神经网络模型的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。在一种可能的实现方式中,所述第二确定单元403具体用于:遍历所述目标算子关联的张量数据的拆分状态集合,对当前拆分状态集合,遍历其中的每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。在一种可能的实现方式中,所述第二确定单元403具体用于:遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。在一种可能的实现方式中,在当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元403具体用于:当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。在一种可能的实现方式中,在当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元403具体用于:当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确定。在一种可能的实现方式中,所述计算图的目标算子的输入张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合中的拆分状态确定。在一种可能的实现方式中,所述计算图的目标算子的算子的输出张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合中的拆分状态确定。在一种可能的实现方式中,所述有向边的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。此外,这里需要指出的是,本申请实施例还提供了一种计算机存储介质,用于存储为上述图2所示的计算机设备所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,对神经网络模型对应计算图中目标算子关联的张量数据进行拆分,获得张量数据对应的拆分状态集合,再确定相邻拆分状态集合之间张量数据的拆分路径和拆分路径的权重,确定目标算子的张量数据的目标拆分路径,最后根据目标拆分路径对计算图的目标算子的张量数据进行拆分,以分匹配到多核处理器的对应核进行处理。在这个过程中,通过对目标算子关联的张量数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据对应的拆分状态之间的拆分路径选择,进一步优化张量数据的拆分方式。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在多核处理器上的端到端时延。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1