CN110826708A - 一种用多核处理器实现神经网络模型拆分方法及相关产品 - Google Patents
一种用多核处理器实现神经网络模型拆分方法及相关产品 Download PDFInfo
- Publication number
- CN110826708A CN110826708A CN201910914359.2A CN201910914359A CN110826708A CN 110826708 A CN110826708 A CN 110826708A CN 201910914359 A CN201910914359 A CN 201910914359A CN 110826708 A CN110826708 A CN 110826708A
- Authority
- CN
- China
- Prior art keywords
- splitting
- split
- tensor data
- operator
- state
- 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.)
- Granted
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/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/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
Abstract
本申请实施例公开了一种用多核处理器实现神经网络模型拆分方法及相关产品,当神经网络模型中存在可以进行拆分的算子时,对算子进行拆分,并选择最优拆分组合获得整个神经网络模型的最优拆分结果,再由多核并行执行最优拆分结果对应的子算子,达成减少计算机设备的资源消耗的目的。
Description
技术领域
本发明涉及深度学习技术领域,尤其涉及一种用多核处理器实现神经网络 模型拆分方法及相关产品。
背景技术
近年来,神经网络处理器被不断提出,并如同通用处理器一样,正在由单 核向多核扩展。这种扩展后的多核结构可以在训练阶段支持数据并行的方式来 提高数据吞吐量,加快训练速度。然而,在推理阶段,相比吞吐量深度神经网 络对端到端的时延有着更高的要求,这往往决定了加速器在某个场景下的可用 性。传统的数据并行方案不能满足推理场景下对加速器小数据、低延迟的要求。
发明内容
为了解决上述所述的技术问题,本申请实施例提供一种用多核处理器实现 神经网络模型拆分方法及相关产品。
第一方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分 方法,该方法包括:
根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相 关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输 出张量数据;
遍历所述拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据 的拆分路径以及所述拆分路径的权重;
根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径, 其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一 条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对 应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;
根据所述目标拆分路径对所述计算图中的目标算子的张量数据进行拆分, 以分配到多核处理器的对应核进行处理。
在一个可行的示例中,确定所述目标算子的张量数据的目标拆分路径的步 骤包括:
遍历所述目标算子相关联的张量数据的拆分状态集合,对当前拆分状态集 合,遍历每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边 的起点对应的拆分状态到所述目标算子相关联的输入张量数据的拆分状态之间 的拆分路径;
根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子 的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所 述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径 的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张 量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的 目标拆分方式。
在一个可行的示例中,所述确定所述目标算子的张量数据的目标拆分路径, 包括:
遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一 拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对 应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算 子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到 所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路 径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张 量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的 目标拆分路径。
在一个可行的示例中,所述当所述多条拆分路径对应两个以上拆分状态集 合时,仅保留所述目标拆分路径对应的拆分状态,包括:
当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子 具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保 留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。
在一个可行的示例中,所述当所述多条拆分路径对应两个以上拆分状态集 合时,仅保留所述目标拆分路径对应的拆分状态,包括:
当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分 状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确 定。
在一个可行的示例中,所述目标算子相关联的输入张量数据的拆分状态集 合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合 中的拆分状态确定。
在一个可行的示例中,所述目标算子相关联的输出张量数据的拆分状态集 合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合 中的拆分状态确定。
在一个可行的示例中,所述有向边的权重根据所述拆分路径对应的所述算 子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的 数据规模、每个处理器核的吞吐率和访存带宽确定。
第二方面,本申请实施例提供了一种用多核处理器实现神经网络模型拆分 装置,该装置可以包括:
第一确定单元,用于根据所述神经网络模型对应计算图中的目标算子,确 定与所述目标算子相关联的张量数据的拆分状态集合;其中,所述张量数据包 括输入张量数据和输出张量数据;
遍历单元,用于遍历所述拆分状态集合,确定相邻拆分状态集合之间所述 算子的张量数据的拆分路径以及所述拆分路径的权重;
第二确定单元,用于根据所述拆分路径的权重,确定所述目标算子的张量 数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应 的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时, 对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状 态;
拆分单元,用于根据所述目标拆分路径对所述计算图中的目标算子的张量 数据进行拆分,以分配到多核处理器的对应核进行处理。
在一个可行的示例中,所述第二确定单元具体用于:
遍历所述目标算子相关联的张量数据的拆分状态集合,对当前拆分状态集 合,遍历其中的每一拆分状态,获得所有指向当前拆分状态的有向边以及所述 有向边的起点对应的拆分状态到所述目标算子相关联的输入张量数据的拆分状 态之间的拆分路径;
根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子 的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所 述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径 的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张 量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的 目标拆分路径。
在一个可行的示例中,所述第二确定单元具体用于:
遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一 拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对 应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算 子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到 所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路 径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张 量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的 目标拆分路径。
在一个可行的示例中,在当所述多条拆分路径对应两个以上拆分状态集合 时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元具体用 于:
当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子 具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保 留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。
在一个可行的示例中,在当所述多条拆分路径对应两个以上拆分状态集合 时,仅保留所述目标拆分路径对应的拆分状态方面,所述第二确定单元具体用 于:
当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分 状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确 定。
在一个可行的示例中,所述目标算子相关联的输入张量数据的拆分状态集 合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合 中的拆分状态确定。
在一个可行的示例中,所述目标算子相关联的输出张量数据的拆分状态集 合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合 中的拆分状态确定。
在一个可行的示例中,所述有向边的权重根据所述拆分路径对应的所述算 子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的 数据规模、每个处理器核的吞吐率和访存带宽确定。
为实现上述目的,第三方面,本申请实施例提供了一种计算机设备,包括 多个异构处理器和存储器,所述处理器和存储器相互连接,其中,所述多个异 构处理器包括通用处理器和人工智能处理器,所述存储器用于存储支持计算机 设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器 被配置用于调用所述程序指令,执行上述第一方面的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机存 储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被 处理器执行时使所述处理器执行上述第一方面的方法。
第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程 序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方 法。
实施本申请实施例,计算机设备通过对神经网络模型对应计算图中算子关 联的张量数据进行拆分,获得张量数据对应的拆分状态集合,再确定相邻拆分 状态集合之间张量数据的拆分路径和拆分路径的权重,确定目标算子张量数据 的目标拆分路径,其中在确定目标拆分路径时,对拆分状态集合进行反向优化; 最后根据目标拆分路径对计算图的目标算子相关联的张量数据进行拆分,以分 匹配到多核处理器的对应核进行处理。在这个过程中,通过对算子关联的张量 数据进行拆分达到减小算子运算数据规模的目的,再根据张量数据对应的拆分 状态之间的拆分路径选择,进一步优化张量数据的拆分方式,另外,在选择拆 分路径的同时对拆分状态集合也进行优化,减少决策分支,提升神经网络模型 的执行效率。最后拆分获得的张量数据分配至多核处理器上,使得多核处理器 中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网络模型在 多核处理器上的端到端时延。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要 使用的附图作简单地介绍。
图1A是人工智能处理器的软件栈结构示意图;
图1B为本申请实施例提供的一种基于计算图的算子拆分示意图;
图1C~图1H为卷积算子在并行度为2的条件下的对应拆分方式示意图;
图2为本申请实施例提供的一种计算机设备的结构示意图;
图3为本申请实施例提供的一种用多核处理器实现神经网络模型拆分方法 的流程示意图;
图4为本申请实施例提供的一种神经网络模型中的算子连接关系示意图;
图5为本申请实施例提供的一种卷积算子拆分示意图;
图6为本申请实施例提供的一种拆分状态集合示意图;
图7为本申请实施例提供的一种深度残差网络中的残差块示意图;
图8为本申请实施例提供的一种目标算子的拆分示意图;
图9为本申请实施例提供的一种多张量数据对应的拆分状态集合示意图;
图10为本申请实施例提供的一种用多核处理器实现神经网络模型拆分装置 的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描 述。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”和“第 三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利 要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素 和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、 组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施 例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用 的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该” 意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用 的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能 组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被 解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如 果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一 旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到 [所描述条件或事件]”。
为了便于更好的理解本申请所描述的技术方案,下面先解释本申请实施例 所涉及的技术术语:
(1)张量(tensor)
在本技术方案中,张量仅仅是对存储的一块数据的特征描述,张量记录了 数据的形状、类型等信息。
本申请实施例中,张量应该理解为张量数据,可以包括神经网络模型中输 入张量数据、输出张量数据,也可以包括特征张量数据等。
以人工智能深度学习框架TensorFlow为例,一般使用阶(rank),形状(shape) 和维数(dimension number)来描述张量的维度,其关系可以表示为表1所示:
表1
阶 | 形状 | 维数 | 例子 |
0 | [] | 0-D | 4 |
1 | [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,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经过拆分成为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可以是中央处理单元(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、遍历所述拆分状态集合,确定相邻拆分状态集合之间所述目标算 子的张量数据的拆分路径以及所述拆分路径的权重。
得到目标算子关联的张量数据对应的拆分状态集合后,遍历拆分状态集合, 确定相邻拆分状态集合之间的拆分路径,路径表示输入张量数据到输出张量数 据的中间过程,拆分路径表示相邻拆分状态集合之间拆分状态到拆分状态的中 间过程。
请参阅图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所示的计算机设备所用的计算机软件指令,其包含用于执 行上述方法实施例所涉及的程序。通过执行存储的程序,对神经网络模型对应 计算图中目标算子关联的张量数据进行拆分,获得张量数据对应的拆分状态集 合,再确定相邻拆分状态集合之间张量数据的拆分路径和拆分路径的权重,确 定目标算子的张量数据的目标拆分路径,最后根据目标拆分路径对计算图的目 标算子的张量数据进行拆分,以分匹配到多核处理器的对应核进行处理。在这 个过程中,通过对目标算子关联的张量数据进行拆分达到减小算子运算数据规 模的目的,再根据张量数据对应的拆分状态之间的拆分路径选择,进一步优化 张量数据的拆分方式。最后拆分获得的张量数据分配至多核处理器上,使得多 核处理器中的每个核的硬件资源都能有效利用,该方案能有效降低各种神经网 络模型在多核处理器上的端到端时延。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计 算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结 合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包 含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和 光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品 的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方 框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。 可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他 可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程 数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程 和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备 以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的 指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流 程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使 得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理, 从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程 或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
Claims (11)
1.一种用多核处理器实现神经网络模型拆分方法,其特征在于,所述方法包括:
根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输出张量数据;
遍历所述拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径以及所述拆分路径的权重;
根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;
根据所述目标拆分路径对所述计算图中的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
2.根据权利要求1所述的方法,其特征在于,确定所述目标算子的张量数据的目标拆分路径的步骤包括:
遍历所述目标算子相关联的张量数据的拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有指向当前拆分状态的有向边以及所述有向边的起点对应的拆分状态到所述目标算子相关联的输入张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边对应的起始拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输入张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分方式。
3.根据权利要求1所述的方法,其特征在于,所述确定所述目标算子的张量数据的目标拆分路径,包括:
遍历所述目标算子的所有拆分状态集合,对当前拆分状态集合,遍历每一拆分状态,获得所有以当前拆分状态为起点的有向边以及所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;
根据所述有向边的权重和所述有向边的终点对应的拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径的权重确定所述当前拆分状态到所述目标算子的输出张量数据的拆分状态之间的拆分路径;其中,所述拆分路径的权重根据所述拆分路径对应的所有有向边的权重确定;
遍历完所述目标算子的所有拆分状态集合后,获得所述目标算子的输入张量数据的拆分状态集合与所述目标算子的输出张量数据的拆分状态集合之间的目标拆分路径。
4.根据权利要求2所述的方法,其特征在于,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:
当前算子的输出张量数据被至少两个算子作为输入张量数据,或当前算子具有至少两个输出张量数据时,当前算子的输出张量数据的拆分状态集合中保留一个拆分状态,且保留的拆分状态经由当前算子的同一有向边确定。
5.根据权利要求3所述的方法,其特征在于,所述当所述多条拆分路径对应两个以上拆分状态集合时,仅保留所述目标拆分路径对应的拆分状态,包括:
当前算子具有至少两个输入张量数据时,当前算子的输入张量数据的拆分状态集合中保留一个拆分状态,且所述拆分状态经由所述算子的同一有向边确定。
6.根据权利要求1所述的方法,其特征在于,所述目标算子相关联的输入张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输出张量数据的拆分状态集合中的拆分状态确定。
7.如权利要求1所述的方法,其特征在于,所述目标算子相关联的输出张量数据的拆分状态集合中的拆分状态根据所述算子的运算逻辑和对应输入张量数据的拆分状态集合中的拆分状态确定。
8.如权利要求2或3所述的方法,其特征在于,所述有向边的权重根据所述拆分路径对应的所述算子的运算操作类型、所述算子的张量数据经所述拆分路径获取的对应子数据的数据规模、每个处理器核的吞吐率和访存带宽确定。
9.一种用多核处理器实现神经网络模型拆分装置,其特征在于,所述装置包括:
第一确定单元,用于根据所述神经网络模型对应计算图中的目标算子,确定与所述目标算子相关联的张量数据的拆分状态集合;其中,所述张量数据包括输入张量数据和输出张量数据;
遍历单元,用于遍历所述拆分状态集合,确定相邻拆分状态集合之间所述算子的张量数据的拆分路径以及所述拆分路径的权重;
第二确定单元,用于根据所述拆分路径的权重,确定所述目标算子的张量数据的目标拆分路径,其中所述目标拆分路径为所述目标算子的张量数据对应的多条拆分路径中的一条,当所述多条拆分路径对应两个以上拆分状态集合时,对于输入张量数据对应拆分状态集合,仅保留所述目标拆分路径对应的拆分状态;
拆分单元,用于根据所述目标拆分路径对所述计算图中的目标算子的张量数据进行拆分,以分配到多核处理器的对应核进行处理。
10.一种计算机设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-8任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910914359.2A CN110826708B (zh) | 2019-09-24 | 2019-09-24 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910914359.2A CN110826708B (zh) | 2019-09-24 | 2019-09-24 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110826708A true CN110826708A (zh) | 2020-02-21 |
CN110826708B CN110826708B (zh) | 2022-05-31 |
Family
ID=69548402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910914359.2A Active CN110826708B (zh) | 2019-09-24 | 2019-09-24 | 一种用多核处理器实现神经网络模型拆分方法及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110826708B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111738276A (zh) * | 2020-06-19 | 2020-10-02 | 浪潮(北京)电子信息产业有限公司 | 基于多核卷积神经网络的图像处理方法、装置及设备 |
CN112101529A (zh) * | 2020-10-14 | 2020-12-18 | 杭州海康威视数字技术股份有限公司 | 一种用于神经网络模型推理跨平台的部署方法及架构 |
CN113268269A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对动态规划算法的加速方法、系统及装置 |
WO2021243490A1 (zh) * | 2020-05-30 | 2021-12-09 | 华为技术有限公司 | 一种处理器、处理方法及相关设备 |
WO2022021073A1 (zh) * | 2020-07-28 | 2022-02-03 | 嘉楠明芯(北京)科技有限公司 | 神经网络模型的多算子运算方法以及装置 |
WO2022126316A1 (zh) * | 2020-12-14 | 2022-06-23 | 华为技术有限公司 | 人工智能ai模型的开发方法和装置 |
CN116303108A (zh) * | 2022-09-07 | 2023-06-23 | 芯砺智能科技(上海)有限公司 | 一种适用于并行计算架构的卷积神经网络权重地址排布方法 |
CN116362316A (zh) * | 2023-05-29 | 2023-06-30 | 成都阿加犀智能科技有限公司 | 一种模型转换方法、装置、存储介质及电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6311265B1 (en) * | 1996-03-25 | 2001-10-30 | Torrent Systems, Inc. | Apparatuses and methods for programming parallel computers |
CN107451653A (zh) * | 2017-07-05 | 2017-12-08 | 深圳市自行科技有限公司 | 深度神经网络的计算方法、装置及可读存储介质 |
CN107832839A (zh) * | 2017-10-31 | 2018-03-23 | 北京地平线信息技术有限公司 | 执行卷积神经网络中的运算的方法和装置 |
CN109472356A (zh) * | 2018-12-29 | 2019-03-15 | 南京宁麒智能计算芯片研究院有限公司 | 一种可重构神经网络算法的加速装置及方法 |
CN109885406A (zh) * | 2019-02-27 | 2019-06-14 | 上海燧原智能科技有限公司 | 算子计算优化方法、装置、设备及存储介质 |
CN109993299A (zh) * | 2017-12-29 | 2019-07-09 | 中兴通讯股份有限公司 | 数据训练方法及装置、存储介质、电子装置 |
KR20190091858A (ko) * | 2018-01-29 | 2019-08-07 | 주식회사 유엑스팩토리 | Cnn과 rnn이 하나의 고성능 저전력 칩으로 집적된 이기종 프로세서 구조 |
-
2019
- 2019-09-24 CN CN201910914359.2A patent/CN110826708B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6311265B1 (en) * | 1996-03-25 | 2001-10-30 | Torrent Systems, Inc. | Apparatuses and methods for programming parallel computers |
CN107451653A (zh) * | 2017-07-05 | 2017-12-08 | 深圳市自行科技有限公司 | 深度神经网络的计算方法、装置及可读存储介质 |
CN107832839A (zh) * | 2017-10-31 | 2018-03-23 | 北京地平线信息技术有限公司 | 执行卷积神经网络中的运算的方法和装置 |
CN109993299A (zh) * | 2017-12-29 | 2019-07-09 | 中兴通讯股份有限公司 | 数据训练方法及装置、存储介质、电子装置 |
KR20190091858A (ko) * | 2018-01-29 | 2019-08-07 | 주식회사 유엑스팩토리 | Cnn과 rnn이 하나의 고성능 저전력 칩으로 집적된 이기종 프로세서 구조 |
CN109472356A (zh) * | 2018-12-29 | 2019-03-15 | 南京宁麒智能计算芯片研究院有限公司 | 一种可重构神经网络算法的加速装置及方法 |
CN109885406A (zh) * | 2019-02-27 | 2019-06-14 | 上海燧原智能科技有限公司 | 算子计算优化方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
NARAYANAN SUNDARAM 等: "A framework for efficient and scalable execution of domain-specific templates on GPUs", 《2009 IEEE INTERNATIONAL SYMPOSIUM ON PARALLEL & DISTRIBUTED PROCESSING》 * |
张潇 等: "面向多核处理器的机器学习推理框架", 《计算机研究与发展》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021243490A1 (zh) * | 2020-05-30 | 2021-12-09 | 华为技术有限公司 | 一种处理器、处理方法及相关设备 |
US12086592B2 (en) | 2020-05-30 | 2024-09-10 | Huawei Technologies Co., Ltd. | Processor, processing method, and related device for accelerating graph calculation |
CN111738276A (zh) * | 2020-06-19 | 2020-10-02 | 浪潮(北京)电子信息产业有限公司 | 基于多核卷积神经网络的图像处理方法、装置及设备 |
WO2022021073A1 (zh) * | 2020-07-28 | 2022-02-03 | 嘉楠明芯(北京)科技有限公司 | 神经网络模型的多算子运算方法以及装置 |
CN112101529A (zh) * | 2020-10-14 | 2020-12-18 | 杭州海康威视数字技术股份有限公司 | 一种用于神经网络模型推理跨平台的部署方法及架构 |
WO2022126316A1 (zh) * | 2020-12-14 | 2022-06-23 | 华为技术有限公司 | 人工智能ai模型的开发方法和装置 |
CN113268269A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对动态规划算法的加速方法、系统及装置 |
CN113268269B (zh) * | 2021-06-07 | 2022-10-14 | 中科计算技术西部研究院 | 一种针对动态规划算法的加速方法、系统及装置 |
CN116303108A (zh) * | 2022-09-07 | 2023-06-23 | 芯砺智能科技(上海)有限公司 | 一种适用于并行计算架构的卷积神经网络权重地址排布方法 |
CN116303108B (zh) * | 2022-09-07 | 2024-05-14 | 芯砺智能科技(上海)有限公司 | 一种适用于并行计算架构的权重地址排布方法 |
CN116362316A (zh) * | 2023-05-29 | 2023-06-30 | 成都阿加犀智能科技有限公司 | 一种模型转换方法、装置、存储介质及电子设备 |
CN116362316B (zh) * | 2023-05-29 | 2023-12-12 | 成都阿加犀智能科技有限公司 | 一种模型转换方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110826708B (zh) | 2022-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110633153A (zh) | 一种用多核处理器实现神经网络模型拆分方法及相关产品 | |
CN110826708B (zh) | 一种用多核处理器实现神经网络模型拆分方法及相关产品 | |
CN110689115B (zh) | 神经网络模型处理方法、装置、计算机设备及存储介质 | |
CN110689121A (zh) | 一种用多核处理器实现神经网络模型拆分方法及相关产品 | |
CN110674936A (zh) | 一种神经网络处理方法、装置、计算机设备及存储介质 | |
US20210350233A1 (en) | System and Method for Automated Precision Configuration for Deep Neural Networks | |
EP3788559A1 (en) | Quantization for dnn accelerators | |
Daghero et al. | Energy-efficient deep learning inference on edge devices | |
US20210373944A1 (en) | Scheduler, method of operating the same, and accelerator apparatus including the same | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
US12079734B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
Gadiyar et al. | Artificial intelligence software and hardware platforms | |
Choudhary et al. | Accelerating data mining workloads: current approaches and future challenges in system architecture design | |
EP4009240A1 (en) | Method and apparatus for performing deep learning operations | |
US20220343145A1 (en) | Method and system for graph neural network acceleration | |
Zhu et al. | Sky Computing: Accelerating Geo-distributed Computing in Federated Learning | |
Wu et al. | Accelerating deep convolutional neural network inference based on OpenCL | |
US11809849B1 (en) | Global modulo allocation in neural network compilation | |
CN116755714B (zh) | 深度神经网络模型的运行方法、装置、设备和存储介质 | |
CN117992242B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
US20240256901A1 (en) | Information processing apparatus, information processing method and non-transitory computer-readable storage medium | |
US20240144051A1 (en) | Hardware-aware generation of machine learning models | |
US20220075645A1 (en) | Operation method of host processor and accelerator, and electronic device including the same | |
US20230185527A1 (en) | Method and apparatus with data compression | |
Vasilciuc | Data Visualization for Benchmarking Neural Networks in Different Hardware Platforms |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200911 Address after: Room 611-194, R & D center building, China (Hefei) international intelligent voice Industrial Park, 3333 Xiyou Road, hi tech Zone, Hefei City, Anhui Province Applicant after: Anhui Cambrian Information Technology Co., Ltd Address before: 201306 floor 6, block B, 168 Tonghui Road, Pudong New Area, Shanghai. Applicant before: Shanghai Cambricon Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |