CN110689116A - 一种神经网络剪枝方法、装置、计算机设备及存储介质 - Google Patents

一种神经网络剪枝方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN110689116A
CN110689116A CN201910914712.7A CN201910914712A CN110689116A CN 110689116 A CN110689116 A CN 110689116A CN 201910914712 A CN201910914712 A CN 201910914712A CN 110689116 A CN110689116 A CN 110689116A
Authority
CN
China
Prior art keywords
subgraph
operators
original
pruning
operator
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
Application number
CN201910914712.7A
Other languages
English (en)
Other versions
CN110689116B (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anhui Cambricon Information Technology Co Ltd
Original Assignee
Shanghai Cambricon Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Cambricon Information Technology Co Ltd filed Critical Shanghai Cambricon Information Technology Co Ltd
Priority to CN201910914712.7A priority Critical patent/CN110689116B/zh
Publication of CN110689116A publication Critical patent/CN110689116A/zh
Application granted granted Critical
Publication of CN110689116B publication Critical patent/CN110689116B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Machine Translation (AREA)

Abstract

本申请实施例公开了一种神经网络剪枝方法、装置、计算机设备及存储介质,可以对运行在人工智能处理器上的算子对应的计算图进行剪枝,提高异构系统并行执行神经网络计算任务的效率。

Description

一种神经网络剪枝方法、装置、计算机设备及存储介质
技术领域
本申请涉及信息处理技术领域,尤其涉及一种神经网络剪枝方法、装置、计算机设备及存储介质。
背景技术
现有技术中,在执行一个运行在异构系统(其中,异构系统包括人工智能处理器和通用处理器)上的神经网络计算任务时,通用处理器会将在人工智能处理器上执行的子图里的大量算子编译优化成一个内核函数。具体地,该内核函数作为人工智能处理器上执行的算子与通用处理器上执行的算子一起参与调度。此时,如果神经网络计算任务对应的计算图中的子图划分不合理,造成运行在人工智能处理器上的子图与运行在异构系统中其他设备上的子图之间产生依赖关系,这将影响调度执行阶段异构系统并行执行的效率。那么,如何提高异构系统并行执行神经网络计算任务的效率是亟需解决的技术问题。
发明内容
本申请实施例提供一种神经网络剪枝方法、装置、计算机设备及存储介质,可以避免运行在人工智能处理器上的子图与运行在通用处理器上的子图之间产生依赖关系,可以提高异构系统并行执行神经网络计算任务的效率。
为实现上述目的,第一方面,本申请实施例提供了一种神经网络剪枝方法,所述方法包括:
获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,第一类算子对应的操作指令能够运行在人工智能处理器上;
根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
为实现上述目的,第二方面,本申请实施例提供了一种神经网络剪枝装置,所述剪枝装置包括:
获取单元,用于获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,第一类算子对应的操作指令能够运行在人工智能处理器上;
提取原始子图单元,用于根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
剪枝单元,用于对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
执行单元,用于获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
为实现上述目的,第三方面,本申请实施例提供了一种计算机设备,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储支持计算机设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。
为实现上述目的,第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
为实现上述目的,第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
实施本申请实施例,计算机设备通过对运行在人工智能处理器上的神经网络对应的计算图进行剪枝,以使剪枝后的子图包含一个输入算子和一个输出算子,可以避免运行在人工智能处理器上的子图与运行在通用处理器上的子图之间产生依赖关系,可以提高异构系统并行执行神经网络计算任务的效率。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1是本申请实施例提供的一种人工智能处理器的软件栈的结构示意图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种神经网络剪枝方法的流程示意图;
图4是本申请实施例提供的一种神经网络模型的计算图的结构示意图;
图5是本申请实施例提供的一种凸子图和非凸子图的结构示意图;
图6A是本申请实施例提供的一种在第二类算子对应的计算图中提取的原始子图的结构示意图;
图6B是本申请实施例提供的另一种在第二类算子对应的计算图中提取的原始子图的结构示意图;
图6C是本申请实施例提供的一种剪枝后的子图的结构示意图;
图6D是本申请实施例提供的另一种剪枝后的子图的结构示意图;
图6E是本申请实施例提供的一种对神经网络模型的计算图进行剪枝后的子图的结构示意图;
图6F是本申请实施例提供的一种未对神经网络模型的计算图进行剪枝的子图的结构示意图;
图7是本申请实施例提供的一种神经网络剪枝装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应当理解,本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
为了便于更好的理解本申请所描述的技术方案,下面先解释本申请实施例所涉及的技术术语:
(1)计算图
计算图是使用图结构对计算过程进行描述的一种方式。如果计算有明显的模块性,并且模块之间有明显的时间上和逻辑上的依赖关系,通常可以使用有向图结构来进行描述。在实际应用中,图结构的基本元素有两个,分别为节点和有向边。在实际应用中,神经网络抽象为张量数据和算子所组成的有向图结构。节点又称为算子。
一般来说,对神经网络模型使用计算图的方式进行描述,有利于对整个神经网络计算任务进行整体的把握,与此同时,计算图的表达方式也方便对计算任务进行调度和并行执行。
(2)人工智能处理器的软件栈:
参见图1,该软件栈结构10包括人工智能应用100、人工智能框架102、人工智能学习库104、人工智能运行时库106以及驱动108。接下来对其进行具体阐述:
人工智能应用100对应不同的应用场景,提供对应的人工智能算法模型。该算法模型可以直接被人工智能框架102的编程接口解析,在其中一个可能的实现方式中,通过人工智能学习库104将神经网络模型转换为二进制指令,调用人工智能运行时库106对二进制指令转换为人工智能学习任务,将该人工智能学习任务放在任务队列中,由驱动108调度任务队列中的人工智能学习任务让底层的人工智能处理器执行。
(3)子图提取
异构系统包括人工智能处理器和通用处理器,在实际应用中,通用处理器可以对神经网络模型进行编译,生成对应的机器学习任务二进制指令,该二进制指令可以运行在人工智能处理器上。因此,深度学习框架(例如,Caffe)首先需要从完整的神经网络计算图中抽取出特定的子图,这些子图中的算子将全部被放置于人工智能处理器上执行。子图继续被人工智能处理器的软件栈编译优化得到整个子图对应的融合内核函数。
在本申请实施例中,在提取子图的过程中,首先要保证把计算图中的子图融合成一个节点后,不会再原有的计算图中引入环。其原因在于,环将导致计算图中的算子在拓扑关系上相互依赖。
(4)依赖关系
在本申请实施例中,算子A依赖于算子B,表示算子A在开始它自己的计算任务前必须等待算子B对应的内核函数执行完毕。而如果算子B由于子图融合的原因被包含在一个子图S中,算子A必须等到S中的所有算子的计算任务全部执行完毕,才能开始执行自己的内核函数。
(5)深度学习框架
顾名思义,深度学习框架是指用于深度学习的框架。具体来说,由图1可知,深度学习框架是人工智能处理器的软件栈中的第一层,用来沟通深度学习应用和下层格式各样的深度学习计算平台。
现有中,深度学习框架普遍采用计算图作为描述神经网络模型的主要数据结构,在此基础上,采用以算子为粒度,或者是跨算子的粒度来完成计算图向底层核函数的映射。同时,深度学习框架可以采用包括直接使用编程语言或者调用底层计算库的方式来实现具体的核函数。
在本申请实施例中,深度学习框架可以包括但不限于:谷歌张量流图Tensorflow、卷积神经网络框架Caffe(Convolutional Architecture for Fast Feature Embedding)、MXNet、Torch等等。
以Caffe为例,Caffe支持多种类型的深度学习架构、面向图像分类和图像分割,还可以支持卷积神经网络(Convolutional Neural Networks,CNN)、用于目标检测的卷积神经网络(Region-CNN,RCNN)、长短期记忆神经网络(Long Short-Term Memory,LSTM)和全连接神经网络设计。
在本申请实施例中,Caffe框架可以支持多种类型的基本算子,具体地,这里所涉及的多种类型的基本算子可以包括:常见的神经网络算子。例如,常见的神经网络算子有:卷积/反卷积算子,池化算子,激活算子、softmax(分类器)算子,全连接算子。其中,激活算子可以包括但不限于ReLU、Sigmoid、Tanh以及其他可以用插值方式实现的算子。
在本申请实施例中,Caffe框架下的函数可以包括:Caffe Blob函数、Caffe Layer函数和Caffe Net函数。其中,Blob用于存储、交换和处理网络中正向和反向迭代的数据和导数信息;Layer用于执行计算,可以包括卷积(convolve)、池化(pool)、内积(innerproduct)、rectified-linear和sigmoid等非线性运算,还可以包括元素级的数据变换、归一化(normalize)、数据加载(load data)、分类(softmax)和hinge等损失计算(losses)。
具体实现中,每个Layer都定义了3种重要的运算,这3种运算为初始化设置(setup),前向传播(forward),反向传播(backward)。其中,setup用于模型初始化时重置layers及互相之间的连接;forward用于从底部(bottom)层中接受输入数据,计算后输出送到顶部(top)层;backward用于给定top层的输出梯度,计算其输入的梯度,并传递到bottom层。例如,Layer可以包括Date Layer、Convolution Layers、Pooling Layer、InnerProductLayer、ReLU Layer、Sigmoid Layer、LRN Layer、Dropout Layer、SoftmaxWithLoss Layer、Softmax Layer、Accuracy Layers等。一个Net开始于data layer,也即从磁盘中加载数据,终止于loss layer,也即计算如分类和重构这些任务的目标函数。具体来说,Net是由一系列层组成的有向无环计算图,Caffe保留了计算图中所有的中间值以确保前向和反向迭代的准确性。
(5)人工智能处理器
人工智能处理器,也称之为专用处理器,在本申请实施例中,人工智能处理器是指针对特定应用或者领域的处理器。例如:图形处理器(GPU,Graphics Processing Unit),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上进行图像运算工作的专用处理器。又例如:神经网络处理器(NPU,Neural Processing Unit),是一种在人工智能领域的应用中针对矩阵乘法运算的专用处理器,采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。
参见图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)、随机存取存储器(RandomAccess Memory,RAM)或其他存储器。本申请实施例中,存储器202用于存储数据以及执行图3所示的神经网络剪枝方法对应的软件程序,例如本申请实施例中对满足剪枝条件的原始子图进行剪枝,以使剪枝后的每个子图包含一个输入算子和一个输出算子的程序等。
可选的,在本申请实施例中,所述存储器可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方法的媒体加以存储。本实施方式所述的存储器又可以包括:利用电能方式存储信息的装置,如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所示的本申请实施例提供的一种神经网络剪枝方法的流程示意图,具体说明在本申请实施例中是如何实现神经网络模型的计算图的剪枝的,可以包括但不限于如下步骤:
步骤S300、获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上。
在本申请实施例中,第一类算子是指可以运行在人工智能处理器上的算子。例如,第一类算子可以包括人工智能处理器所支持的元算子。具体地,在本申请实施例中,元算子可以包括但不限于:卷积/反卷积算子、池化算子、激活算子、局部响应归一化LRN(LRN,Local Response Normalization)/批规范化算子、分类器(Softmax)算子、全连接算子等。其中,激活算子可以包括但不限于ReLU、Sigmoid、Tanh以及其他可以用插值方式实现的算子。
在本申请实施例中,第二类算子是指可以运行在通用处理器上的算子。例如,第二类算子可以包括新开发的算子,这类算子运行在通用处理器上的原因在于:在实际应用中,有可能人工智能处理器的软件栈的人工智能学习库没有及时支持该类算子,使得人工智能处理器无法获得该算子对应的二进制指令;又例如,由于算子本身没有包含可以进行并行加速的计算逻辑,而是包含了很多条件跳转以及其他符合通用处理器特点的计算逻辑,在这种情况下,将这类算子运行在通用处理器上。可以理解的是,将第二类算子运行在通用处理器进行计算时,可以提高神经网络模型的运行速度。
在本申请实施例中,计算机设备可以获取神经网络模型的模型文件,其中,模型文件包括多个算子和各算子之间的连接关系;继而,计算机设备可以根据该模型文件构建神经网络模型的原始计算图。在实际应用中,在一种可能的实现方式中,神经网络模型中包含第一类算子和第二类算子,那么,构建得到的原始计算图中包括第一类算子对应的计算图和第二类算子对应的计算图。在另一种可能的实现方式中,神经网络模型中仅仅包含第一类算子,那么,构建的原始计算图中仅包含第一类算子对应的计算图。例如,计算机设备获取的神经网络模型的原始计算图可以如图4所示,其中,NNP1-NNP7(NNP,全称:NeuralNetwork Processor)表示运行在人工智能处理器上的算子,CPU(全称:CentralProcessing Unit)表示运行在通用处理器上的算子。
步骤S302、根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;原始子图构成原始子图集合。
在本申请实施例中,计算机设备中的通用处理器在第一类算子对应的计算图中提取的原始子图可以为1个,也可以为多个,例如,4个,等等。
在其中一种可能的实现方式中,所述在所述第一类算子对应的计算图中提取M个原始子图,包括:
根据子图提取规则在所述第一类算子对应的计算图中提取M个原始子图。
如前所述,在提取子图的过程中,首先要保证当把计算图中的子图融合成一个节点后,不会再原有的计算图汇总不会引入环。其原因在于,环将导致计算图中的算子在拓扑关系上相互依赖。
具体地,对深度学习框架,比如MXNet来说,有环的图结构会引起框架后端的调度引擎在调度算子执行时产生死锁,因为调度引擎要安排某个算子对应的内核函数开始执行,必须保证该算子在计算图中所依赖的算子已经执行完毕。
在实际应用中,可以使用凸性(Convex)作为保证非死锁的一个等价约束。如图5所示,有向图G中的子图S被称为是凸的,当且仅当对S中的任意两个节点都不存在一条经过S之外的节点的路径。任何打破了凸性的子图,必然存在外部的部分节点依赖于子图里面的一些节点,同时子图内部的其他一些节点又依赖于这些外部的节点,从而引起调度的死锁。
进一步地,在凸性之外,子图应当保证连通性。有向图G中的子图S成为连通的,当且仅当把S中的有向边视作无向边前提下S是一个连通图。
在实际应用中,在子图提取过程中,还应该保证提取的子图尽可能大。这一原则基于两个直观上的判断:一个极大的子图能够保证为下层软件栈提供尽可能大的搜索和优化空间;一个极大的子图能够最大程度上减少内核函数的启动开销。
在本申请实施例中,在第一类算子对应的计算图中提取到的原始子图可以包括以下多种情形:
第一种情形:原始子图中包含一个输入算子和多个输出算子。例如,如图6A所示,提取到的原始子图中包含一个输入算子和两个输出算子。
第二种情形:原始子图中包含多个输入算子和一个输出算子。例如,如图6B所示,提取到的原始子图中包含两个输入算子和一个输出算子。
第三种情形:原始子图中包含多个输入算子和多个输出算子。
第四种情形:原始子图中包含一个输入算子。
第五种情形:原始子图中包含一个输出算子。
需要说明的是,由于原始子图的表现形式具有多样性,上述举例只是一种示例,不应构成限定。
在本申请实施例中,以图4所示的神经网络模型的计算图为例,计算机设备在第一类算子对应的计算图中提取到的子图包括图6A所示的原始子图和图6B所示的原始子图。
步骤S304、对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子。
具体实现中,所述对所述原始子图进行剪枝,得到对应的剪枝结果子图,包括:
所述原始子图中包含一个输入算子和多个输出算子、多个输入算子和一个输出算子、多个输入算子和多个输出算子中的至少一种的情况下,对所述原始子图进行迭代剪枝,得到剪枝结果子图。
在本申请实施例中,出于便于阐述的目的,将原始子图中包含一个输入算子和多个输出算子;原始子图中包含多个输入算子和一个输出算子;多个输入算子和多个输出算子这三种情形定义为不同的剪枝条件。那么,当处理器确定原始子图满足剪枝条件中的至少一种情况时,对原始子图进行剪枝。
在本申请实施例中,当计算机设备在第一类算子对应的计算图中提取的原始子图为多个的情况下,在一种可能的实现方式中,计算机设备可以对这多个原始子图中的一个原始子图进行剪枝;在一种可能的实现方式中,计算机设备也可以对这多个原始子图中的多个原始子图进行剪枝,例如,计算机设备对这多个原始子图中的每一个原始子图进行剪枝,本申请实施例不作具体限定。
在本申请实施例中,通用处理器对原始子图进行剪枝的过程为迭代剪枝的过程。具体来说,迭代是计算机程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。
在本申请实施例中,在对原始子图进行迭代剪枝的过程中,以原始子图中包含一个输入算子和多个输出算子为例,例如,多个输出算子为输出算子1、输出算子2和输出算子3,通用处理器根据原始子图中算子之间具有的有向边,在同一原始子图中,以原始子图的输出算子1为起始点,反向遍历对应原始子图,遍历到其他输出算子(例如,输出算子2)作为遍历终止条件,在这种情况下,可以得到输出算子1构成的子图,同样地,通用处理器以原始子图的输出算子2为起始点,反向遍历对应原始子图,遍历到其他输出算子(例如,输出算子3)作为遍历终止条件,在这种情况下,可以得到输出算子2构成的子图,同样地,以输出算子3为起始点进行反向遍历,得到输出算子3构成的子图,在这三个输出算子各自对应的子图满足剪枝条件中的至少一种的情况下,继续进行迭代剪枝,直至剪枝得到剪枝结果子图。
接下来针对满足剪枝条件的情形进行详细描述:
第一种情形:原始子图中包含一个输入算子和多个输出算子。
具体实现中,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历对应原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在本申请实施例中,有向边可以用于表征算子与算子之间的连接关系(例如,依赖关系),也可以用于表征人工智能处理器执行神经网络模型时的执行顺序。
在本申请实施例中,根据原始子图中算子之间的有向边,在同一原始子图中,以原始子图中包含的多个输出算子分别作为起始点,反向遍历对应原始子图,以遍历到其他输出算子作为遍历终止条件,可以遍历得到每个输出算子各自构成的子图,这里,遍历得到的每个输出算子各自构成的子图均为原始子图的一部分,那么,可以理解的是,将每个输出算子各自构成的子图进行叠加,可以得到原始子图。在遍历得到每个输出算子各自构成的子图之后,判断每个输出算子各自构成的子图是否满足剪枝条件,在确定子图满足剪枝条件的情况下,通用处理器结合具体的剪枝情形进行剪枝,直至遍历到的子图为剪枝结果子图。
在实际应用中,对多个输出算子进行反向遍历,可以包括:
获取目标输出算子;其中,所述目标输出算子为所述多个输出算子中的任意一个输出算子;
根据算子之间具有的有向边对所述目标输出算子进行反向遍历,在满足遍历到的算子为输出算子时,截止遍历,反向遍历得到所述目标输出算子构成的子图。
需要说明的是,在对多个输出算子进行反向遍历时,可以保证每个输出算子构成的子图中只包含一个输出算子,但不能确保每个输出算子构成的子图中只包含一个输入算子。在一种情形下,每个输出算子构成的子图中包含一个输入算子。在另一种情形下,每个输出算子构成的子图中包含多个输入算子。
在本申请实施例中,我们可以认为对原始子图进行遍历的过程形象化的理解为对原始子图进行拆解,得到若干个部分子图的过程。在拆解的过程中,可以得到新的原始子图,新的原始子图中输入算子和输出算子的表现形态同样也具有本申请上述描述的五种情形。
在本申请实施例中,算子与算子之间的依赖关系用于描述算子与算子之间的指向关系,在有向图中可以表示为有向边。例如,以图6A所示的NNP1与NNP2为例,NNP1指向NNP2,也即,NNP1的输出张量数据作为NNP2的输入张量数据。
如前所述,图6A所示的原始子图包括一个输入算子和两个输出算子。当计算机设备确定图6A所示的原始子图满足剪枝条件的情况下,计算机设备对该原始子图进行剪枝。由于原始子图中包含两个输出算子,在计算机设备对原始子图进行剪枝时,需要依次沿不同的输出算子进行反向遍历,以反向遍历得到每个输出算子各自构成的子图。
在一种情形下,在遍历到的算子构成的子图满足剪枝条件中的至少一种的情况下,对该子图进行剪枝。这里,对子图进行剪枝的原因在于:反向遍历每个输出算子构成的子图中包含一个输出算子和多个输入算子。此时,对多个输入算子进行正向遍历,以遍历得到多个输入算子各自构成的子图。在满足遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在另一种情形下,在遍历到的算子构成的子图不满足任意一种剪枝条件的情况下,不进行剪枝。
例如,第一次反向遍历时,计算机设备在两个输出算子(NNP1和NNP4)中选择NNP4作为目标输出算子,然后,在保证算子与算子之间的依赖关系下对NNP4进行反向遍历(也即,以NNP4为反向遍历起点),例如,第一个遍历到的算子为NNP3,第二个遍历到的算子为NNP2,第三个遍历到的算子为NNP1,由于NNP1为输出算子,无法在本次遍历中被访问,在这种情况下,截止遍历。那么,在这种情况下,以NNP4为反向遍历起点,遍历到的三个算子(NNP4、NNP3和NNP2)构成了NNP4对应的子图。第二次反向遍历时,计算机设备选择NNP1作为目标输出算子。在保证算子与算子之间的依赖关系下对NNP1进行反向遍历,由于图6A所示原始子图中的剩余部分只剩下一个算子,在这种情况下,将该算子作为NNP1对应的子图。
在实际应用中,由于NNP4反向遍历得到的子图中包含一个输入算子和一个输出算子,NNP1反向遍历得到的中包含一个输出算子,不满足任意一种剪枝条件,在这种情况下,不对其执行剪枝操作。
从上述描述可以知道的是,当计算机设备对图6A所示的原始子图进行剪枝后,得到的子图可以如图6C所示。
可以理解的是,第一次遍历时,计算机设备也可以在两个输出算子(NNP1和NNP4)中选择NNP1作为目标输出算子进行遍历;第二次遍历时,计算机设备选择NNP4作为目标输出算子进行遍历。其具体实现请参考前述描述,此处不多加赘述。
第二种情形:原始子图中包含多个输入算子和一个输出算子。
具体实现中,在满足所述原始子图中包含多个输入算子和一个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在本申请实施例中,根据原始子图中算子之间具有的有向边,在同一原始子图中,以原始子图中包含的多个输入算子分别作为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件,可以得到每个出入算子各自构成的子图,这里,遍历到的每个输入算子各自构成的子图均为原始子图的一部分,那么,可以理解的是,将每个输入算子各自构成的子图进行叠加,可以得到原始子图。在遍历得到每个输入算子各自构成的子图之后,判断每个输入算子各自构成的子图是否满足剪枝条件,在确定子图满足剪枝条件的情况下,通用处理器结合具体的剪枝情形进行剪枝,直至遍历到的子图为剪枝结果子图。
在实际应用中,对多个输入算子进行正向遍历,可以包括:
获取目标输入算子;其中,所述目标输入算子为所述多个输入算子中的任意一个输入算子;
根据算子之间具有的有向边对所述目标输入算子进行正向遍历,在满足遍历到的算子为输入算子时,截止遍历,正向得到所述目标输入算子构成的子图。
需要说明的是,在对多个输入算子进行正向遍历时,可以保证每个输入算子构成的子图中只包含一个输入算子,但不能确保每个输入算子构成的子图中只包含一个输出算子。在一种情形下,每个输入算子构成的子图中包含一个输出算子。在另一种情形下,每个输入算子构成的子图中包含多个输出算子。
如前所述,我们可以认为对原始子图进行遍历的过程形象化的理解为对原始子图进行拆解,得到若干个部分子图的过程。在拆解的过程中,可以得到新的原始子图,新的原始子图中输入算子和输出算子的表现形态同样也具有本申请上述描述的五种情形。
如前所述,图6B所示的原始子图包括两个输入算子和一个输出算子。当计算机设备确定图6B所示的原始子图满足剪枝条件的情况下,计算机设备对该原始子图进行剪枝。由于原始子图包含两个输入算子,在计算机设备对该原始子图进行剪枝时,需要依次沿不同的输入算子进行正向遍历,以正向遍历得到每个输入算子各自构成的子图。
在一种情形下,在遍历到的算子构成的子图满足剪枝条件中的至少一种的情况下,对该子图进行剪枝。这里,对子图进行剪枝的原因在于:正向遍历每个出入算子构成的子图中包含一个输入算子和多个输出算子。此时,对多个输出算子进行反向遍历,以遍历得到多个输出算子各自构成的子图。在满足遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在另一种情形下,在遍历到的算子构成的子图不满足任意一种剪枝条件的情况下,不进行剪枝。
例如,第一次正向遍历时,计算机设备在两个输入算子(NNP5和NNP7)中选择NNP5作为目标输入算子,然后,在保证算子与算子之间的依赖关系下对NNP5进行正向遍历(也即,以NNP5为正向遍历起点),例如,第一个遍历到的算子为NNP6,第二个遍历到的算子为NNP7,由于NNP7为输入算子,无法在本次遍历中被访问,在这种情况下,截止遍历。那么,在这种情况下,以NNP5为正向遍历起点,遍历到的两个算子(NNP5和NNP6)构成了NNP5对应的子图。第二次正向遍历时,计算机设备选择NNP7作为目标输入算子。在保证算子与算子之间的依赖关系下对NNP7进行正向遍历,由于图6B所示的原始子图中的剩余部分只剩下一个算子,在这种情况下,将该算子作为NNP7对应的子图。
在实际应用中,由于NNP5正向遍历得到的子图中包含一个输入算子和一个输出算子,NNP7正向遍历得到的子图中包含一个输入算子,不满足任意一种剪枝条件,在这种情况下,不对其执行剪枝操作。
从上述描述可以知道的是,当计算机设备对图6B所示的原始子图进行剪枝后,得到的子图可以如图6D所示。
可以理解的是,第一次遍历时,计算机设备也可以在两个输入算子(NNP5和NNP7)中选择NNP7作为目标输出算子进行遍历;第二次遍历时,计算机设备选择NNP5作为目标输出算子进行遍历。其具体实现请参考前述描述,此处不多加赘述。
第三种情形:原始子图中包含多个输入和多个输出算子。
在本申请实施例中,当原始子图中包含多个输入算子和多个输出算子的情况下,通用处理器可以先对多个输入算子进行正向遍历,然后对多个输出算子进行反向遍历,也可以先对多个输出算子进行正向遍历,然后对多个输入算子进行反向遍历。接下来对这两种情况进行具体阐述:
在一种可能的实现方式中,根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中每个原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在这种情况下,通用处理器先对输入算子进行正向遍历,然后对输出算子进行反向遍历,从而实现原始子图的迭代剪枝。
在一种可能的实现方式中,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
通用处理器根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中每个原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在这种情况下,通用处理器先对多个输出算子进行反向遍历,然后对多个输入算子进行正向遍历,从而可以实现多个输入算子和多个输出算子的迭代剪枝。
在本申请实施例中,对多个输入算子进行正向遍历以及对多个输出算子进行反向遍历的实现过程请参考前述描述,此处不多加赘述。
例如,原始子图中包含多个输入算子和多个输出算子。当计算机设备确定该原始子图满足剪枝条件的情况下,计算机设备对该原始子图进行剪枝。
在一种可能的实现方式中,计算机设备沿不同的输出算子进行反向遍历,得到这多个输出算子各自遍历得到的子图;然后,根据原始子图和多个输出算子各自遍历得到的子图确定未被遍历的输入算子;之后,计算机设备沿不同的输入算子进行正向遍历,得到未被遍历的输入算子各自遍历得到的子图。在遍历得到的子图满足剪枝条件中的至少一种的情况下,对子图进行迭代剪枝。在子图不满足任意一种剪枝条件的情况下,不进行剪枝。
可以理解的是,多个输出算子各自遍历得到的子图和未被遍历的输入算子各自遍历得到的子图均为原始子图的一部分。进一步地,这多个输出算子各自遍历得到的子图和未被遍历的输入算子各自遍历得到的子图经过叠加之后,可以得到原始子图。
在另一种可能的实现方式中,计算机设备沿不同的输入算子进行正向遍历,得到这多个输入算子各自遍历得到的子图;然后,根据原始子图和多个输入算子各自遍历得到的子图确定未被遍历的输出算子;之后,计算机设备沿不同的输出算子进行反向遍历,得到未被遍历的输出算子各自遍历得到的子图。在子图满足剪枝条件中的至少一种的情况下,对子图进行迭代剪枝。在子图不满足任意一种剪枝条件的情况下,不进行剪枝。
可以理解的是,多个输入算子各自遍历得到的子图和未被遍历的输出算子各自遍历得到的子图均为原始子图的一部分。进一步地,这多个输入算子各自遍历得到的子图和未被遍历的输出算子各自遍历得到的子图经过叠加之后,可以得到原始子图。
在实际应用中,在对输出算子进行反向遍历时,当遍历到的算子也为输出算子时,截止遍历,得到以该输出算子为反向遍历起点的子图。在对输入算子进行正向遍历时,当遍历到的算子也为输入算子时,截止遍历,得到以该输入算子为正向遍历起点的子图。
可以理解的是,当计算机设备对原始子图进行剪枝后,可以得到剪枝后的子图集合。例如,当计算机设备对图4所示的神经网络模型的计算图进行剪枝后,可以得到如图6E所示的子图集合。这里,子图集合中每个子图包含一个输入算子和一个输出算子。具体地,子图集合中所包含的子图1(NNP1)、子图2(NNP2、NNP3和NNP4)、子图3(NNP5和NNP6)以及子图4(NNP7)用于构建剪枝结果子图。
在本申请实施例中,考虑到神经网络模型中包含第一类算子和第二类算子,那么,在这种情况下,所述第二类算子构成的计算图对应的操作指令运行在通用处理器上,所述剪枝结果子图对应的操作指令发送中人工智能处理器上。
在本申请实施例中,当计算机设备并未对神经网络模型的计算图(图4)进行剪枝时,其具体实现可以参见图6F。当异构系统中的人工智能处理器运行第一类算子对应的操作指令,通用处理器运行第二类算子对应的操作指令时,由于并未对第一类算子对应的计算图进行优化,在调度层面上来看,其并行度差。
在本申请实施例中,如图6E所示,当计算机设备对神经网络模型的计算图(图4)进行剪枝后,可以得到三部分的子图,具体地,第一部分子图包括NNP1,第二部分子图包括NNP2、NNP3、NNP4,NNP5、NNP6,以及CPU;第三部分子图包括NNP7。从调度层面上来看,相对于未剪枝的情形来说,有着更好的并行度,可以实现异构系统在同一时刻进行计算。
实施本申请实施例,计算机设备通过对运行在人工智能处理器上的算子对应的计算图进行剪枝,以使剪枝后的子图包含一个输入算子和一个输出算子,可以避免运行在人工智能处理器上的子图与运行在通用处理器上的子图之间产生依赖关系,可以提高异构系统并行执行神经网络计算任务的效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关装置。
参见图7,图7是本申请实施例提供的一种神经网络剪枝装置的结构示意图,该装置70至少可以包括:
获取单元700,用于获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上;
提取原始子图单元702,用于根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
剪枝单元704,用于对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
执行单元706,用于获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
在其中一种可能的实现方式中,所述剪枝单元704用于:
所述原始子图中包含一个输入算子和多个输出算子、多个输入算子和一个输出算子、多个输入算子和多个输出算子中的至少一种的情况下,对所述原始子图进行迭代剪枝,得到剪枝结果子图。
在其中一种可能的实现方式中,所述剪枝单元704包括:第一剪枝子单元;其中,
所述第一剪枝子单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历对应原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在其中一种可能的实现方式中,所述剪枝单元704包括:第二剪枝子单元;其中,
所述第二剪枝子单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。。
在其中一种可能的实现方式中,所述剪枝单元704包括:第一剪枝单元和第二剪枝单元;其中,
所述第二剪枝单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中每个原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
所述第一剪枝单元,用于根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在其中一种可能的实现方式中,所述剪枝单元704包括:第一剪枝单元和第二剪枝单元;其中,
所述第一剪枝单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中每个原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
所述第二剪枝单元,用于根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
在一种可能的实现方式中,所述装置70还包括:
第二类算子确定单元,用于从所述原始计算图中确定第二类算子;其中,第二类算子对应的操作指令能够运行在通用处理器上;
第二类算子获取单元,用于根据所述原始计算图中算子之间具有的有向边,获取所述第二类算子构成的计算图;
处理单元,用于获取所述第二类算子构成的计算图对应的操作指令,以将其运行在通用处理器上。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
此外,这里需要指出的是,本申请实施例还提供了一种计算机存储介质,用于存储为上述图3所示的计算机设备所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,可以实现神经网络模型的计算图的剪枝,提高异构系统并行执行神经网络计算任务的效率。
由上可见,本申请实施例提供的神经网络剪枝方法、装置、计算机设备和存储介质,该方法避免运行在人工智能处理器上的子图与运行在通用处理器上的子图之间产生依赖关系,可以提高异构系统并行执行神经网络计算任务的效率。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
进一步地,依据以下条款可更好地理解前述内容:
例如,条款A1,一种神经网络剪枝方法,所述方法包括:
获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上;
根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
A2.根据A1所述的方法,所述对所述原始子图进行剪枝,得到对应的剪枝结果子图,包括:
所述原始子图中包含一个输入算子和多个输出算子、多个输入算子和一个输出算子、多个输入算子和多个输出算子中的至少一种的情况下,对所述原始子图进行迭代剪枝,得到剪枝结果子图。
A3.根据A2所述的方法,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历对应原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
A4.根据A2所述的方法,在满足所述原始子图中包含多个输入算子和一个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
A5.根据A2所述的方法,在满足所述原始子图中包含多个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中每个原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝
A6.根据A2所述的方法,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中每个原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
A7.根据A2所述的方法,所述方法还包括:
从所述原始计算图中确定第二类算子;其中,第二类算子对应的操作指令能够运行在通用处理器上;
根据所述原始计算图中算子之间具有的有向边,获取所述第二类算子构成的计算图;
获取所述第二类算子构成的计算图对应的操作指令,以将其运行在通用处理器上。
B1.一种神经网络剪枝装置,所述剪枝装置包括:
获取单元,用于获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上;
提取原始子图单元,用于根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
剪枝单元,用于对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
执行单元,用于获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
B2.根据B1所述的方法,所述剪枝单元用于:
所述原始子图中包含一个输入算子和多个输出算子、多个输入算子和一个输出算子、多个输入算子和多个输出算子中的至少一种的情况下,对所述原始子图进行迭代剪枝,得到剪枝结果子图。
B3.根据B2所述的方法,所述剪枝单元包括第一剪枝子单元;其中,
所述第一剪枝子单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历对应原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
B4.根据B2所述的方法,所述剪枝单元包括第二剪枝单元;其中,
所述第二剪枝单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
B5.根据B2所述的方法,所述剪枝单元包括:第一剪枝单元和第二剪枝子单元;其中,
所述第二剪枝单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中每个原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
所述第一剪枝单元,用于根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
B6.根据B2所述的方法,所述剪枝单元包括第一剪枝单元和第二剪枝单元;其中,
第一剪枝单元,用于根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中每个原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
所述第二剪枝单元,用于根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
B7.根据B2所述的方法,所述装置还包括:
第二类算子确定单元,用于从所述原始计算图中确定第二类算子;其中,第二类算子对应的操作指令能够运行在通用处理器上;
第二类算子获取单元,用于根据所述原始计算图中算子之间具有的有向边,获取所述第二类算子构成的计算图;
处理单元,用于获取所述第二类算子构成的计算图对应的操作指令,以将其运行在通用处理器上。
C1.一种计算机设备,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求A1-A7任一项所述的方法。
D1.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求A1-A7任一项所述的方法。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。

Claims (10)

1.一种神经网络剪枝方法,其特征在于,所述方法包括:
获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上;
根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
2.根据权利要求1所述的方法,其特征在于,所述对所述原始子图进行剪枝,得到对应的剪枝结果子图,包括:
所述原始子图中包含一个输入算子和多个输出算子、多个输入算子和一个输出算子、多个输入算子和多个输出算子中的至少一种的情况下,对所述原始子图进行迭代剪枝,得到剪枝结果子图。
3.根据权利要求2所述的方法,其特征在于,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历对应原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
4.根据权利要求2所述的方法,其特征在于,在满足所述原始子图中包含多个输入算子和一个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历对应原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
5.根据权利要求2所述的方法,其特征在于,在满足所述原始子图中包含多个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中每个原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
6.根据权利要求2所述的方法,其特征在于,在满足所述原始子图中包含一个输入算子和多个输出算子的情况下,对所述原始子图进行剪枝,包括:
根据所述原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输出算子为起始点,反向遍历所述原始子图集合中每个原始子图,遍历到其他的输出算子作为遍历终止条件;在满足反向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝;
根据原始子图中算子之间具有的有向边,在同一原始子图中,以所述原始子图的输入算子为起始点,正向遍历所述原始子图集合中未获得剪枝结果子图的原始子图,遍历到其他的输入算子作为遍历终止条件;在满足正向遍历到的算子构成的子图为剪枝结果子图的情况下,停止迭代剪枝。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
从所述原始计算图中确定第二类算子;其中,第二类算子对应的操作指令能够运行在通用处理器上;
根据所述原始计算图中算子之间具有的有向边,获取所述第二类算子构成的计算图;
获取所述第二类算子构成的计算图对应的操作指令,以将其运行在通用处理器上。
8.一种神经网络剪枝装置,其特征在于,所述剪枝装置包括:
获取单元,用于获取神经网络模型对应的原始计算图,从所述原始计算图中确定第一类算子;其中,所述第一类算子对应的操作指令能够运行在人工智能处理器上;
提取原始子图单元,用于根据所述原始计算图中算子之间具有的有向边,获取所述第一类算子构成的计算图,在所述第一类算子构成的计算图中提取原始子图;其中,所述原始子图包含多个输入算子和/或多个输出算子;所述原始子图构成原始子图集合;
剪枝单元,用于对所述原始子图进行剪枝,得到对应的剪枝结果子图;其中,所述剪枝结果子图包含一个输入算子和一个输出算子;
执行单元,用于获取所述剪枝结果子图对应的操作指令,以分配至对应的人工智能处理器上执行任务。
9.一种计算机设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
CN201910914712.7A 2019-09-24 2019-09-24 一种神经网络剪枝方法、装置、计算机设备及存储介质 Active CN110689116B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910914712.7A CN110689116B (zh) 2019-09-24 2019-09-24 一种神经网络剪枝方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910914712.7A CN110689116B (zh) 2019-09-24 2019-09-24 一种神经网络剪枝方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN110689116A true CN110689116A (zh) 2020-01-14
CN110689116B CN110689116B (zh) 2022-12-27

Family

ID=69110183

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910914712.7A Active CN110689116B (zh) 2019-09-24 2019-09-24 一种神经网络剪枝方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN110689116B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111338635A (zh) * 2020-02-20 2020-06-26 腾讯科技(深圳)有限公司 计算图的图编译方法、装置、设备及存储介质
CN111860820A (zh) * 2020-07-31 2020-10-30 北京灵汐科技有限公司 神经网络算子的划分方法、装置及划分设备
CN112947933A (zh) * 2021-02-24 2021-06-11 上海商汤智能科技有限公司 一种算子的执行方法、装置、计算机设备及存储介质
WO2021164506A1 (zh) * 2020-02-18 2021-08-26 深圳鲲云信息科技有限公司 神经网络模型的数据处理方法、装置、设备及存储介质
CN114387150A (zh) * 2020-10-20 2022-04-22 富泰华工业(深圳)有限公司 用于人工智能学习的处理方法及装置、设备及存储介质
CN114418128A (zh) * 2022-03-25 2022-04-29 新华三人工智能科技有限公司 一种模型部署的方法及装置
WO2023123266A1 (zh) * 2021-12-30 2023-07-06 华为技术有限公司 子图的编译、执行方法及相关设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105808779A (zh) * 2016-03-30 2016-07-27 北京大学 基于剪枝的图漫游并行计算方法和应用
US20180046913A1 (en) * 2016-08-12 2018-02-15 DeePhi Technology Co., Ltd. Combining cpu and special accelerator for implementing an artificial neural network
CN108292241A (zh) * 2015-10-28 2018-07-17 谷歌有限责任公司 处理计算图
CN108292374A (zh) * 2015-11-09 2018-07-17 谷歌有限责任公司 训练表示为计算图的神经网络
WO2018217863A1 (en) * 2017-05-23 2018-11-29 Intel Corporation Methods and apparatus for enhancing a binary weight neural network using a dependency tree
CN109754073A (zh) * 2018-12-29 2019-05-14 北京中科寒武纪科技有限公司 数据处理方法、装置、电子设备和可读存储介质
CN109948794A (zh) * 2019-02-28 2019-06-28 清华大学 神经网络结构化剪枝方法、剪枝装置和电子设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108292241A (zh) * 2015-10-28 2018-07-17 谷歌有限责任公司 处理计算图
CN108292374A (zh) * 2015-11-09 2018-07-17 谷歌有限责任公司 训练表示为计算图的神经网络
CN105808779A (zh) * 2016-03-30 2016-07-27 北京大学 基于剪枝的图漫游并行计算方法和应用
US20180046913A1 (en) * 2016-08-12 2018-02-15 DeePhi Technology Co., Ltd. Combining cpu and special accelerator for implementing an artificial neural network
WO2018217863A1 (en) * 2017-05-23 2018-11-29 Intel Corporation Methods and apparatus for enhancing a binary weight neural network using a dependency tree
CN109754073A (zh) * 2018-12-29 2019-05-14 北京中科寒武纪科技有限公司 数据处理方法、装置、电子设备和可读存储介质
CN109948794A (zh) * 2019-02-28 2019-06-28 清华大学 神经网络结构化剪枝方法、剪枝装置和电子设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
F R FULGINEI ET AL.: "Automatic and Parallel Optimized Learning for Neural Networks performing MIMO Application", 《ADVANCES IN ELECTRICAL AND COMPUTER ENGINEERING》 *
JIAYINGYING: "Tensorflow分布式原理理解", 《简书》 *
杨勇: "反向传播:可计算的图形", 《知乎》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021164506A1 (zh) * 2020-02-18 2021-08-26 深圳鲲云信息科技有限公司 神经网络模型的数据处理方法、装置、设备及存储介质
CN111338635A (zh) * 2020-02-20 2020-06-26 腾讯科技(深圳)有限公司 计算图的图编译方法、装置、设备及存储介质
CN111338635B (zh) * 2020-02-20 2023-09-12 腾讯科技(深圳)有限公司 计算图的图编译方法、装置、设备及存储介质
CN111860820A (zh) * 2020-07-31 2020-10-30 北京灵汐科技有限公司 神经网络算子的划分方法、装置及划分设备
CN114387150A (zh) * 2020-10-20 2022-04-22 富泰华工业(深圳)有限公司 用于人工智能学习的处理方法及装置、设备及存储介质
CN112947933A (zh) * 2021-02-24 2021-06-11 上海商汤智能科技有限公司 一种算子的执行方法、装置、计算机设备及存储介质
CN112947933B (zh) * 2021-02-24 2024-07-12 上海商汤智能科技有限公司 一种算子的执行方法、装置、计算机设备及存储介质
WO2023123266A1 (zh) * 2021-12-30 2023-07-06 华为技术有限公司 子图的编译、执行方法及相关设备
CN114418128A (zh) * 2022-03-25 2022-04-29 新华三人工智能科技有限公司 一种模型部署的方法及装置
CN114418128B (zh) * 2022-03-25 2022-07-29 新华三人工智能科技有限公司 一种模型部署的方法及装置

Also Published As

Publication number Publication date
CN110689116B (zh) 2022-12-27

Similar Documents

Publication Publication Date Title
CN110689116B (zh) 一种神经网络剪枝方法、装置、计算机设备及存储介质
CN111160551B (zh) 计算图执行方法、计算机设备及存储介质
CN110689115B (zh) 神经网络模型处理方法、装置、计算机设备及存储介质
CN110659728B (zh) 神经网络优化方法、装置、计算机设备及存储介质
US11074107B1 (en) Data processing system and method for managing AI solutions development lifecycle
WO2023029589A1 (zh) 用于神经网络编译的方法、装置、设备及存储介质
CN110826708B (zh) 一种用多核处理器实现神经网络模型拆分方法及相关产品
JP6763072B2 (ja) データ処理グラフのコンパイル
WO2022143419A1 (zh) 一种计算图的节点融合方法及设备
CN112348177A (zh) 神经网络模型验证方法、装置、计算机设备和存储介质
CN112084037A (zh) 神经网络的内存分配方法及装置
CN110659069A (zh) 用于执行神经网络计算的指令调度方法及相应计算系统
CN111401538A (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN111401539A (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN111401511A (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN110825380A (zh) 核函数的生成方法、目标代码的生成方法和组合处理装置
WO2023030507A1 (zh) 编译优化方法、装置、计算机设备以及存储介质
CN111860824A (zh) 一种数据处理方法及相关产品
Pang et al. Toward the predictability of dynamic real-time DNN inference
CN115840894A (zh) 一种用于处理多维张量数据的方法及其相关产品
CN111860825A (zh) 一种数据处理方法及相关产品
US20230130747A1 (en) Computer-readable recording medium storing learning program, learning method, and information processing device
US20240037150A1 (en) Scheduling optimization in sequence space
US20240144051A1 (en) Hardware-aware generation of machine learning models
Sedukhin et al. Brain-inspired co-design of algorithm/architecture for CNN accelerators

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

Effective date of registration: 20200914

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.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant