WO2021057722A1 - 用多核处理器实现神经网络模型拆分方法及相关产品 - Google Patents
用多核处理器实现神经网络模型拆分方法及相关产品 Download PDFInfo
- Publication number
- WO2021057722A1 WO2021057722A1 PCT/CN2020/116820 CN2020116820W WO2021057722A1 WO 2021057722 A1 WO2021057722 A1 WO 2021057722A1 CN 2020116820 W CN2020116820 W CN 2020116820W WO 2021057722 A1 WO2021057722 A1 WO 2021057722A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- split
- operator
- tensor data
- split state
- target
- Prior art date
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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Computer Hardware Design (AREA)
- Image Analysis (AREA)
- Machine Translation (AREA)
Abstract
本申请实施例公开了一种用多核处理器实现神经网络模型拆分方法及相关产品,当神经网络模型中存在可以进行拆分的算子时,对算子进行拆分,并选择最优拆分组合获得整个神经网络模型的最优拆分结果,再由多核并行执行最优拆分结果对应的子算子,达成减少计算机设备的资源消耗的目的。
Description
本发明涉及深度学习技术领域,尤其涉及一种用多核处理器实现神经网络模型拆分方法及相关产品。
近年来,神经网络处理器被不断提出,并如同通用处理器一样,正在由单核向多核扩展。这种扩展后的多核结构可以在训练阶段支持数据并行的方式来提高数据吞吐量,加快训练速度。然而,在推理阶段,相比吞吐量深度神经网络对端到端的时延有着更高的要求,这往往决定了加速器在某个场景下的可用性。传统的数据并行方案不能满足推理场景下对加速器小数据、低延迟的要求。
发明内容
为实现上述目的,第一方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分方法,该方法包括:
根据所述神经网络模型中目标算子的算子,确定与所述目标算子的算子关联的张量数据的原始拆分状态集合;其中,所述目标算子为所述神经网络模型中的至少一层;
在所述目标算子的算子与所述原始拆分状态集合之间插入胶水算子,调整所述算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据;
遍历所述调整后的拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径;
根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径;
根据所述目标拆分方式对所述神经网络模型的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
第二方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分装置,该装置可以包括:
第一确定单元,用于根据所述神经网络模型中目标算子的算子,确定与所述目标算子的算子关联的张量数据的原始拆分状态集合;其中,所述目标算子为所述神经网络模型中的至少一层;
调整单元,用于在所述目标算子的算子与所述原始拆分状态集合之间插入胶水算子,调整所述算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据;
遍历单元,用于遍历所述调整后的拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径;
第二确定单元,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径;
拆分单元,用于根据所述目标拆分方式对所述神经网络模型的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
第三方面,本申请实施例提供了一种芯片,所述芯片包括第二方面提供的神经网络模型处理装置。
第四方面,本申请实施例提供了一种计算机设备,所述计算机设备包括第三方面提供的芯片或第二方面提供的神经网络模型处理装置。
第五方面,本申请实施例提供了一种计算机设备,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储支持计算机设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。
第六方面,本申请实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
第七方面,本申请实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面所述的方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
实施本申请实施例,计算机设备通过对神经网络模型中算子关联的张量数据进行拆分,获得张量数据对应的原始拆分状态集合,再通过胶水算子对算子关联的张量数据的拆分状态集合进行调整,获得调整后的拆分状态集合,然后目标算子关联的张量数据的拆分状态集合,确定相邻拆分状态集合之间目标算子的张量数据的目标拆分路径,最后根据目标拆分路径对目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。这样一方面通过拆分算子对应的张量数据实现拆分算子,可以使得在多核上并行执行拆分算子的情况下,避免了对每个算子原有的指令实现的修改和重构,在这个过程中,为了减少神经网络模型中互相连接的层之间,因为算子特性不同造成的张量数据拆分方式不同带来的相互制约,加入了胶水算子对张量数据的拆分方式进行调整,以便增加神经网络处理器调用神经网络模型时的可执行性。另一方面,通过对算子关联的张量数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据拆分状态对应的拆分路径选择,进一步优化张量数据的拆分方式。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在多核处理器上的端到端时延。
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A为人工智能处理器的软件栈示意图;
图1B为本申请实施例提供的一种基于计算图的算子拆分示意图;
图1C~图1H为本申请实施例提供的卷积算子在并行度为2的情况下的对应拆分方式示意图;
图2为本申请实施例提供的一种计算机设备的结构示意图;
图3为本申请实施例提供的一种用多核处理器实现神经网络模型拆分方法的流程示意图;
图4为本申请实施例提供的一种神经网络模型中的算子连接关系示意图;
图5为本申请实施例提供的一种卷积算子拆分示意图;
图6为本申请实施例提供的一种拆分状态集合示意图;
图7为本申请实施例提供的一种Transform的调整过程示意图;
图8A为本申请实施例提供的Concat算子语义的示意图;
图8B为本申请实施例提供的Split算子语义的示意图;
图9为本申请实施例提供的一种插入Transform获得拆分状态的示意图;
图10为本申请实施例提供的一种拆分状态之间的拆分路径示意图;
图11为本申请实施例提供的一种深度残差网络中的残差块示意图;
图12为本申请实施例提供的一种用多核处理器实现神经网络模型拆分装置的结构示意图。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
为了便于更好的理解本申请所描述的技术方案,下面先解释本申请实施例所涉及的技术术语:
(1)张量(tensor)
在本技术方案中,张量仅仅是对存储的一块数据的特征描述,张量记录了数据的形状、类型等信息。
本申请实施例中,张量应该理解为张量数据,可以包括神经网络模型中输入张量数据、输出张量数据,也可以包括特征张量数据等。
以人工智能深度学习框架TensorFlow为例,一般使用阶(rank),形状(shape)和维数(dimension number)来描述张量的维度,其关系可以表示为如表1所示:
表1
如表1所示,张量A=4,其表示一个数。张量A=[6,2],其表示二维矩阵,具体地,该矩阵为6行2列的矩阵。
(2)数据并行
具体来说,所谓数据并行是指把数据划分成若干块分别映像到不同的处理器上,每一个处理器运行同样的处理程序对所分派的数据进行处理。现有中,大部分并行处理均采用 这种处理方式,尤其是对于计算复杂性很高的问题,如流体力学计算、图象处理等。
在本申请实施例中,数据并行可以应用于大规模的神经网络并行训练中。具体来说,数据并行的核心是使用多个处理器同时进行对于同一个神经网络模型的训练。在训练的每一轮迭代中,每个处理器从数据集中获取本轮迭代使用的数据,在每个处理器上完成一轮整个网络的推理及训练计算,并返回本轮计算得到的梯度数据来进行模型的更新。维护权值的服务器在收到所有处理器的梯度之后,使用这些梯度进行模型数据的更新。显然,由于多个处理器会并行地执行训练任务,其等价于在每轮迭代中一个更大批量的数据能够被处理,也就加快了系统完成这个训练任务所需要的时间。所以,数据并行的关键在于每一轮迭代中待处理数据的批量的大小,批量越大,尽可能划分到越多的处理器来并行处理。
(3)模型并行
在本申请实施例中,模型并行是数据并行之外的另一种神经网络并行计算方式。简单来说,模型并行是通过划分神经网络模型参数的方式把计算负载分配到不同的处理器上。
(4)多核处理器
当前多核处理器采用的最普遍的结构是基于存储共享的多核结构,处理器中包含了多个计算核,每个计算核上有独立的缓存,寄存器堆,计算单元以及指令控制单元,所有的计算核共享同一全局存储。
现有中,单个核已经足够完成任何复杂逻辑的计算任务,但其性能受限于摩尔定律和芯片工艺。为了进一步提升处理器的性能,多个计算核被引入处理器中,它们可以被用于处理那些有着较高并行度的计算任务。
在实际应用中,共享存储多核结构是一种经典的多核结构,并且非常适合数据并行的神经网络训练方法。每个核可以作为数据并行中的一个处理器,分别读取不同的数据,然后并行完成网络模型的正反向计算。每个核在计算阶段仍能够保持其在之前单核架构下良好的性能功耗比,与此同时,整个系统的吞吐量也可以随着核数的扩展而增加。
(5)算子拆分
在本申请实施例中,我们采用算子拆分的方式来实现计算任务的拆分,即把单个算子拆分成多个可以并行执行的子算子。需要说明的是,这里,拆分前的原始算子和拆分后的若干个子算子都是人工智能处理器所支持的算子,原始的张量数据随着算子的拆分也被拆分成若干个新的子张量数据。反映到计算图上,则是把原来的包含单个算子的计算图细化成了一张包含更多可并行执行的算子的计算图。通过这一实现方式,可以实现类似于模型并行的算子内任务拆分,同时又保证了拆分后的每个子算子都可以复用单核架构下算子的指令实现来进行计算,避免了对原有算子的指令实现的重构。
在本申请实施例中,算子拆分不完全局限于对模型参数的拆分,也会采用数据并行的方式对数据进行拆分,这种方法实际上模糊了模型并行和数据并行的界限。以卷积算子为例,如果把卷积算子的输入数据和权值作为计算图中等同低位的张量数据,那么,数据并行时基于对输入数据的划分来分割计算,而模型并行时基于权值的划分来分割计算,这二者都是通过划分卷积算子相关联的张量数据来实现对计算负载的划分。从这个角度来说,数据并行和模型并行是统一的。
(6)人工智能处理器
人工智能处理器,也称之为专用处理器,在本申请实施例中,人工智能处理器是指针对特定应用或者领域的处理器。例如:图形处理器(GPU,Graphics Processing Unit),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上进行图像运算工作的专用处理器。又例如:神经网络处理器(NPU,Neural Processing Unit),是一种在人工智能领域的应用中针对矩阵乘法运算的专用处理器,采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量 多媒体数据。
(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经过拆分成为Opo0_0、Opo0_1、Opo0_2和Opo0_3三个子算子,那么算子Op0的输入张量数据Tensor1也被对应拆分为Tensor1_0、Tensor1_1、Tensor1_2和Tensor1_3。通过这种方法实现了算子内任务拆分,同时又保证了拆分后的每个子算子都可以复用单核架构下算子的指令实现来进行计算,避免了对原有算子的指令实现的重构,即子算子Opo0_0、Opo0_1、Opo0_2和Opo0_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可以是中央处理单元(Central Processing Unit,CPU),该通用处理器201还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器201可以是微处理器或者该通用处理器201也可以是任何常规的处理器等。
通用处理器201还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的算子拆分方法的各个步骤可以通过通用处理器201中的硬件的集成逻辑电路或者软件形式的指令完成。
存储器202可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)或其他存储器。本申请实施例中,存储器202用于存储数据以及各种软件程序,例如本申请实施例中根据胶水算子的位置关系对神经网络模型进行优化的程序等。
可选的,在本申请实施例中,所述存储器可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方法的媒体加以存储。本实施方式所述的存储器又可以包括:利用电能方式存储信息的装置,如RAM、ROM等;利用磁能方式存储信息的装置,如硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置,如CD或DVD。当然,还有其他方式的存储器,例如量子存储器、石墨烯存储器等等。
通信接口204使用例如但不限于收发器一类的收发装置,来实现计算机设备20与其他设备或通信网络之间的通信。例如,可以通过通信接口204接收其他设备发送的模型文件。
人工智能处理器205可以作为协处理器挂载到主CPU(Host CPU)上,由主CPU为其分配任务。在实际应用中,人工智能处理器205可以实现一种或多种运算。例如,以神经网络处理器(Network Processing Unit,NPU)NPU为例,NPU的核心部分为运算电路,通过控制器控制运算电路提取存储器202中的矩阵数据并进行乘加运算。
可选的,人工智能处理器205可以包括8个集群(cluster),每个cluster中包括4个人工智能处理器核。
可选的,人工智能处理器205可以是可重构体系结构的人工智能处理器。这里,可重构体系结构是指,如果某一人工智能处理器能够利用可重用的硬件资源,根据不同的应用需求,灵活的改变自身的体系结构,以便为每个特定的应用需求提供与之相匹配的体系结构,那么这一人工智能处理器就称为可重构的计算系统,其体系结构称为可重构的体系结构。
应当理解,计算机设备20仅为本申请实施例提供的一个例子,并且,计算机设备20可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。
下面结合图3所示的本申请实施例提供的一种用多核处理器实现神经网络模型拆分方法的流程示意图,具体说明在本申请实施例中是如何通过对目标算子的输入张量数据的拆分来表征对目标算子的拆分方式,进而达到优化处理器核运算过程的目的,下面以caffe为例参考附图详细描述。可以包括但不限于如下步骤。
步骤301、根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的原始拆分状态集合。
在caffe框架下,所述目标算子可以是神经网络模型中的对应目标层(layer),该目标层为所述神经网络模型中的至少一层,所述张量数据包括输入张量数据和输出张量数据。
在本申请实施例中,“神经网络模型”也称模型,如“第一神经网络模型”、“第二神经网络模型”或“第三神经网络模型”,可以接收输入数据,并根据接收的输入数据和当前的模型参数生成预测输出。在实际应用中,预测输出可以包括图像检测输出结果、语义分析输出结果、图像分类输出结果等等。该神经网络模型可以包括深度学习神经网络模型(deep neural network,DNN)、卷积神经网络模型(Convolutional Neural Network,CNN)、极限学习机模型(extreme learning machine,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-Maximum Suppression,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、在所述目标算子与所述原始拆分状态集合之间插入胶水算子,调整所述目标算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据。
在得到算子关联的张量数据对应的原始拆分状态集合方面,因为原始拆分状态集合可以根据算子自身的运算逻辑获得,或者根据算子的运算逻辑和输入张量数据的原始拆分状态集合中的拆分状态获得,又或者根据算子的运算逻辑和输出张量数据的原始拆分状态集合中的拆分状态获得,无论是哪一种获得方式,都与算子自身的运算逻辑密切相关。但是,神经网络模型中层级连接的算子需要共用同一个原始拆分状态集合,例如图6中的原始拆分状态集合T1既是算子Op0的输出张量数据对应的原始拆分状态集合,也是算子Op1的输入张量数据对应的原始拆分状态集合,但是算子Op0和算子Op1的运算逻辑不同,支持的拆分方式也不同,那么在根据Op1的运算逻辑确定Tensor1的拆分方式后,Op1再选择拆分方式时,必须保证选择的方式与其输入数据Tensor1已经确定的拆分方式相兼容,这使得Op1的选择范围受到了约束。那么,可以理解的是,Op1在这种约束下所选择的拆分方 式又会通过与其关联的张量数据约束其他相邻算子的拆分选择。
这种算子间关于拆分方式选择的相互影响会带来很多问题,首先,会带来性能方面的问题。在实际应用中,当计算机设备在多核处理器上调用不同的拆分方式下对应子计算任务时,性能间有差异。那么,可以理解的是,如果相邻的两算子最佳的算子拆分方案在其共同关联的张量数据上的拆分方式上不一致的情况下,为了避免冲突,必然有一方要屈就于另一方的选择。
其次,算子之间的拆分方式的相互影响会影响整个网络的可执行性。如前述内容提到的,有些算子是实现上非常复杂的算子,譬如NMS(Non-maximum suppression)算子,难以通过算子拆分的方式把计算负载分配到多个核上并行,这类算子最终只能在单个核上执行,相应的输入数据应该保持完整不拆分的状态。那么,可以理解的是,如果一个神经网络模型中存在这一类算子,则必须保证该算子的输入数据处于完整不拆分的状态,否则网络在该算子处无法继续执行。如果这种约束随着网络结构扩散,就会使得难以通过算子拆分的方式在神经网络计算中挖掘出足够数量的并行度。
为了解决算子拆分彼此之间相互影响的问题,在目标算子的算子与关联的原始拆分状态集合之间插入胶水算子,该胶水算子可以实现让神经网络模型对应的计算图中的每个算子可以灵活不受限地选择作用于自身的拆分方式。
胶水算子插入位置为根据输入张量数据获得的原始拆分状态集合和算子之间,原始拆分状态集合是根据算子自身的运算逻辑、数据规模,以及现有的相关联的拆分状态集合获得的,在原始拆分状态集合之后插入胶水算子,获得输入张量数据对应的第三拆分状态集合,第三拆分状态集合中可能包括原始拆分状态集合中的拆分状态,以及一些算子支持的新的拆分状态,将第三拆分状态集合和原始拆分状态集合进行合并,保证新的拆分状态集合中包括所有原始拆分状态集合和第三拆分状态集合中的拆分状态,获得输入张量数据对应的调整后的拆分状态集合,再使用调整后的拆分状态集合进行算子运算,可以使算子直接调用新的拆分状态集合,而不用耗费多余时间执行原始拆分状态集合。
具体来说,本申请实施例引入胶水算子Transform,用于将张量数据按照一种方式拆分得到的若干个子张量数据调整成按照另一种方式拆分得到的若干个子张量数据。若当前张量数据的拆分方式不被其后的算子的任何一种拆分方式所允许,又或者其后的算子在兼容当前张量数据的拆分方式的前提下可选择的方案所带来的性能提升很差,可以通过在计算图中插入Transform把当前数据调整至另一种更优的拆分方式,如图7所示,图7为Transform的调整过程示意图,如图7所示,原本按照第一种方式拆分得到的子张量数据Tensor_0和Tensor_1经过Transform调整后,获得按照第二种方式拆分得到的新的子张量数据,新的子张量数据能够被算子Op_0和Op_1兼容。
Transform的语义可以包括神经网络中常见的算子Concat和Split两方面的含义。下面对其进行具体阐述。
Concat算子,也即,拼接算子,用于将多个张量数据沿着指定的维度拼接成一个张量。除了在指定维度外,输入张量的其他维度应该保持一致。通过Concat算子,神经网络将代表来自上游不同位置的特征的多个张量拼接成一个,从而可以在下游计算中对这些特征共同进行处理。具体地,可以参见图8A所示的Concat算子语义的示意图。
Split算子,也即拆分算子,用于将一个张量在指定维度上拆分成多个张量。拆分后的多个张量除了指定维度之外,在其他维度上保持一致。通过Split算子,可以把属于同一张量数据的特征拆成多份,从而在后续计算中分别进行针对性处理。具体地,可以参见图8B所示的Split算子语义的示意图。
Transform可以使用拼接-拆分两阶段的方式来实现。在拼接阶段,可以使用Concat算子把在任意维度上相邻的子张量数据拼接成一个新的子张量数据,在拆分阶段,可以把 Split算子把任意一个子张量数据拆分成几个更小的子张量数据。这样,张量数据按照任意一种方式拆分得到的子张量数据可以转换成按照任意另一种方式拆分得到的子张量数据。
在一个可选的实施例中,调整算子的输入张量数据的拆分状态集合中的拆分状态,包括:对原始拆分状态集合中的拆分状态进行拼接。
请参阅图9,图9为本申请实施例提供的一种插入Transform获得拆分状态的示意图,如图9所示,假设张量数据Tensor1对应的原始拆分状态集合中的原拆分状态state1包括两个子张量数据Input1{[0,n/2),[0,ic/2)[0,ih),[0,iw)}和Input2{[n/2,n),[ic/2,ic)[0,ih),[0,iw)},对其进行拼接后,获得的张量数据为Input{[0,n),[0,ic)[0,ih),[0,iw)},对应拆分状态state2,即是一次通过Transform完成对拆分状态进行调整的过程。
在一个可选的实施例中,调整目标算子的张量数据的拆分状态集合中的拆分状态,包括:对原始拆分状态集合中的的拆分状态进行拆分。
具体地,假设张量数据Tensor1对应的原始拆分状态集合中的拆分状态state1包括两个子张量数据Input1{[0,n/2),[0,ic/2)[0,ih),[0,iw)}和Input2{[n/2,n),[ic/2,ic)[0,ih),[0,iw)}。对其进行拆分后,获得的子张量数据为Input3{[0,n/4),[0,ic/4)[0,ih),[0,iw)},Input4{[n/4,n/2),[ic/4,ic/2)[0,ih),[0,iw)},Input5{[n/2,3n/4),[ic/2,3ic/4)[0,ih),[0,iw)},Input6{[3n/4,n),[3ic/4,ic)[0,ih),[0,iw)},对应拆分状态state3,即是一次通过Transform完成对拆分状态进行调整的过程。
在一个可选的实施例中,调整算子的张量数据的拆分状态集合中的拆分状态,包括:对原始拆分状态集合中张量数据的拆分状态进行拼接,再对经过拼接处理后的拆分状态集合中的拆分状态进行拆分。
对于目标算子来说,需要获得的调整后的拆分状态集合中的新的拆分状态可能与原始拆分状态集合中的原始拆分状态在不同维度上的拆分粒度不同,例如在输入数据批量大小n维度上,新的拆分状态需要更大的粒度,在输入数据特征图像的长度ih维度上,新的拆分状态需要更小的粒度,那么在通过Transform进行调整时,需要对原始拆分状态进行子张量数据的先拼接,再拆分,获得新的拆分状态,完成Transform对拆分状态的调整过程。
在一个可选的实施例中,调整目标算子的拆分状态集合中的拆分状态,包括:对原始拆分状态集合中的拆分状态进行拆分,再对经过拆分处理后的拆分状态集合中的拆分状态进行拼接。
同样的,对于上述调整后的拆分状态集合中的新的拆分状态与原始拆分状态集合中的原始拆分状态在不同维度上的拆分粒度不同的问题,可以对原始拆状态对应的子张量数据的先拆分和再拼接。例如在n维度上,新的拆分状态需要更小的粒度,在ih维度上,新的拆分状态需要更大的粒度,对原始拆分状态进行子张量数据先拆分,再拼接,获得新的拆分状态,完成Transform对拆分状态的调整过程。
可见,在本申请实施例中,通过胶水算子Transform对原始拆分状态集合中的原始拆分状态对应的子张量数据进行拆分、合并,或者拆分后再合并,或者合并后再拆分,以完成将原始拆分状态集合中的原始拆分状态转换为调整后的拆分状态集合中的新的拆分状态,使得调整后的拆分状态集合能够更好地被算子兼容,降低提升人工智能处理器调用神经网络模型时的不可执行概率。
步骤303、遍历所述目标算子关联的张量数据的所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径。
在一个神经网络模型对应的计算图中,包括多个目标层对应的目标算子,可以为所有目标算子与原始拆分状态集合之间都插入Transform算子,也可以为部分目标算子与所述原始拆分状态集合之间插入Transform算子。如果都插入了Transform算子,目标算子的张量数据的拆分状态全部由调整后的拆分状态集合确定;如果部分插入了Transform算子,那么 目标算子的张量数据的拆分状态由部分原始拆分状态集合和部分调整后的拆分状态集合确定。
如果部分目标算子与原始拆分状态集合之间插入了Transform算子,另一部分目标算子与原始拆分状态集合之间没插入Transform算子,遍历插入Transform算子后获得的调整后的拆分状态集合和未插入Transform算子的原始拆分状态集合,确定相邻拆分状态集合之间的拆分路径,例如图9所示,原始拆分状态集合和目标算子Op1之间插入了Transform算子,得到调整后的拆分状态集合T1’,那么需要遍历确定相邻拆分状态集合之间的拆分路径的拆分状态集合包括T0,T1’,T2和T3。
如果所有目标算子与原始拆分状态集合之间都插入了Transform算子,遍历所有调整后的拆分状态集合,确定相邻拆分状态集合之间的拆分路径。例如图9中的原始拆分状态集合T0,T1,T2,T3分别与算子Op0,Op1,Op2和Op3之间插入了Transform算子,得到调整后的拆分状态集合T0’,T1’,T2’,和T3’,那么需要遍历确定相邻拆分状态集合之间的拆分路径的拆分状态集合包括T0’,T1’,T2’和T3’。
另外,除了在目标算子与对应的输入张量数据之间插入胶水算子,也可以在,目标算子与对应的输出张量数据之间插入胶水算子,更可以在目标算子与对应的输入张量数据、输出张量数据之间均插入胶水算子,此次仅仅是例举的部分情况,而不是穷举,本领域技术人员在理解本申请技术方案的精髓的情况下,可能会在本申请技术方案的基础上产生其它的变形或者变换,但只要其实现的功能以及达到的技术效果与本申请类似,那么均应当属于本申请的保护范围。
路径表示输入张量数据到输出张量数据的中间过程,拆分路径表示相邻拆分状态集合之间拆分状态到拆分状态的中间过程。请参阅图10,图10为本申请实施例提供的一种拆分状态之间的拆分路径示意图,如图10所示,以神经网络模型对应计算图中的所有目标算子和原始拆分状态集合之间都插入了Transform算子为例,目标算子关联的张量数据的调整后的拆分状态集合中的拆分状态之间存在有向边,例如算子Op1对应的调整后的拆分状态集合T1’和T2’之间,包括T1’:State1指向T2’:State2的有向边,其中,有向边可以有两层含义:一表示算子与算子之间的连接关系;二表示人工智能处理器执行神经网络模型的执行顺序。对于第一种含义,是指如果拆分状态之间存在有向边,那么拆分状态对应的算子之间存在连接关系,存在连接关系的算子之间相邻且相互关联。对于第二种含义,是指如果拆分状态之间存在有向边,那么有向边指向的方向对应神经网络模型中的算子在处理器上的执行顺序。
在图10中,虚线框代表每个张量数据调整后的拆分状态集合,集合中包含了若干个拆分状态,这些状态来自于该张量数据的拆分状态空间。算子的输入张量数据的拆分状态集合中的拆分状态和输出张量数据的拆分状态集合中的状态之间的每条有向边表示该算子本身的一种拆分方式,使用该拆分方式下的并行执行时间作为有向边的权重。Tensor0’是整个网络的输入张量,Tensor3’是整个网络的输出张量数据,任意一条由Tensor0’的状态集合中的任一状态出发,到Tensor3’的状态集合中的任一状态结束的路径,都对应了一种该神经网络的有效拆分方案,记为P。对于给定的神经网络模型,要搜索一个好的拆分方案,就是在图10中寻找一条由Tensor0’的状态到Tensor3’的状态的目标路径。
在本技术方案中,拆分状态与拆分状态之间的有向边具有权重,即拆分路径的权重。每条拆分路径的权重是按照该算子运算操作方式和对应的拆分后的子张量数据在神经网络多核处理器上并行执行的时间。在确定时间时,一方面要考虑算子本身的规模,另一方面要考虑包括访存带宽、运算器频率在内的多个硬件参数。神经网络模型的算子中基本上没有条件跳转,其计算量在给定算子的规模的前提下是确定的。此外,因为执行在各个核上的拆分得到的子算子的对称性,采用均分的方式来评估多核并行执行下每个核在访问全局 存储的过程中得到的访存带宽。因此,所述拆分路径的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。
在实际中,为了确保拆分路径的权重的精准性,也可以采用实际测试的方式来获得算子在各种拆分并行下的执行时间,做到这一点同样是因为算子本身的执行具有确定性。一旦我们策略并存储了某种算子在某一数据规模下按照某种方式拆分并行的实际时间,就可以将该数值用于表示所有代表该种数据规模的该种算子的该种拆分方式对应的拆分路径的权重。
人工智能处理器调用算子进行运算是会有对应的资源消耗,资源消耗的多少与算子的运算操作类型,算子的张量数据经过拆分路径获取的子数据的数据规模以及每个处理器核的吞吐率和访存带宽都有关,因此为了优化人工智能处理器的运算效率,会偏向于选择表示资源消耗更小的权重对应的有向边。
步骤303、根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径。
在确定相邻拆分状态集合之间的算子的张量数据的拆分路径之后,只是针对单个算子的张量数据的拆分路径,对于整个神经网络模型的多层结构来说,还需要进一步获得张量数据对应的拆分路径。
在实际中,可以使用类似于Viterbi算法的方式从图10中找出最短路径。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)。
在一个可选的实施例中,确定目标算子的张量数据的目标拆分路径,包括:遍历目标算子的算子关联的张量数据的所有拆分状态集合和所述胶水算子的张量数据拆分状态集合,对当前拆分状态集合,遍历其中的每一拆分状态,获得所有指向当前拆分状态的有向边以及有向边的起点对应的拆分状态到目标算子或胶水算子的输入张量数据的拆分状态之间的拆分路径;根据有向边的权重和有向边对应的起始拆分状态到目标算子或胶水算子的输入张量数据的拆分状态之间的拆分路径的权重确定当前拆分状态到目标算子或胶水算子的输入张量数据的拆分状态之间的拆分路径;其中,拆分路径的权重根据拆分路径对应的所有有向边的权重确定;遍历完目标算子的张量数据的所有拆分集合和胶水算子的张量数据的所有拆分状态集合后,获得目标算子的张量数据的目标拆分路径。
如果所有的目标算子与原始拆分状态集合之间都插入了胶水算子,那么得到的调整后的拆分状态集合实际是胶水算子的张量数据的拆分状态集合。因此,在整个计算图中,实际上是需要遍历胶水算子的张量数据的拆分状态集合来得到指向当前拆分状态的有向边,例如图10所示,目标算子为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,即对算子对应的目标拆分路径的选择是根据神经网络模型全局拆分路径的权重来选取的,而不是根据单个算子的相邻拆分状态集合的拆分状态之间的有向边权重来确定的。
在一个可选的实施例中,确定目标算子的张量数据的目标拆分路径,包括:遍历目标算子的所有调整后的拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径;根据有向边的权重和有向边的终点对应的拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定当前拆分状态到目标算子的输出张量数据的拆分状态之间的拆分路径;其中,拆分路径的权重根据拆分路径对应的所有有向边的权重确定;遍历完目标算子的所有调整后的拆分状态集合后,获得目标算子的输入张量数据的调整后的拆分状态集合与目标算子的输出张量数据的调整后的拆分状态集合之间的目标拆分路径。
对于目标算子的调整后的拆分状态集合,还可以遍历获得所有以当前拆分状态为起点的有向边,请参阅图10,例如目标算子为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的相邻调整后的拆分状态集合对应的有向边,即为目标算子的输入张量数据的调整后的拆分状态集合与目标算子的输出张量数据的调整后的拆分状态集合之间的目标拆分路径。
同样的,对于神经网络模型对应的计算图中只有部分算子插入了Transform算子的情况,遍历未插入Transform算子的目标算子的张量数据的拆分状态集合(原始拆分状态集合),以及插入的Transform算子的张量数据的拆分状态集合(调整后的拆分状态集合),得到目标算子的张量数据的目标拆分路径。
可见,在本申请实施例中,通过神经网络模型中全局张量数据的有向边组成的拆分路径的权重确定目标算子张量数据的目标拆分路径,可以在全局最优拆分方式的前提下获得目标算子张量数据的最佳拆分方式,提升了张量数据拆分准确性和适应性,进而提升了人工智能处理器调用神经网络模型的效率,整体上有效降低资源消耗。
在一个可选的实施例中,在目标算子与原始拆分状态集合之间插入胶水算子,还包括:利用包含所述胶水算子在内的计算图中的目标算子的目标拆分路径对插入的每个胶水算子进行选择,在满足目标拆分路径中包含的胶水算子的输入张量数据的状态和输出张量数据的状态相同的情况下,删除胶水算子。
在一个可选的实施例中,还包括:在满足目标拆分路径中插入了胶水算子的输入张量数据的状态和输出张量数据的状态不相同的情况下,保留胶水算子。
上述根据图10获得的目标拆分路径都是根据调整后的拆分状态集合确定的目标算子的张量数据的目标拆分路径,也就是说都是在插入Transform算子之后获得的目标拆分路径。事实上,在一些情况下,目标算子的目标拆分路径不一定是通过Transform调整后获得的,而是在原始拆分状态集合的情况下获得的。假设遍历目标算子Op0,Op1,Op2,Op3对应的原始拆分状态集合T0-T1-T2-T3,确定目标算子Op2的目标拆分路径为:T2:State2→T3:State1,而图10中算子Op2根据调整后的拆分状态集合确定的目标拆分路径为T2’:State2→T3’:State1,其中T2’:State2与T2:State2对应的张量数据拆分方式相同,T3’:State1与T3:State1对应的张量数据拆分方式相同,那么Transform没有起到优化目标算子Op2对应的张量数据拆分方式的作用。但是人工智能处理器在执行插入Transform的神经网络模型时,会带来额外的开销,为了减少这种不必要的额外开销,当获得的目标拆分路径中,Transform对应的输入张量数据的拆分状态和输出张量数据的拆分状态相同,即删除该目标算子插入的胶水算子Transform,得到优化后的目标拆分路径,即根据目标算子的原始拆分状态集合得到的目标拆分路径。
对应的,如果在获得的目标拆分路径中,Transform对应的输入张量数据的拆分状态和输出张量数据的拆分状态不相同,说明胶水算子Transform起到了优化目标拆分路径的作用,保留该目标算子的Transform。
可见,在本申请实施例中,在获得目标算子的张量数据对应的目标拆分路径后,进一步确定胶水算子是否起到了优化目标拆分路径的作用,如果有,则保留该目标算子胶水算子,如果没有,则删除该目标算子的胶水算子,可以较少引入胶水算子带来的人工智能处理器额外的开销,提升神经网络模型的执行效率。
在一个可选的实施例中,该方法还包括:当前目标算子的输出张量数据被至少两个算 子作为输入张量数据,或当前目标算子具有至少两个输出张量数据时,当前目标算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。
在一些情况下,目标算子的输出张量数据被至少两个算子作为输入张量数据,或当前目标算子具有至少两个输出张量数据,如图11所示,图11为本申请实施例提供的一种深度残差网络中的残差块示意图,如图11所示,前一算子的输出张量数据X
l被最下方的Add算子作为输入张量数据,同时被批量标准化算子BN作为输入张量数据,对于算子Add和算子BN来说,支持的拆分状态是不同的,在正向遍历时,可以获得Add算子和BN算子的输入张量数据各自的拆分状态集合,正向遍历时可以根据有向边的权重对拆分路径进行决策,选择支持Add算子或BN算子的输入张量数据对应的拆分状态集合,但是在进行回溯时,会同时得到Add算子对应的输入张量数据的拆分状态集合,和输出张量数据X
l
b对应的输入张量数据的拆分状态集合,为了保证回溯时对X
l的选择不发生冲突,对于X
l的拆分状态集合,只保留其中的一个拆分状态,且保留的拆分状态根据算子的同一有向边确定,例如可以根据前一算子的输入张量数据对应的拆分状态集合中的拆分状态指向X
l的拆分状态集合中的拆分状态确定。
在一个可选的实施例中,方法还包括:当前目标算子具有至少两个输入张量数据时,当前目标算子的输入张量数据的拆分状态集合中保留一个拆分状态,且拆分状态经由目标算子的同一有向边确定。
同样的,如果当前目标算子具有多个输入张量数据,那么每个张量数据都有其对应的拆分状态集合,而在进行回溯时,也可能得到目标算子的多个可选择拆分状态,为了保证算子的输入张量数据的拆分状态之间不发生冲突,保留算子输入张量数据的拆分状态集合中的一个拆分状态即可,且保留的拆分状态经由算子的同一有向边确定。
步骤304、根据所述目标拆分路径对所述神经网络模型的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
目标拆分路径是全局最优拆分路径中目标算子对应的拆分路径。因此神经网络模型中所有目标拆分路径组合也可以形成全局最优拆分路径,按照最优拆分路径对算子的张量数据进行拆分,进而获得算子的最优拆分方式。
在对算子的张量数据进行拆分后,在多核上调用拆分后的子张量数据,即可实现并行执行拆分后的子算子,可以提升神经网络模型的执行效率。另外,多核架构中的核数通常为2的整数次幂,例如1,2,4,8,16等,一个并行度不是2的整数次幂的任务往往会导致核的调度上产生“碎片”,因此拆分后的子算子数量应该为2的整数次幂。算子的拆分个数可以由拆分状态中包括的子张量数据个数确定,例如图5中的(Input1,Input2)即为一种拆分状态s,包括2个输入子张量数据,即将算子拆分成2个子算子。
可见,在本申请实施例中,根据神经网络模型对应计算图中目标算子的算子,确定与目标算子关联的张量数据的原始拆分状态集合;在目标算子与原始拆分状态集合之间插入胶水算子,调整目标算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;然后遍历目标算子关联的张量数据的拆分状态集合,确定相邻拆分状态集合之间目标算子的张量数据的拆分路径以及拆分路径的权重;再根据拆分路径的权重,确定目标算子的张量数据的目标拆分路径;最后根据目标拆分路径对神经网络模型的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。这样一方面通过拆分算子对应 的张量数据实现拆分算子,可以使得在多核上并行执行拆分算子的情况下,避免了对每个算子原有的指令实现的修改和重构,在这个过程中,为了减少神经网络模型中互相连接的层之间,因为算子特性不同造成的张量数据拆分方式不同带来的相互制约,加入了胶水算子对张量数据的拆分方式进行调整,以便增加神经网络处理器调用神经网络模型时的可执行性。另一方面,通过对算子关联的张量数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据拆分状态对应的拆分路径选择,进一步优化张量数据的拆分方式。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在多核处理器上的端到端时延。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关装置。
参见图12,图12为本申请实施例提供的一种用多核处理器实现神经网络模型拆分装置的结构示意图,该装置40至少可以包括:
第一确定单元401,用于根据所述神经网络模型对应计算图中目标算子,确定与所述目标算子相关联的张量数据的原始拆分状态集合;
调整单元402,用于在所述目标算子的算子与所述原始拆分状态集合之间插入胶水算子,调整所述目标算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据;
遍历单元403,用于遍历所述目标算子关联的张量数据的所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径;
第二确定单元404,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径;
拆分单元405,用于根据所述目标拆分方式对所述目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
在一种可能的实现方式中,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元402具体用于:
对所述原始拆分状态集合中的拆分状态进行拼接。
在一种可能的实现方式中,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元402具体用于:
对所述原始拆分状态集合中的拆分状态进行拆分。
在一种可能的实现方式中,在调整所述算子的张量数据的拆分状态集合中的拆分状态,所述调整单元402具体用于:
对所述原始拆分状态集合中的拆分状态进行拼接,再对经过拼接处理后的拆分状态集合中的状态进行拆分。
在一种可能的实现方式中,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元402具体用于:
对所述原始拆分状态集合中的拆分状态进行拆分,再对经过拆分处理后的拆分状态集合中的状态进行拼接。
在一种可能的实现方式中,所述调整单元402还用于:
利用包含所述胶水算子在内的计算图中的目标算子的目标拆分路径对插入的每个胶水算子进行选择,在满足所述目标拆分路径中包含的胶水算子的输入张量数据的拆分状态和输出张量数据的拆分状态相同的情况下,删除所述胶水算子。
在一种可能的实现方式中,所述调整单元402还用于:
在满足所述目标拆分路径中插入了胶水算子的输入张量数据的拆分状态和输出张量数据的拆分状态不相同的情况下,保留所述胶水算子。
在一种可能的实现方式中,所述第二确定单元404具体用于:
遍历所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合后,获得所述目标算子的张量数据的目标拆分路径。
在一种可能的实现方式中,所述第二确定单元404具体用于:
遍历所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合后,获得所述目标算子的张量数据的目标拆分路径。
在一种可能的实现方式中,所述第二确定单元404还用于:
当前目标算子的输出张量数据被至少两个算子作为输入张量数据,或当前目标算子具有至少两个输出张量数据时,当前目标算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前目标算子的同一有向边确定。
在一种可能的实现方式中,所述第二确定单元404还用于:
当前目标算子具有至少两个输入张量数据时,当前目标算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由当前目标算子的同一有向边确定。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有 另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
本申请实施例还提供一种芯片,该神经网络芯片可以为多核芯片,其中,包括中央处理单元(Central Processing Unit,CPU)和N个单核神经网络处理器(Neural Network Processor,NNP),N为大于1的整数。所述CPU用于对所述芯片进行整体的控制和调度,为本申请实施例中的神经网络模型处理方法的执行主体。
本申请实施例还提供另一种计算机设备,该计算机设备包含上述芯片或上述神经网络模型处理装置40。
本申请实施例还提供了一种计算机存储介质,用于存储为上述图2所示的计算机设备所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,可以根据神经网络模型中胶水算子的位置关系对神经网络模型进行优化,以提高神经网络模型的整体性能。当计算机设备调用优化后的神经网络模型时,由于无需执行多余的冗余操作,可以减少计算机设备的资源消耗。
由上可见,本申请实施例提供的算子拆分方法、装置、计算机设备和存储介质,该方法可以根据神经网络模型中胶水算子的位置关系对神经网络模型进行优化,以提高神经网络模型的整体性能。当计算机设备调用优化后的神经网络模型时,由于无需执行多余的冗余操作,可以减少计算机设备的资源消耗。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
Claims (20)
- 一种用多核处理器实现神经网络模型拆分方法,其特征在于,所述方法包括:根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的原始拆分状态集合;在所述目标算子与所述原始拆分状态集合之间插入胶水算子,调整所述目标算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据;遍历所述目标算子关联的张量数据的所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径;根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径;根据所述目标拆分路径对所述目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
- 根据权利要求1所述的方法,其特征在于,所述调整所述目标算子的张量数据的拆分状态集合中的拆分状态,包括:对所述原始拆分状态集合中的拆分状态进行拼接。
- 根据权利要求1所述的方法,其特征在于,所述调整所述目标算子的张量数据的拆分状态集合中的拆分状态,包括:对所述原始拆分状态集合中的拆分状态进行拆分。
- 根据权利要求1所述的方法,其特征在于,所述调整所述目标算子的拆分状态集合中的拆分状态,包括:对所述原始拆分状态集合中的拆分状态进行拼接,再对经过拼接处理后的拆分状态集合中的拆分状态进行拆分。
- 根据权利要求1所述的方法,其特征在于,所述调整所述目标算子的拆分状态集合中的拆分状态,包括:对所述原始拆分状态集合中的拆分状态进行拆分,再对经过拆分处理后的拆分状态集合中的拆分状态进行拼接。
- 根据权利要求2-5任一项所述的方法,其特征在于,在所述目标算子与所述原始拆分状态集合之间插入胶水算子,还包括:利用包含所述胶水算子在内的计算图中的目标算子的目标拆分路径对插入的每个胶水算子进行选择,在满足所述目标拆分路径中包含的胶水算子的输入张量数据的拆分状态和输出张量数据的拆分状态相同的情况下,删除所述胶水算子。
- 根据权利要求6所述的方法,其特征在于,在所述目标算子与所述原始拆分状态集合之间插入胶水算子,所述方法还包括:在满足所述目标拆分路径中插入了胶水算子的输入张量数据的拆分状态和输出张量数据的拆分状态不相同的情况下,保留所述胶水算子。
- 根据权利要求1所述的方法,其特征在于,确定所述目标算子的张量数据的目标拆分路径的步骤包括:遍历所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子或所述胶水算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的 权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合后,获得所述目标算子的张量数据的目标拆分路径。
- 根据权利要求1所述的方法,其特征在于,确定所述目标算子的张量数据的目标拆分路径的步骤包括:遍历所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径;根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子或所述胶水算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;遍历完所述目标算子的张量数据的所有拆分状态集合和所述胶水算子的张量数据的所有拆分状态集合后,获得所述目标算子的张量数据的目标拆分路径。
- 根据权利要求9所述的方法,其特征在于,所述方法还包括:当前目标算子的输出张量数据被至少两个算子作为输入张量数据,或当前目标算子具有至少两个输出张量数据时,当前目标算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前目标算子的同一有向边确定。
- 根据权利要求10所述的方法,其特征在于,所述方法还包括:当前目标算子具有至少两个输入张量数据时,当前目标算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由当前目标算子的同一有向边确定。
- 一种用多核处理器实现神经网络模型拆分装置,其特征在于,所述装置包括:第一确定单元,用于根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的原始拆分状态集合;调整单元,用于在所述目标算子与所述原始拆分状态集合之间插入胶水算子,调整所述目标算子的张量数据的拆分状态集合中的拆分状态,得到调整后的拆分状态集合;其中,所述胶水算子用于将张量数据按照一种拆分方式得到的子张量数据转换成按照另一种拆分方式得到的子张量数据;遍历单元,用于遍历所述目标算子关联的张量数据的所述拆分状态集合,确定相邻拆分状态集合之间所述目标算子的张量数据的拆分路径;第二确定单元,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径;拆分单元,用于根据所述目标拆分方式对所述目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
- 根据权利要求12所述的装置,其特征在于,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元具体用于:对所述原始拆分状态集合中的拆分状态进行拼接。
- 根据权利要求12所述的装置,其特征在于,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元具体用于:对所述原始拆分状态集合中的拆分状态进行拆分。
- 根据权利要求12所述的装置,其特征在于,在调整所述算子的张量数据的拆分状态集合中的拆分状态方面,所述调整单元具体用于:对所述原始拆分状态集合中的拆分状态进行拼接,再对经过拼接处理后的拆分状态集 合中的拆分状态进行拆分。
- 一种芯片,其特征在于,所述芯片集成如权利要求12-15任一项所述的用多核处理器实现神经网络模型拆分装置。
- 一种计算机设备,其特征在于,所述计算机设备包括如权利要求16所述的芯片或如权利要求12-15任一项所述的用多核处理器实现神经网络模型拆分装置。
- 一种计算机设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-11任一项所述的方法。
- 一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-11任一项所述的方法。
- 一种计算机程序产品,其特征在于,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如权利要求1-11任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP20870174.8A EP3979143A4 (en) | 2019-09-24 | 2020-09-22 | METHOD OF PERFORMING A SPLIT IN A NEURAL NETWORK MODEL USING A MULTI-CORE PROCESSOR AND RELATIVE PRODUCT |
US17/563,034 US20220121903A1 (en) | 2019-09-24 | 2021-12-27 | Method of performing splitting in neural network model by means of multi-core processor, and related product |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910910116.1 | 2019-09-24 | ||
CN201910910116.1A CN110689121A (zh) | 2019-09-24 | 2019-09-24 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US17/563,034 Continuation US20220121903A1 (en) | 2019-09-24 | 2021-12-27 | Method of performing splitting in neural network model by means of multi-core processor, and related product |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2021057722A1 true WO2021057722A1 (zh) | 2021-04-01 |
Family
ID=69110186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2020/116820 WO2021057722A1 (zh) | 2019-09-24 | 2020-09-22 | 用多核处理器实现神经网络模型拆分方法及相关产品 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220121903A1 (zh) |
EP (1) | EP3979143A4 (zh) |
CN (1) | CN110689121A (zh) |
WO (1) | WO2021057722A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115841416A (zh) * | 2022-11-29 | 2023-03-24 | 白盒子(上海)微电子科技有限公司 | 一种用于自动驾驶领域的可重构智能图像处理器架构 |
EP4113390A3 (en) * | 2021-12-31 | 2023-05-03 | Beijing Baidu Netcom Science Technology Co., Ltd. | Method for processing data, and electronic device |
US11983086B2 (en) | 2021-12-31 | 2024-05-14 | Beijing Baidu Netcom Science Technology Co., Ltd. | Method for processing data, and electronic device, storage medium and program product |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110689121A (zh) * | 2019-09-24 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
CN115456161A (zh) * | 2020-03-27 | 2022-12-09 | 华为技术有限公司 | 一种数据处理方法和数据处理系统 |
CN111898698B (zh) * | 2020-08-10 | 2021-07-27 | 腾讯科技(深圳)有限公司 | 对象的处理方法及装置、存储介质和电子设备 |
CN112465122B (zh) * | 2020-12-09 | 2024-05-07 | 安徽寒武纪信息科技有限公司 | 优化神经网络模型中原始维度算子的装置和方法 |
WO2022126316A1 (zh) * | 2020-12-14 | 2022-06-23 | 华为技术有限公司 | 人工智能ai模型的开发方法和装置 |
CN113703768A (zh) * | 2021-07-13 | 2021-11-26 | 清华大学 | 张量程序优化方法及装置 |
CN116880995B (zh) * | 2023-09-08 | 2024-01-09 | 之江实验室 | 一种模型任务的执行方法、装置、存储介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109299142A (zh) * | 2018-11-14 | 2019-02-01 | 中山大学 | 一种基于进化算法的卷积神经网络结构搜索方法及系统 |
CN109657782A (zh) * | 2018-12-14 | 2019-04-19 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110008950A (zh) * | 2019-03-13 | 2019-07-12 | 南京大学 | 一种对形状鲁棒的自然场景中文本检测的方法 |
US20190239095A1 (en) * | 2018-01-26 | 2019-08-01 | Verizon Patent And Licensing Inc. | Automated intelligent self-organizing network for optimizing network performance |
CN110689121A (zh) * | 2019-09-24 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102433254B1 (ko) * | 2015-10-28 | 2022-08-18 | 구글 엘엘씨 | 계산 그래프들 프로세싱 |
CN107862378B (zh) * | 2017-12-06 | 2020-04-24 | 芯原微电子(上海)股份有限公司 | 基于多核的卷积神经网络加速方法及系统、存储介质及终端 |
CN109993299B (zh) * | 2017-12-29 | 2024-02-27 | 中兴通讯股份有限公司 | 数据训练方法及装置、存储介质、电子装置 |
CN110187965B (zh) * | 2019-05-08 | 2021-02-12 | 深圳大学 | 神经网络的运行优化及数据处理方法、设备及存储介质 |
-
2019
- 2019-09-24 CN CN201910910116.1A patent/CN110689121A/zh active Pending
-
2020
- 2020-09-22 EP EP20870174.8A patent/EP3979143A4/en active Pending
- 2020-09-22 WO PCT/CN2020/116820 patent/WO2021057722A1/zh unknown
-
2021
- 2021-12-27 US US17/563,034 patent/US20220121903A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190239095A1 (en) * | 2018-01-26 | 2019-08-01 | Verizon Patent And Licensing Inc. | Automated intelligent self-organizing network for optimizing network performance |
CN109299142A (zh) * | 2018-11-14 | 2019-02-01 | 中山大学 | 一种基于进化算法的卷积神经网络结构搜索方法及系统 |
CN109657782A (zh) * | 2018-12-14 | 2019-04-19 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110008950A (zh) * | 2019-03-13 | 2019-07-12 | 南京大学 | 一种对形状鲁棒的自然场景中文本检测的方法 |
CN110689121A (zh) * | 2019-09-24 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Non-Patent Citations (1)
Title |
---|
See also references of EP3979143A4 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4113390A3 (en) * | 2021-12-31 | 2023-05-03 | Beijing Baidu Netcom Science Technology Co., Ltd. | Method for processing data, and electronic device |
US11983086B2 (en) | 2021-12-31 | 2024-05-14 | Beijing Baidu Netcom Science Technology Co., Ltd. | Method for processing data, and electronic device, storage medium and program product |
CN115841416A (zh) * | 2022-11-29 | 2023-03-24 | 白盒子(上海)微电子科技有限公司 | 一种用于自动驾驶领域的可重构智能图像处理器架构 |
CN115841416B (zh) * | 2022-11-29 | 2024-03-19 | 白盒子(上海)微电子科技有限公司 | 一种用于自动驾驶领域的可重构智能图像处理器架构 |
Also Published As
Publication number | Publication date |
---|---|
US20220121903A1 (en) | 2022-04-21 |
CN110689121A (zh) | 2020-01-14 |
EP3979143A1 (en) | 2022-04-06 |
EP3979143A4 (en) | 2023-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021057713A1 (zh) | 用多核处理器实现神经网络模型拆分方法及相关产品 | |
WO2021057722A1 (zh) | 用多核处理器实现神经网络模型拆分方法及相关产品 | |
WO2021057720A1 (zh) | 神经网络模型处理方法、装置、计算机设备及存储介质 | |
WO2021057746A1 (zh) | 神经网络处理方法、装置、计算机设备及存储介质 | |
US20210295161A1 (en) | Training neural networks represented as computational graphs | |
CN110826708B (zh) | 一种用多核处理器实现神经网络模型拆分方法及相关产品 | |
CN110674936A (zh) | 一种神经网络处理方法、装置、计算机设备及存储介质 | |
US20170024167A1 (en) | Systems and methods for in-line stream processing of distributed dataflow based computations | |
US20210373944A1 (en) | Scheduler, method of operating the same, and accelerator apparatus including the same | |
CN113703775A (zh) | 一种编译方法、装置、设备及存储介质 | |
CN111401538A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN111401539A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
US20210319298A1 (en) | Compute-based subgraph partitioning of deep learning models for framework integration | |
Gadiyar et al. | Artificial Intelligence Software and Hardware Platforms | |
WO2020164644A2 (zh) | 神经网络模型拆分方法、装置、计算机设备和存储介质 | |
CN111401537A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
US20210256373A1 (en) | Method and apparatus with accelerator | |
CN116680063B (zh) | 任务调度方法、装置、计算系统、电子设备和存储介质 | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
US20230334215A1 (en) | Generative self-supervised learning to transform circuit netlists | |
US20230130747A1 (en) | Computer-readable recording medium storing learning program, learning method, and information processing device | |
CN116755714B (zh) | 深度神经网络模型的运行方法、装置、设备和存储介质 | |
US20230297487A1 (en) | Method and apparatus for estimating execution time of neural network | |
WO2020073874A1 (zh) | 机器学习运算的分配系统及方法 | |
Ali et al. | Investigating the Parallel Components of TLD Algorithm Using OpenCL Computation Framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 20870174 Country of ref document: EP Kind code of ref document: A1 |
|
ENP | Entry into the national phase |
Ref document number: 2020870174 Country of ref document: EP Effective date: 20211229 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |