一种神经网络编译的优化方法及系统与流程

文档序号:24816941发布日期:2021-04-27 14:01阅读:171来源:国知局
一种神经网络编译的优化方法及系统与流程

1.本发明涉及可重构处理器及应用领域,应用于可重构编译器的编译器及编译过程。本发明具体涉及一种神经网络编译的优化方法及系统。


背景技术:

2.深度神经网络已应用于多个领域,如:人脸识别、机器翻译、推荐系统等领域。随着深度神经网络模型复杂度的提升,在相应任务上取得更好效果的同时,计算的复杂度也随之增长。为了提升深度神经网络的计算效率,从而使其能够更有效的完成相应的任务,亟须基于神经网络的编译优化技术来对复杂神经网络的计算进行优化。
3.在当前的计算机体系结构中,处理单元的执行速度远高于存储单元的访问速度,对于内存的访问已经成为制约整个计算机系统的瓶颈。针对这一瓶颈,现有技术中通过访存技术或通过有效的复用数据的方式来提升系统的执行速度。其关注点在于单个算子数据流进行调度。但此方式在提升系统执行速度的同时,也增加了内存负担,从而并未显著提升系统的执行效率,同时增加了系统负担。


技术实现要素:

4.本发明的目的是提供一种神经网络编译的优化方法,其通过融合神经网络多层算子,将计算的中间结果保存于片上而非通过内存进行读写,可以有效地减少访存的需求,从而提升系统的执行效率。
5.同时本发明的目的是提供一种神经网络编译的优化系统,其通过融合神经网络多层算子,将计算的中间结果保存于片上而非通过内存进行读写,可以有效地减少访存的需求,从而提升系统的执行效率。
6.本发明的第一个方面,提供了一种神经网络编译的优化方法,神经网络编译的优化方法能够应用于可重构处理器的编译。可重构处理器中包括缓冲存储器。缓冲存储器具有缓冲存储量。
7.神经网络编译的优化方法包括:
8.步骤s101,根据待编译深度学习模型获取具有设定数据结构的计算图。计算图具有dag无回路有向图属性。计算图中包括多个算子。多个算子包括:一个输入算子和一个或多个计算算子。输入算子相当于dag无回路有向图中的根结点。计算算子相当于dag无回路有向图中的中间结点。获取算子属性信息和算子间依赖关系。算子属性信息包括:算子输出数据的存储地址及存储量、算子的类型信息以及算子的参数信息。算子间依赖关系相应于dag无回路有向图的各结点间的拓扑关系。
9.步骤s102,根据算子间依赖关系及输入算子与计算算子间的最长路径长度,分组算子为多个预处理层。将一个或多个预处理层融合为多个融合层。
10.步骤s103,根据融合层中的算子间依赖关系获取融合层中的算子计算顺序。根据融合层中的算子计算顺序给算子分配缓冲存储地址及存储量。
11.步骤s104,根据融合层中算子间依赖关系,获取融合层的层内输出算子、层内输入算子和层内中间算子。层内输出算子为与其他融合层具有输出关系的算子。层内输入算子为与其他融合层具有输入关系的算子。层内中间算子为仅与层内输出算子或层内输入算子具有依赖关系的算子。
12.根据层内输出算子的输出数据的存储地址、存储量及缓冲存储量获取缓冲存储器在缓存层内输出算子输出数据时的输出调用次数。根据输出调用次数获取层内输出算子的拆分策略。
13.根据层内输出算子与其他算子的依赖关系、层内输出算子的类型信息以及层内输出算子的参数信息获取层内输出算子的输入数据量。
14.根据输出数据量及缓冲存储量获取缓冲存储器在缓存层内输出算子输入数据时的输入调用次数。根据输入调用次数获取层内输出算子输入数据的的拆分策略。
15.将层内输出算子的输入数据作为与其依赖算子的输出数据。重复本步骤,直到层内中间算子及层内输入算子能够获取输出数据的输出调用次数及拆分策略、能够获取输入数据的输入调用次数及拆分策略为止。
16.步骤s105,将多个融合层、融合层中各算子的计算顺序以及所有融合层中输出算子、输入算子及中间算子的输出调用次数及拆分策略,部署在一个模拟硬件平台上获取多个融合层对应的系统开销值。模拟硬件平台具有一种设定的可重构处理器的系统结构。
17.步骤s106,将所述多个融合层的系统开销值中最小值对应的融合层作为当前融合层。
18.步骤s107,根据当前融合层编译待编译深度学习模型。
19.在本发明神经网络编译的优化方法的一种实施方式中,步骤s101前还包括:
20.步骤s100,获取待编译深度学习模型。
21.步骤s101中根据待编译深度学习模型获取具有设定数据结构的计算图的步骤包括:
22.根据待编译深度学习模型生成对应ir转换函数。通过ir转换函数将待编译深度学习模型转换为具有设定数据结构的计算图。
23.在本发明神经网络编译的优化方法的另一种实施方式中,步骤s102包括:
24.步骤s1021,多个预处理层为1、2、3......n预处理层。
25.步骤s1022,根据n

1预处理层获取n预处理层的融合层、根据n

1预处理层与n预处理层获取n

2预处理层的融合层........。根据2预处理层、3预处理层~和n

1预处理层获取1预处理层的融合层。
26.在本发明神经网络编译的优化方法的再一种实施方式中,步骤s107包括:
27.根据根结点的当前融合方案编译待编译深度学习模型,获取待编译深度学习模型的编译文件。
28.本发明的第二个方面,提供了一种神经网络编译的优化系统,神经网络编译的优化系统能够应用于可重构处理器的编译。可重构处理器中包括缓冲存储器。缓冲存储器具有缓冲存储量。
29.神经网络编译的优化系统包括:一个计算图获取单元、一个融合层获取单元、一个计算顺序获取单元、一个平铺单元、一个模拟单元、一个当前融合层获取单元和一个编译单
元。其中,
30.计算图获取单元,其配置为根据待编译深度学习模型获取具有设定数据结构的计算图。计算图具有dag无回路有向图属性。计算图中包括多个算子。多个算子包括:一个输入算子和一个或多个计算算子。输入算子相当于dag无回路有向图中的根结点。
31.计算算子相当于dag无回路有向图中的中间结点。获取算子属性信息和算子间依赖关系。算子属性信息包括:算子输出数据的存储地址及存储量、算子的类型信息以及算子的参数信息。算子间依赖关系相应于dag无回路有向图的各结点间的拓扑关系。
32.融合层获取单元,其配置为根据算子间依赖关系及输入算子与计算算子间的最长路径长度,分组算子为多个预处理层。将一个或多个预处理层融合为多个融合层。
33.计算顺序获取单元,其配置为根据融合层中的算子间依赖关系获取融合层中的算子计算顺序。根据融合层中的算子计算顺序给算子分配缓冲存储地址及存储量。
34.平铺单元,其配置为根据融合层中算子间依赖关系,获取融合层的层内输出算子、层内输入算子和层内中间算子。层内输出算子为与其他融合层具有输出关系的算子。层内输入算子为与其他融合层具有输入关系的算子。层内中间算子为仅与层内输出算子或层内输入算子具有依赖关系的算子。
35.根据层内输出算子的输出数据的存储地址、存储量及缓冲存储量获取缓冲存储器在缓存层内输出算子输出数据时的输出调用次数。根据输出调用次数获取层内输出算子的拆分策略。
36.根据层内输出算子与其他算子的依赖关系、层内输出算子的类型信息以及层内输出算子的参数信息获取层内输出算子的输入数据量。
37.根据输出数据量及缓冲存储量获取缓冲存储器在缓存层内输出算子输入数据时的输入调用次数。根据输入调用次数获取层内输出算子输入数据的的拆分策略。
38.将层内输出算子的输入数据作为与其依赖算子的输出数据。重复本步骤,直到层内中间算子及层内输入算子能够获取输出数据的输出调用次数及拆分策略、能够获取输入数据的输入调用次数及拆分策略为止。
39.模拟单元,其配置为将多个融合层、融合层中各算子的计算顺序以及所有融合层中输出算子、输入算子及中间算子的输出调用次数及拆分策略,部署在一个模拟硬件平台上获取多个融合层对应的系统开销值。模拟硬件平台具有一种设定的可重构处理器的系统结构。
40.当前融合层获取单元,其配置为将所述多个融合层的系统开销值中最小值对应的融合层作为当前融合层。
41.编译单元,其配置为根据当前融合层编译待编译深度学习模型。
42.在本发明神经网络编译的优化系统的另一种实施方式中,其系统还包括:
43.一个获取单元,其配置为待编译深度学习模型。
44.计算图获取单元,还其配置为根据待编译深度学习模型生成对应ir转换函数。通过ir转换函数将待编译深度学习模型转换为具有设定数据结构的计算图。
45.在本发明神经网络编译的优化系统的另一种实施方式中,融合层获取单元还配置为:
46.多个预处理层为1、2、3......n预处理层。
47.根据n

1预处理层获取n预处理层的融合层、根据n

1预处理层与n预处理层获取n

2预处理层的融合层........。根据2预处理层、3预处理层~和n

1预处理层获取1预处理层的融合层。
48.在本发明神经网络编译的优化系统的再一种实施方式中,编译单元还配置为:根据根结点的当前融合方案编译待编译深度学习模型,获取待编译深度学习模型的编译文件。
49.下文将以明确易懂的方式,结合附图对一种神经网络编译的优化方法及系统的特性、技术特征、优点及其实现方式予以进一步说明。
附图说明
50.图1是用于说明在本发明一种实施方式中的神经网络编译的优化方法的流程示意图。
51.图2是用于说明在本发明一种实施方式中的神经网络编译的优化系统的组成示意图。
52.图3是用于说明在本发明另一种实施方式中的神经网络编译的优化方法的流程示意图。
53.图4是用于说明在本发明一种实施方式中,处理层中各算子的结构示意图。
54.图5适用于说明在本发明的一种实施方式中,w宽度方向数据tiling平铺处理时的示意图。
具体实施方式
55.为了对发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式,在各图中相同的标号表示结构相同或结构相似但功能相同的部件。
56.在本文中,“示意性”表示“充当实例、例子或说明”,不应将在本文中被描述为“示意性”的任何图示、实施方式解释为一种更优选的或更具优点的技术方案。为使图面简洁,各图中只示意性地表示出了与本示例性实施例相关的部分,它们并不代表其作为产品的实际结构及真实比例。
57.在本发明神经网络编译的优化方法的一种实施方式中,本发明主要包括以下部分:ir转换、层间融合方案搜索模块、块内与单算子调度模块、代价模型。上述各部分的执行流程参照图3所示。以下将对上述各部分的调用过程逐一说明:
58.1、ir转换模块
59.本发明支持多种深度学习框架定义的模型在硬件平台上进行部署,同时为了复用后续的模块,避免需要针对每一种深度学习框架提供专用的编译工具,本发明采用了将多种深度学习框架定义的计算图转换为统一的中间计算图表示的方法。后续的层间融合方案搜索模块、块内与单算子调度模块以及代价模型基于统一的中间表示进行处理,从而将编译优化工作与前端框架解耦合,提升编译工具的适应性与灵活性。
60.本发明支持当前主流框架中定义的大部分算子,在编译器实现的c++代码中为每一算子定义相应的类,类中包含表示计算图连接关系的域以及前向与反向计算的方法。通过为每一种深度学习框架编写相应的ir转换的函数,可以将不同的前端框架定义的计算图
表示转换为统一的自定义的计算图表示。
61.2、层间融合方案搜索模块:
62.本发明使用层间融合方案搜索模块在整个计算图中搜索算子层间融合的组合方案,后续代价模型返回关于层间融合方案的代价评估作为反馈,指导搜索模块选择最优的组合方案。
63.本发明分析了神经网络连接的特性,从有效的复用算子的输入数据的角度,提出了一种可用的且有效的搜索方法。此方法主要由两部分组成:基于单源最长路径的深度划分以及基于动态规划的搜索方法。
64.神经网络尤其是卷积神经网络符合有向无环图(dag)的性质,计算图通常有一个输入结点并可能有一个或多个输出结点。计算图中的一个算子可以连接到多个算子,即多个算子的输入数据依赖于同一个算子的输出数据。为了充分利用这部分相同的输入数据,本发明使用一种预处理的策略,将算子依据其与整个计算图的输入结点的最长距离进行分层,同一层的算子作为一个基本块成为后续块内调度的主体。通过块内共享相同的输入数据,可以有效减少这部分算子对于相同输入数据的内存访问,从而有效的提升数据复用以及提高系统的运行效率。
65.基于动态规划的搜索方法在前一步深度划分预分层后进行层间融合的搜索工作。在深度划分后的相邻层的输入输出数据仍然需要通过内存进行传输,基于动态规划的搜索方法通过搜索的方式寻找一种最优的层间融合的组合方案,使得融合后的计算代价最小。使用dp(i)表示第i层至最后一层所有融合方案中计算代价的最小值,最优子结构可表示为公式1:
[0066][0067]
最终通过动态规划方法可求得dp(1)即整个网络的所有融合方案中代价最小的组合方案。此动态规划的时间复杂度为n2为通过单源最长路径进行预分层后得到的总层数。相较于穷举的搜索方法指数级的时间复杂度,在搜索开销上,本发明使用的基于动态规划的方法取得了巨大的提升且搜索结果准确。
[0068]
3、块内与单算子调度模块
[0069]
本发明中块内与单算子调度模块将搜索模块当前的层间融合方案作为输入,对其中的多个算子进行算子间的计算调度以及单个算子内部的数据流调度。
[0070]
本发明中块内的算子调度采用图的深度优先搜索方法,从融合方案中每一块的若干个输入数据其中之一出发,采用深度优先的策略进行探索,将所有可计算的算子加入到执行序列当中。
[0071]
直到当前探索到的算子所依赖的输入还有未加入到执行序列的情况存在,则以当前算子为起点,根据算子所依赖的输入反向探索,将输入数据在计算过程中所有所需的算子依次加入到执行序列,直到算子依赖的所有输入均满足存在于执行序列的条件,则此算子当前状态为可计算,将其加入到执行序列并继续以深度优先的策略进行后续的探索。
[0072]
采用深度优先的搜索方法为层间融合方案确定了每一块内部的各个算子的执行顺序,并可保证每一算子在其计算时所有的输入依赖均以完成计算,结果已从内存中取出或者已经计算完成,保存于片上。
[0073]
多个块之间的计算顺序由计算图中的输入输出依赖唯一确定,由于本发明按照单源最长路径进行预分层操作,可以保证多个块间不存在循环依赖的问题。在确定块内算子的计算顺序之后,基于算子的计算顺序以及算子间的输入输出依赖关系,为相邻的算子分配不同的片上缓存id号,而没有数据依赖关系的算子尽可能的复用相同的片上缓存id号,使得分配到相同片上缓存id号的算子不会出现在计算过程中同时占用相应片上缓存的情况存在,最终为所有的算子分配用于保存计算结果的片上缓存id号。
[0074]
依据每一片上缓存id号中保存算子计算结果中的最大数据量,将实际的片上缓存存储容量按照最大数据量的比例进行分配,最终完成对于每一算子分配用于保存计算结果的地址空间。
[0075]
在确定块内算子间的计算顺序以及算子计算结果保存的片上缓存地址空间之后,单算子调度模块完成单个算子的数据流调度。本发明在单算子数据流调度中,基于整体的搜索空间复杂度的考虑,未使用搜索方法对单个算子内部的数据流调度方案进行搜索,而是采用固定的输出稳定的数据流调度策略。同时由于片上缓存有限,需要对单个算子按照h方向以及w方向进行tiling平铺。
[0076]
由于本发明采用输出稳定的数据流调度方案,因此tiling平铺首先从整个块的所有输出算子出发,按照输出tiling平铺结果所需要的输入数据的数据范围,反推其依赖的输入算子计算结果在h与w方向的tiling平铺结果。
[0077]
若有多个算子依赖于某算子的输出数据,而对于输出数据的tiling平铺结果需求不同,则分别在h与w方向取其所需的最大值。最终为所有算子确定计算的数据流调度方案。
[0078]
4、代价模型
[0079]
代价模型模块由两部分组成:指令转换模块与代价估算模块。
[0080]
指令转换模块依据层间融合方案、块内算子的计算顺序以及单算子的tiling平铺方案,将相应的计算图计算方案转化为能够在实际硬件平台上执行的指令。同时由于代价模型之上的计算方案是在逻辑层面进行设计,与具体的硬件平台无关,所以本发明可以支持部署在多种硬件平台之上,从而实现将多种前端深度学习框架定义模型部署在多种硬件平台之上,提升编译工具的灵活性与适应性。
[0081]
代价估算模块通过模拟的方式,估算指令执行过程所需要的执行代价,并且将得到的代价估算作为整个层间融合方案的最终开销,提供给层间融合方案搜索模块。层间融合方案搜索模块基于代价估算的开销最终选择出所有融合方案中最适配针对某一硬件平台的层间融合方案。
[0082]
本发明的第一个方面,提供了一种神经网络编译的优化方法,神经网络编译的优化方法能够应用于可重构处理器的编译。可重构处理器中包括缓冲存储器。缓冲存储器具有缓冲存储量。
[0083]
如图1所示,神经网络编译的优化方法包括以下步骤:
[0084]
步骤s101,获取具有设定数据结构的计算图。
[0085]
本步骤中,根据待编译深度学习模型获取具有设定数据结构的计算图。计算图具有dag无回路有向图属性。计算图中包括多个算子。多个算子包括:一个输入算子和一个或多个计算算子。输入算子相当于dag无回路有向图中的根结点。计算算子相当于dag无回路有向图中的中间结点。
[0086]
例如:如图4中所示的计算图。图4中所示的计算图具有dag无回路有向图属性。图4中包括6个算子。“1”为输入算子。“2、3、4、5、6”为计算算子。输入算子“1”相当于dag无回路有向图中的根结点。计算算子“2、3、4、5、6”相当于dag无回路有向图中的中间结点。
[0087]
获取算子属性信息和算子间依赖关系,获取上述算子“1、2、3、4、5、6”算子属性信息和算子间依赖关系。算子属性信息包括:算子输出数据的存储地址及存储量、算子的类型信息以及算子的参数信息。算子间依赖关系相应于dag无回路有向图的各结点间的拓扑关系。
[0088]
步骤s102,获取多个融合层。
[0089]
本步骤中,根据算子间依赖关系及输入算子与计算算子间的最长路径长度,分组算子为多个预处理层。将一个或多个预处理层融合为多个融合层。
[0090]
例如:计算图结构如图4所示,层间融合搜索模块完成算子层间融合方案的搜索工作。首先将计算图依据其拓扑结构进行预处理,按照每个算子到根节点的最大路径长度进行深度划分,具有相同深度的被放入同一个预处理层中。
[0091]
如图4所示,1号节点为根节点,其最大路径长度为0。2、3、4号与根节点的最大路径长度为1。5号节点最大路径长度为2。6号节点由于依赖5号节点的输出结果,其与根节点的最大路径长度为3。
[0092]
因此预处理之后的计算图可以被划分为4个预处理层,分别为预处理层10、20、30和40。层与层之间具有线性的连接关系。层间融合搜索模块之后使用动态规划算法,对预处理层之间进行融合。例如:10预处理层单独作为一个融合层与20及其后续预处理层中的最优融合方案构成一个融合方案;10预处理层与20预处理层融合作为一个融合层,与30及其后续预处理层中的最优融合方案构成一个融合方案;10预处理层与20、30预处理层融合作为一个融合层,与40及其后续预处理层中的最优融合方案构成一个融合方案;10、20、30、40预处理层融合为一个融合层并构成一个融合方案。根据上述所有融合方案中代价最小值得到10及后续预处理层的最优融合方案。
[0093]
基于后续代价模型返回的计算开销,即从步骤s105中所得到的计算开销,得到最优的融合方案作为最终的执行方案。
[0094]
动态规划算法的最优子结构为公式1,其中dp(i)表示从第i个预处理层开始向后进行融合,能够得到的最优的执行开销。
[0095]
步骤s103,获取融合层中的算子计算顺序。
[0096]
本步骤中,根据融合层中的算子间依赖关系获取融合层中的算子计算顺序。根据融合层中的算子计算顺序给算子分配缓冲存储地址及存储量。
[0097]
例如:如图4所示,在融合层10、20、30和40内首先完成层内算子的执行顺序调度。如:在将所有的算子融合为一个层的方案中,从层中不依赖于同块其他算子输出结果的算子开始执行,即从算子1开始执行,将1加入已执行队列,运用深度优先搜索算法进行探索,可探索到节点为(2、3、4),假如探索到算子2,由于算子2仅依赖于算子1,而算子1已经执行完毕,输出结果就绪,因此算子2可以执行。
[0098]
将算子2加入到已执行队列,继续运用深度优先搜索算法,探索到算子6,然而算子6依赖于算子2与算子5的输出,虽然算子2已执行完毕,但是算子5还未执行,因此算子6无法获得其所需的所有的输入数据,将算子6加入待执行栈,算法从算子6开始反向搜索其所有
依赖的输入数据。
[0099]
因此探索到算子5,由于算子5依赖的算子3和算子4还未执行,同理将算子5加入待执行栈,从算子5的输入反向搜索到算子3,由于算子3的输入算子1已执行,因此将算子3可执行并加入已执行队列,算子3执行完毕后,从待执行栈中弹出栈顶算子5,检查其当前是否可执行,由于算子5还依赖于算子4,因此继续将算子5压入待执行栈。
[0100]
反向搜索到算子4,由于算子4的依赖算子1已执行,依次算子4可执行并加入已执行队列,从待执行栈中弹出栈顶算子5,检查发现当前其依赖算子已全部出于已执行状态,因此算子5可执行并加入已执行队列,此时待执行栈非空,继续弹出栈顶算子6,由于其依赖算子2和算子5已执行,因此算子6当前可执行并加入已执行队列,继续探索发现无后续算子,算法终止。最终的执行顺序为已执行队列中的执行顺序即1
→2→3→4→5→
6。
[0101]
例如:具体为通过对bank id的分配,分配的准则是尽可能复用bank id,同时未释放的bank id无法被分配。由于执行顺序为1
→2→3→4→5→
6,因此首先为算子1分配bank id=1。算子2分配bank id=2。由于算子1已经算子2的输出数据在后续还会被使用,因此其bank不能被释放。
[0102]
在计算算子3时为算子3的输出结果分配bank id=3。在计算算子4时分配bank id=4保存输出结果,由于在算子4计算结束之后,算子1的输出结果不会再被使用,因此bank id=1被释放,再计算算子5时可以复用bank id=1保存输出结果。
[0103]
再算子5执行完毕后,由于算子3与算子4的输出不会再被使用,因此释放bank id=3和bank id=4。在计算算子6时可以复用bank id=3保存算子6的输出结果,并释放bank id=2。在将所有的算子分配bank id之后,根据占用相同bank id的算子的输出数据的存储量中的最大值,将实际的片上buffer存储量按比例分配给各个bank id。
[0104]
步骤s104,获取层内各算子的输入、输出调用次数及拆分策略。
[0105]
本步骤中,根据融合层中算子间依赖关系,获取融合层的层内输出算子、层内输入算子和层内中间算子。层内输出算子为与其他融合层具有输出关系的算子。层内输入算子为与其他融合层具有输入关系的算子。层内中间算子为仅与层内输出算子或层内输入算子具有依赖关系的算子。如图4中,以20+30层融合为例,层内输出算子为“2、5”算子,层内输入算子为“2、3、4”算子,层内无中间算子。
[0106]
根据层内输出算子的输出数据的存储地址、存储量及缓冲存储量获取缓冲存储器在缓存层内输出算子输出数据时的输出调用次数。根据输出调用次数获取层内输出算子的拆分策略。
[0107]
根据层内输出算子与其他算子的依赖关系、层内输出算子的类型信息以及层内输出算子的参数信息获取层内输出算子的输入数据量。
[0108]
根据输出数据量及缓冲存储量获取缓冲存储器在缓存层内输出算子输入数据时的输入调用次数。根据输入调用次数获取层内输出算子输入数据的的拆分策略。
[0109]
将层内输出算子的输入数据作为与其依赖算子的输出数据。重复本步骤,直到层内中间算子及层内输入算子能够获取输出数据的输出调用次数及拆分策略、能够获取输入数据的输入调用次数及拆分策略为止。
[0110]
由于实际硬件储存空间的限制,导致算子分配的内存可能无法存放所有的输出数据,因此需要对计算进行tiling,即并不是将所有的输出结果同时计算出来,而是分几个轮
次,每次计算出一部分结果。
[0111]
如图5所示,按w宽度方向数据划分的一个示例,例如图4中第2个算子(第2个节点)的输出为8*6,实际分配的空间可能无法存放所有的数据,因此在w宽度方向进行切分,分成2个8*3的进行计算。
[0112]
在此算子切分之后,按照算子间的计算依赖关系,例如当前算子为3*3stride=1的卷积算子,8*3的输出数据依赖的输入数据为8*4的尺寸,其中具有点阵部分的数据在两次8*3运算中均被使用。
[0113]
使用逆拓扑排序算法对同一个块所有算子输出数据的数据范围进行反向的递推,最终得到层中算子tiling平铺后的结果。
[0114]
步骤s105,获取多个融合层对应的系统开销值。
[0115]
本步骤中,将多个融合层、融合层中各算子的计算顺序以及所有融合层中输出算子、输入算子及中间算子的输出调用次数及拆分策略,部署在一个模拟硬件平台上获取多个融合层对应的系统开销值。模拟硬件平台具有一种设定的可重构处理器的系统结构。
[0116]
步骤s106,获取当前融合层。
[0117]
本步骤中,将多个融合层的系统开销值中最小值对应的融合层作为当前融合层。
[0118]
步骤s107,编译深度学习模型。
[0119]
本步骤中,根据当前融合层编译待编译深度学习模型。
[0120]
本发明针对计算机体系结构中存在的访存速度成为系统瓶颈的存储墙问题,提出神经网络编译的优化方法。通过融合神经网络多层算子,将计算的中间结果保存于片上而非通过内存进行读写,可以有效地减少访存的需求,从而提升系统的执行效率。
[0121]
本发明相较于其他的神经网络编译优化方法,将着眼点放在融合多层算子而非对单个算子进行数据流调度。通过搜索算法,得到的最优层间融合方案相较使用固定策略的层间融合方式取得了更快的执行速度。同时,本发明通过ir转换以及将代价模型与搜索调度模块解耦合,支持多深度学习框架以及能够有效的扩展到多硬件平台,具有较大的灵活性与适应性。
[0122]
本发明针对于神经网络特别是卷积神经网络中的计算局部性以及数据复用的特点,设计了一种层间融合方案搜索方法。通过融合复杂神经网络中的多层算子,将多个算子之间的中间结果保存于片上缓存,而非通过读写内存进行数据交换,可以有效的减少对于内存单元的访问,从而显著的提升整个系统的执行效率。其中主要难点在于在复杂连接关系的网络中,寻找到一种较好的层间算子融合方案,使得融合后的计算方案能够获得较高的执行效率。
[0123]
在本发明神经网络编译的优化方法的一种实施方式中,步骤s101前还包括:
[0124]
步骤s100,获取待编译深度学习模型。
[0125]
步骤s101中根据待编译深度学习模型获取具有设定数据结构的计算图的步骤包括:
[0126]
根据待编译深度学习模型生成对应ir转换函数。通过ir转换函数将待编译深度学习模型转换为具有设定数据结构的计算图。
[0127]
在本发明神经网络编译的优化方法的另一种实施方式中,步骤s102包括:
[0128]
步骤s1021,多个预处理层为1、2、3......n预处理层。
[0129]
步骤s1022,根据n

1预处理层获取n预处理层的融合层、根据n

1预处理层与n预处理层获取n

2预处理层的融合层........。根据2预处理层、3预处理层~和n

1预处理层获取1预处理层的融合层。
[0130]
在本发明神经网络编译的优化方法的再一种实施方式中,步骤s107包括:
[0131]
根据根结点的当前融合方案编译待编译深度学习模型,获取待编译深度学习模型的编译文件。
[0132]
本发明的第二个方面,如图2所示,提供了一种神经网络编译的优化系统,神经网络编译的优化系统能够应用于可重构处理器的编译。可重构处理器中包括缓冲存储器。缓冲存储器具有缓冲存储量。
[0133]
神经网络编译的优化系统包括:一个计算图获取单元101、一个融合层获取单元201、一个计算顺序获取单元301、一个平铺单元401、一个模拟单元501、一个当前融合层获取单元601和一个编译单元701。其中,
[0134]
计算图获取单元101,其配置为根据待编译深度学习模型获取具有设定数据结构的计算图。计算图具有dag无回路有向图属性。计算图中包括多个算子。多个算子包括:一个输入算子和一个或多个计算算子。输入算子相当于dag无回路有向图中的根结点。
[0135]
计算算子相当于dag无回路有向图中的中间结点。获取算子属性信息和算子间依赖关系。算子属性信息包括:算子输出数据的存储地址及存储量、算子的类型信息以及算子的参数信息。算子间依赖关系相应于dag无回路有向图的各结点间的拓扑关系。
[0136]
融合层获取单元201,其配置为根据算子间依赖关系及输入算子与计算算子间的最长路径长度,分组算子为多个预处理层。将一个或多个预处理层融合为多个融合层。
[0137]
计算顺序获取单元301,其配置为根据融合层中的算子间依赖关系获取融合层中的算子计算顺序。根据融合层中的算子计算顺序给算子分配缓冲存储地址及存储量。
[0138]
平铺单元401,其配置为根据融合层中算子间依赖关系,获取融合层的层内输出算子、层内输入算子和层内中间算子。层内输出算子为与其他融合层具有输出关系的算子。层内输入算子为与其他融合层具有输入关系的算子。层内中间算子为仅与层内输出算子或层内输入算子具有依赖关系的算子。
[0139]
根据层内输出算子的输出数据的存储地址、存储量及缓冲存储量获取缓冲存储器在缓存层内输出算子输出数据时的输出调用次数。根据输出调用次数获取层内输出算子的拆分策略。
[0140]
根据层内输出算子与其他算子的依赖关系、层内输出算子的类型信息以及层内输出算子的参数信息获取层内输出算子的输入数据量。
[0141]
根据输出数据量及缓冲存储量获取缓冲存储器在缓存层内输出算子输入数据时的输入调用次数。根据输入调用次数获取层内输出算子输入数据的的拆分策略。
[0142]
将层内输出算子的输入数据作为与其依赖算子的输出数据。重复本步骤,直到层内中间算子及层内输入算子能够获取输出数据的输出调用次数及拆分策略、能够获取输入数据的输入调用次数及拆分策略为止。
[0143]
模拟单元501,其配置为将多个融合层、融合层中各算子的计算顺序以及所有融合层中输出算子、输入算子及中间算子的输出调用次数及拆分策略,部署在一个模拟硬件平台上获取多个融合层对应的系统开销值。模拟硬件平台具有一种设定的可重构处理器的系
统结构。
[0144]
当前融合层获取单元601,其配置为将多个融合层的系统开销值中最小值对应的融合层作为当前融合层。
[0145]
编译单元701,其配置为根据当前融合层编译待编译深度学习模型。
[0146]
在本发明神经网络编译的优化系统的另一种实施方式中,其系统还包括:
[0147]
一个获取单元,其配置为待编译深度学习模型。
[0148]
计算图获取单元101,还其配置为根据待编译深度学习模型生成对应ir转换函数。通过ir转换函数将待编译深度学习模型转换为具有设定数据结构的计算图。
[0149]
在本发明神经网络编译的优化系统的另一种实施方式中,融合层获取单元201还配置为:
[0150]
多个预处理层为1、2、3......n预处理层。
[0151]
根据n

1预处理层获取n预处理层的融合层、根据n

1预处理层与n预处理层获取n

2预处理层的融合层........。根据2预处理层、3预处理层~和n

1预处理层获取1预处理层的融合层。
[0152]
在本发明神经网络编译的优化系统的再一种实施方式中,编译单元701还配置为:根据根结点的当前融合方案编译待编译深度学习模型,获取待编译深度学习模型的编译文件。
[0153]
由此可知,本发明的有益效果在于:
[0154]
1)性能高效:本发明基于多种卷积神经网络进行测试,通过对于使用预处理方式的算子融合方法得到了明显的计算效率提升。
[0155]
2)方法通用性强:本发明所使用的解耦合方法可以有效的适配多种深度学习框架以及多种底层的硬件平台,通过将深度学习框架定义的模型转换为中间表示,并基于中间表示进行编译优化以及底层硬件指令的转换可以有效的提升本发明的应用范围。
[0156]
3)方法实用性强:本发明所使用的基于动态规划的搜索方法相较穷举的搜索算法在时间复杂度上有明显优势,并且使得在复杂的网络连接中穷举方法不可用的问题得以解决,在搜索结果上,与穷举方法搜索得到最优的组合策略相比差距不大,具有很好的实用性。
[0157]
应当理解,虽然本说明书是按照各个实施方式中描述的,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
[0158]
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1