一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

支持机器学习训练的专用后端代码生成方法及装置与流程

2022-02-19 02:11:44 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种支持机器学习训练的专用后端代码生成方法及装置。


背景技术:

2.图像处理单元(graphics processing unit,gpu)作为在机器学习领域得到普遍应用的传统的神经网络训练后端设备,集成大量的单指令多数据(single instruction multiple data,simd)微处理器,提供巨大的并行计算能力,在神经网络训练中取得很好的成效,但是,由于gpu本身的硬件架构导致gpu在复杂逻辑控制和输入输出(input output,io)密集型计算方面存在很大的提升空间。
3.目前,gpu作为专用于神经网络训练与推理的芯片,缺乏一个端到端、支持训练和推理的编译器,例如昆仑芯片,使得gpu应用于神经网络训练与推理中的运算效率亟需优化。


技术实现要素:

4.本发明提供一种支持机器学习训练的专用后端代码生成方法及装置,用以解决gpu应用于神经网络训练与推理中的运算效率亟需优化的问题。
5.第一方面,本发明提供一种支持机器学习训练的专用后端代码生成方法,包括:
6.获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
7.获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
8.获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
9.基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
10.可选地,所述算子映射模块包括至少一个算子代码生成器与算子映射器;
11.所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码,具体包括:
12.基于所述算子映射器获取至少一个算子的算子类型;
13.基于所述至少一个算子的算子类型将所述至少一个算子分发至每个算子对应的算子代码生成器;
14.基于所述至少一个算子与所述算子代码生成器内的代码生成模板类,输出每个算子对应的算子调用代码。
15.可选地,所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子
映射模块之前,还包括:
16.获取第一算子,所述第一算子为所述第二计算图中的算子;
17.基于所述第一算子的算子类型与预设代码生成模板基类生成第一算子对应的代码生成模板类;
18.基于所述第一算子对应的代码生成模板类生成并注册所述第一算子对应的算子代码生成器。
19.可选地,所述算子调用代码包括算子函数、输入参数以及函数调用代码中的至少一项;
20.所述输入参数包括以下各项中的至少一项:
21.以指针形式传入函数的第一张量数据;
22.基于提前aot编译方法从所述至少一个算子中获取的第二张量数据;
23.整数向量,所述整数向量是基于向量组机制得到。
24.可选地,所述整数向量是基于向量组机制得到,具体包括:
25.将第二算子输入所述第二算子对应的算子代码生成器,输出整数向量,所述第二算子为所述第二计算图中输入参数包括所述整数向量的算子;
26.将所述整数向量发送至向量管理器,基于所述向量管理器生成所述整数向量的变量名,将所述整数向量的变量名发送至所述第二算子对应的算子代码生成器;
27.基于所述第二算子对应的算子代码生成器将所述变量名输出至所述第二算子对应的算子调用代码。
28.可选地,所述内存管理代码用于:
29.基于所述至少一个算子的内存配置信息获取内存池;
30.获取所述至少一个算子的输入输出内存请求,基于所述至少一个算子的输入输出内存请求对所述内存池进行分配。
31.可选地,所述内存管理代码还用于:
32.获取所述至少一个算子的输入输出内存请求对应的内存信息;
33.基于所述内存信息获取所述至少一个算子对应的权重参数,基于权重参数更新机制对所述权重参数进行更新处理。
34.可选地,所述基于算子库对所述目标后端代码进行编译处理,具体包括:
35.获取算子库中第三算子的算子类型对应的预设子任务划分方法,所述第三算子为补充算子;
36.基于所述预设子任务划分方法对所述第三算子对应的算子调用代码进行子任务划分处理,得到至少一个子任务;
37.基于所述至少一个子任务计算每个子任务的线程号,基于所述每个子任务的线程号并行执行所述至少一个子任务;
38.其中,所述目标后端代码中包括所述第三算子对应的算子调用代码。
39.第二方面,本发明提供一种支持机器学习训练的专用后端代码生成装置,包括:
40.处理单元,用于获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
41.算子调用代码生成单元,用于获取第二计算图的至少一个算子,基于所述至少一
个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
42.内存管理代码生成单元,用于获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
43.编译单元,用于基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
44.第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述支持机器学习训练的专用后端代码生成方法的步骤。
45.第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述支持机器学习训练的专用后端代码生成方法的步骤。
46.第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如第一方面所述支持机器学习训练的专用后端代码生成方法的步骤。
47.本发明提供的支持机器学习训练的专用后端代码生成方法及装置,通过对第一计算图进行解析与优化处理得到第二计算图,提高计算图的计算效率,基于算子映射模块生成的每个算子对应的算子调用代码与内存管理模块生成的内存管理代码生成目标后端代码,再基于算子库对目标后端代码进行编译处理,得到部署文件,该部署文件用于执行第一计算图的计算任务,实现了一个端到端且支持神经网络训练的编译器,提高了gpu应用于神经网络训练与推理中的运算效率,扩展了gpu的应用范围。
附图说明
48.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
49.图1是本发明提供的支持机器学习训练的专用后端代码生成方法的流程示意图之一;
50.图2是本发明提供的目标后端代码的结构示意图;
51.图3是本发明提供的支持机器学习训练的专用后端代码生成方法的流程示意图之二;
52.图4是本发明提供的对补充算子对应的算子调用代码进行编译处理的流程示意图;
53.图5是本发明提供的支持机器学习训练的专用后端代码生成装置的结构示意图;
54.图6为本发明提供的电子设备的结构示意图。
具体实施方式
55.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本
发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
56.为了解决gpu应用于神经网络训练与推理中的运算效率亟需优化的问题,本发明实施例提供一种支持机器学习训练的专用后端代码生成方法,图1是本发明实施例提供的支持机器学习训练的专用后端代码生成方法的流程示意图之一。如图1所示,该方法包括以下步骤:
57.步骤100、获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图。
58.需要说明的是,为了解决gpu应用于神经网络训练与推理中的运算效率亟需优化的的问题,本发明实施例提供了一种支持机器学习训练的专用后端代码生成方法,实现了一个端到端且支持神经网络训练的编译器,应用于gpu上,提高了gpu应用于神经网络训练与推理中的运算效率,并扩展了gpu的应用范围。
59.其中,算子表示一种操作与运算,例如卷积计算或矩阵乘积。
60.可选地,第一计算图为至少一个算子按照第一顺序组成的神经网络模型。
61.需要说明的是,第一计算图是描述整个计算任务的图级结构,计算任务包括按照第一计算图的第一顺序执行各算子。其中,第一顺序为任意设置的拓扑顺序,至少一个算子采用不同的拓扑顺序能够得到不同的计算图。
62.可以理解的是,本发明实施例提供的算子能够支持各种通用数学运算以及多种神经网络模型的预测与训练。
63.可选地,解析与优化处理包括常量折叠或算子融合。
64.一种实施方式中,对所述第一计算图进行常量折叠或算子融合处理,得到第二计算图。
65.步骤101、获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码。
66.需要说明的是,本发明实施例提供的支持机器学习训练的专用后端代码生成方法应用于基于tvm框架的编译系统,该系统的前端为现有技术中的开源神经网络编译框架tvm,该系统的后端包括代码生成模块,用于生成目标后端代码,整个系统运行于gpu对应的电子设备上。
67.可选地,代码生成模块包括计算图遍历模块、算子映射模块、内存管理模块与代码输出模块。
68.其中,计算图遍历模块用于对第二计算图进行遍历,得到第二计算图的至少一个算子,以及,得到至少一个算子的内存配置信息。
69.算子映射模块用于基于第二计算图的至少一个算子生成每个算子对应的算子调用代码,其中,算子映射模块包括算子映射器与代码生成器。
70.内存管理模块用于基于第二计算图的至少一个算子的内存配置信息生成内存管理代码。
71.代码输出模块用于基于每个算子对应的算子调用代码与内存管理代码生成并输出目标后端代码。
72.需要说明的是,本发明实施例提供的算子映射模块,基于算子类型对至少一个算子进行分类,简化了代码生成器的设计与维护工作,并采用提前(ahead of time,aot)编译方法,在生成算子调用代码之前对计算图进行遍历,统计计算图中至少一个算子的输入输出形状以及内存信息,优化了reshape算子的计算开销,同时对于某些固定的数组参数直接组成向量作为算子的输入数据。
73.可选地,算子类型包括element

wise算子、reducing算子与broadcasting算子。
74.其中,element

wise算子用于对输入张量数据中的每个位置执行相同的操作,例如一元运算符(not或negative)、二元运算符(加、减、乘或除)或三元运算符(if a;then b;else c)。
75.reducing算子用于对输入张量数据的特定位置上的元素采用预设函数求解并输出结果。
76.broadcasting算子用于重新排列输入张量数据并将其存储至输出张量数据的适当位置,例如broadcast或slice。
77.其中,算子调用代码用于执行算子的计算任务。
78.一种实施方式中,基于计算图遍历模块对第二计算图进行遍历,获取第二计算图的至少一个算子,基于至少一个算子的算子类型将至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码,其中,算子调用代码用于执行算子的计算任务。
79.步骤102、获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码。
80.可以理解的是,由于各算子的输入数据或输出结果都存储于芯片的内存上,在执行计算图的计算任务的过程中,主机与芯片之间存在着大量的数据传输开销,因此,本发明实施例还提供一个内存管理模块,用于基于至少一个算子的内存配置信息生产内存管理代码,实现了一套完整高效的内存管理机制,基于内存池和新扩展的算子,极大地减少了内存分配、释放和数据传输的开销。
81.可选地,内存配置信息用于记录至少一个算子的输入数据内存信息与输出数据内存信息。
82.其中,算子的输入数据为变量节点,算子的输出结果为中间结果,例如,权重参数既可以是算子的输入数据,也可以是算子的输出结果。
83.其中,内存管理代码用于实现对至少一个算子的输入数据内存信息与输出结果内存信息进行内存分配、内存拷贝或内存释放。
84.一种实施方式中,将第二计算图输入计算图遍历模块,基于计算图遍历模块对第二计算图进行遍历,得到至少一个算子的输入数据内存信息与输出数据内存信息,将输入数据内存信息与输出数据内存信息记录到内存配置信息中,将该内存配置信息输入内存管理模块,输出内存管理代码。
85.步骤103、基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
86.可选地,目标后端代码包括一个计算图主函数、至少一个算子函数、至少一个全局变量、头文件声明以及包裹函数,例如,目标后端代码可以基于c 语言实现。
87.其中,计算图主函数用于指示第二计算图按照第一顺序执行计算任务,计算图主函数包括至少一个算子的输入输出内存请求与第二计算图的执行流程,具体包括内存分配、内存拷贝、输入参数、函数调用代码与内存释放。
88.可以理解的是,内存管理代码包括内存分配、内存拷贝与内存释放,均由内存管理模块生成;算子调用代码包括输入参数、函数调用代码与算子函数,均由算子映射模块生成。
89.其中,内存拷贝包括将从主机向芯片执行内存拷贝以及从芯片向主机执行内存拷贝。
90.全局变量主要用于计算图主函数中,用于控制权重参数更新机制的运行逻辑,并辅助内存管理模块进行内存分配、内存拷贝以及内存释放。
91.算子函数用于基于每一类算子的函数接口被计算图主函数按照顺序调用,并通过相应的运行逻辑执行第二计算图的计算任务。
92.头文件和包裹函数提供底层支持,其中,包裹函数能够调用计算图主函数来提供底层支持。
93.可选地,算子库包括第二计算图的至少一个算子的编译方法。
94.可以理解的是,本发明实施例通过每个算子对应的算子调用代码与内存管理代码组合得到目标后端代码,算子库对目标后端代码进行编译链接处理后,得到部署文件,该部署文件可以直接在芯片上运行,用于执行第一计算图的计算任务。
95.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,通过对第一计算图进行解析与优化处理得到第二计算图,提高计算图的计算效率,基于算子映射模块生成的每个算子对应的算子调用代码与内存管理模块生成的内存管理代码生成目标后端代码,再基于算子库对目标后端代码进行编译处理,得到部署文件,该部署文件用于执行第一计算图的计算任务,实现了一个端到端且支持神经网络训练的编译器,提高了gpu应用于神经网络训练与推理中的运算效率,扩展了gpu的应用范围。
96.图2是本发明实施例提供的目标后端代码的结构示意图。如图2所示,目标后端代码包括头文件声明、全局变量、算子函数、计算图主函数与包裹函数,其中,计算图主函数包括内存分配、内存拷贝、输入参数、函数调用代码与内存释放,内存拷贝主要分为主机向具有gpu的电子设备执行内存拷贝与具有gpu的电子设备向主机执行内存拷贝。
97.基于上述实施例的内容,所述算子映射模块包括至少一个算子代码生成器与算子映射器;
98.所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码,具体包括:
99.基于所述算子映射器获取至少一个算子的算子类型;
100.基于所述至少一个算子的算子类型将所述至少一个算子分发至每个算子对应的算子代码生成器;
101.基于所述至少一个算子与所述算子代码生成器内的代码生成模板类,输出每个算子对应的算子调用代码。
102.需要说明的是,本发明实施例提供的算子映射模块包括至少一个算子代码生成器与一个算子映射器,其中,每个算子代码生成器与每个算子形成对应关系。
103.可以理解的是,为了解决计算图的算子种类数量巨大,导致每个算子对应的代码生成器的设计效率降低且维护成本较高的问题,本发明实施例提供了一个算子映射器,算子映射器根据计算图中算子的计算特征将算子进行分类,例如element

wise算子、reducing算子或broadcasting算子,采用本发明实施例提供的算子映射器能够提高代码生成器的设计效率并减少其维护工作量,还能提高算子的扩展性。
104.可选地,算子映射器用于获取第二计算图的至少一个算子的算子类型,并基于算子类型将至少一个算子分发至每个算子对应的算子代码生成器。
105.可以理解的是,本发明实施例提供的算子代码生成器中包括一个算子对应的代码生成模板类,该代码生成模板类根据算子的具体参数生成算子对应的算子调用代码。
106.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,基于算子映射器将至少一个算子分发至每个算子对应的算子代码生成器,根据算子代码生成器内的代码生成模版类生成每个算子对应的算子调用代码,能够提高代码生成器的设计效率并减少其维护工作量,还能提高算子的扩展性。
107.基于上述实施例的内容,所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块之前,还包括:
108.获取第一算子,所述第一算子为所述第二计算图中的算子;
109.基于所述第一算子的算子类型与预设代码生成模板基类生成第一算子对应的代码生成模板类;
110.基于所述第一算子对应的代码生成模板类生成并注册所述第一算子对应的算子代码生成器。
111.需要说明的是,在算子进行扩展的情况下,算子映射模块中不包括新扩展的算子对应的代码生成器,则不能通过现有的算子映射模块生成新扩展的算子对应的算子调用代码,因此,本发明实施例还提供了一种针对新扩展的算子定义一个新的算子代码生成器的方法。
112.其中,第一算子属于第二计算图中新扩展的算子。
113.其中,算子映射模块包括预设代码生成模板基类。
114.一种实施方式中,获取第一算子,基于第一算子的算子类型对预设代码生成模板基类进行扩展,生成第一算子对应的代码生成模板类,基于第一算子对应的代码生成模板类通过通用工具函数或宏定义方法,定义一个算子代码生成器,并在算子映射模块中注册算子代码生成器,其中,算子代码生成器与第一算子相对应。
115.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,根据第一算子的算子类型与预设代码生成模版基类生成第一算子对应的代码生成模板类,再基于代码生成模板类实现对算子代码生成器的注册,实现了对代码生成器的扩展,提高了算子的扩展性,进一步扩展了gpu的应用范围。
116.图3是本发明实施例提供的支持机器学习训练的专用后端代码生成方法的流程示意图之二。如图3所示,该方法的具体流程包括:
117.将计算图输入计算图遍历模块,输出计算图的至少一个算子节点,算子映射器将至少一个算子映射到每个算子对应的算子代码生成器,基于算子代码生成器生成每个算子对应的算子调用代码,其中,算子调用代码包括输入参数、算子函数与函数调用代码。
118.将计算图输入计算图遍历模块,输出变量与中间结果的内存信息,再通过内存管理模块生成内存管理代码。
119.将每个算子对应的算子调用代码与内存管理代码输入至代码输出模块,输出目标后端代码。
120.基于上述实施例的内容,所述算子调用代码包括算子函数、输入参数以及函数调用代码中的至少一项;
121.所述输入参数包括以下各项中的至少一项:
122.以指针形式传入函数的第一张量数据;
123.基于提前aot编译方法从所述至少一个算子中获取的第二张量数据;
124.整数向量,所述整数向量是基于向量组机制得到。
125.可以理解的是,算子映射模块基于至少一个算子的算子类型生成每个算子类型对应的算子函数;对于第二计算图的至少一个算子,算子映射模块在主函数中生成每个算子对应的函数调用代码;对于固定的、需要额外定义的数组参数,算子映射模块在主函数中生成输入参数。
126.可选地,第二张量数据为张量大小,通常采用单个数字表示。
127.需要说明的是,本发明实施例采用aot编译方法,在编译阶段从至少一个算子中获取第二张量数据,将第二张量输入函数调用代码中。
128.基于上述实施例的内容,所述整数向量是基于向量组机制得到,具体包括:
129.将第二算子输入所述第二算子对应的算子代码生成器,输出整数向量,所述第二算子为所述第二计算图中输入参数包括所述整数向量的算子;
130.将所述整数向量发送至向量管理器,基于所述向量管理器生成所述整数向量的变量名,将所述整数向量的变量名发送至所述第二算子对应的算子代码生成器;
131.基于所述第二算子对应的算子代码生成器将所述变量名输出至所述第二算子对应的算子调用代码。
132.需要说明的是,输入参数中包括整数向量,该整数向量在编译阶段获取,在运行阶段输出至函数调用代码,因此,本发明实施例提供一种向量组机制的方法。
133.一种实施方式中,本发明实施例提供的向量组机制方法,在编译阶段维护向量管理器,在第二算子对应的算子代码生成器处理第二算子的情况下,若第二算子的输入参数为整数向量,则算子代码生成器生成第二算子的整数向量,并第二算子的将整数向量发送给向量管理器。
134.进一步地,向量管理器对第二算子的整数向量的信息进行存储,并为整数向量分配整数向量的变量名,将变量名返回至算子代码生成器,算子代码生成器基于整数向量的变量名输出第二算子对应的算子调用代码。
135.其中,在代码输出模块输出第二算子对应的算子调用代码的过程中,读取向量管理器中已记录的整数向量的信息,并输出整数向量。
136.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,基于向量管理器对整数向量的信息进行存储,并生成整数向量的变量名,算子代码生成器基于整数向量的变量名输出算子调用代码,实现了在编译阶段获取整数向量,在运行阶段使用整数向量的功能。
137.基于上述实施例的内容,所述内存管理代码用于:
138.基于所述至少一个算子的内存配置信息获取内存池;
139.获取所述至少一个算子的输入输出内存请求,基于所述至少一个算子的输入输出内存请求对所述内存池进行分配。
140.需要说明的是,在运行阶段执行计算图的计算任务会产生计算图内开销,即执行计算图所需的内存,现有技术中的tvm框架和芯片算子库的调用方式执行计算图的计算任务时,会产生冗余的数据操作,降低运算效率,因此,本发明实施例基于内存管理模块生成的内存管理代码能够减少冗余操作,提升执行计算图的运算效率,有效降低了计算图内开销。
141.可选地,输入输出内存请求为输入数据与输出结果所需的内存大小的请求。
142.其中,在运行阶段,内存管理代码用于基于至少一个算子的内存配置信息,获取至少一个算子的输入数据与输出结果所需的总内存,并向芯片申请获得总内存对应的内存池,在获取至少一个算子的输入输出内存请求的情况下,从内存池中分配每个算子的输入输出内存请求对应的内存。
143.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,通过内存管理模块生成的内存管理代码,用于实现内存分配,能够减少冗余操作,提升执行计算图的运算效率,有效降低了计算图内开销。
144.基于上述实施例的内容,所述内存管理代码还用于:
145.获取所述至少一个算子的输入输出内存请求对应的内存信息;
146.基于所述内存信息获取所述至少一个算子对应的权重参数,基于权重参数更新机制对所述权重参数进行更新处理。
147.需要说明的是,在运行阶段执行计算图的计算任务还会产生计算图间开销,即迭代执行计算图之间的数据开销,因此,本发明实施例中基于内存管理模块生成的内存管理代码能够基于权重更新机制在芯片内存中更新权重参数,减少了从芯片拷贝至主机的数据通信开销,以及将更新的权重参数从主机拷贝至芯片的数据通信开销,提高了计算图的运行效率。
148.可以理解的是,在执行神经网络训练(第二计算图)的过程中,为了提高训练的运算效率,需要确定训练的迭代次数与输出结果的迭代间隔,因此,本发明实施例中实现的内存管理代码内设置有一个命令算子,用于控制执行对神经网络训练的运行逻辑,并执行权重参数更新机制,实现权重参数的更新,有效降低了整个训练过程的开销。
149.其中,权重参数更新机制运行在芯片上,具体过程为更新算子获取待更新的权重矩阵对应的内存信息,并生成权重矩阵对应的张量程序,基于张量程序对权重参数进行更新,更新后的权重参数存储于权重矩阵对应的内存中。
150.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,通过内存管理模块生成的内存管理代码,用于对权重参数进行更新,实现内存拷贝,减少了计算图间开销,提高了计算图的运行效率。
151.基于上述实施例的内容,所述基于算子库对所述目标后端代码进行编译处理,具体包括:
152.获取算子库中第三算子的算子类型对应的预设子任务划分方法,所述第三算子为
补充算子;
153.基于所述预设子任务划分方法对所述第三算子对应的算子调用代码进行子任务划分处理,得到至少一个子任务;
154.基于所述至少一个子任务计算每个子任务的线程号,基于所述每个子任务的线程号并行执行所述至少一个子任务;
155.其中,所述目标后端代码中包括所述第三算子对应的算子调用代码。
156.需要说明的是,芯片上的算子库包括现有的算子的编译方法,无法对新扩展的算子(即补充算子)进行编译,因此,本发明实施例提供了补充算子的编译方法,实现了对算子库的扩展,提高算子的编译过程的效率。
157.一种实施方式中,每种算子类型都预先设置了子任务划分方法,例如,若算子类型为element

wise类型,预设子任务划分方法为每个线程处理一段连续的输入数据区域;若算子为rotate函数,每个线程处理至少一个连续的矩阵;若算子为组卷积函数,则每个线程处理至少一个连续的组。
158.可以理解的是,本发明实施例提供的对于第三算子的编译方法,分别实现了入口kernel函数与外部接口函数,在外部接口函数中对第三算子的算子调用代码进行子任务划分,得到第三算子对应的至少一个子任务,并将至少一个子任务发送至入口kernel函数,在入口kernel函数中计算每个子任务的线程号,并根据每个子任务的线程号并行执行第三算子对应的至少一个子任务,得到并整合至少一个运行结果,并将整合后的运行结果发送至外部接口函数。
159.本发明实施例提供的支持机器学习训练的专用后端代码生成方法,基于算子类型对应的预设子任务划分方法对第三算子对应的算子调用代码进行子任务划分处理,得到至少一个子任务,并基于每个子任务的线程号并行执行至少一个子任务,实现了对第三算子的编译处理,并实现对算子库的扩展,提高算子的编译过程的效率。
160.图4是本发明实施例提供的对补充算子对应的算子调用代码进行编译处理的流程示意图。如图4所示,该方法包括以下步骤:
161.步骤400、主机获取至少一个补充算子,并判断至少一个补充算子的算子类型;
162.步骤401、主机基于至少一个补充算子的算子类型对应的预设子任务划分方法对每个补充算子对每个补充算子对应的算子调用代码进行子任务划分处理,得到每个补充算子对应的至少一个子任务;
163.步骤402、电子设备获取每个补充算子对应的至少一个子任务,并计算每个子任务的线程号;
164.步骤403、电子设备基于每个子任务的线程号并行执行每个补充算子对应的至少一个子任务,得到并整合计算结果;
165.步骤404、主机获取电子设备发送的整合后的计算结果。
166.下面对本发明提供的支持机器学习训练的专用后端代码生成装置进行描述,下文描述的支持机器学习训练的专用后端代码生成装置与上文描述的支持机器学习训练的专用后端代码生成方法可相互对应参照。
167.图5是本发明实施例提供的支持机器学习训练的专用后端代码生成装置的结构示意图。如图5所示,该支持机器学习训练的专用后端代码生成装置包括:处理单元500、算子
调用代码生成单元510、内存管理代码生成单元520和编译单元530,其中,
168.处理单元500,用于获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
169.算子调用代码生成单元510,用于获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
170.内存管理代码生成单元520,用于获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
171.编译单元530,用于基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
172.本发明实施例提供的支持机器学习训练的专用后端代码生成装置,通过对第一计算图进行解析与优化处理得到第二计算图,提高计算图的计算效率,基于算子映射模块生成的每个算子对应的算子调用代码与内存管理模块生成的内存管理代码生成目标后端代码,再基于算子库对目标后端代码进行编译处理,得到部署文件,该部署文件用于执行第一计算图的计算任务,实现了一个端到端且支持神经网络训练的编译器,提高了gpu应用于神经网络训练与推理中的运算效率,扩展了gpu的应用范围。
173.可选地,所述算子映射模块包括至少一个算子代码生成器与算子映射器;
174.所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码,具体包括:
175.基于所述算子映射器获取至少一个算子的算子类型;
176.基于所述至少一个算子的算子类型将所述至少一个算子分发至每个算子对应的算子代码生成器;
177.基于所述至少一个算子与所述算子代码生成器内的代码生成模板类,输出每个算子对应的算子调用代码。
178.可选地,所述基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块之前,还包括:
179.获取第一算子,所述第一算子为所述第二计算图中的算子;
180.基于所述第一算子的算子类型与预设代码生成模板基类生成第一算子对应的代码生成模板类;
181.基于所述第一算子对应的代码生成模板类生成并注册所述第一算子对应的算子代码生成器。
182.所述算子调用代码包括算子函数、输入参数以及函数调用代码中的至少一项;
183.所述输入参数包括以下各项中的至少一项:
184.以指针形式传入函数的第一张量数据;
185.基于提前aot编译方法从所述至少一个算子中获取的第二张量数据;
186.整数向量,所述整数向量是基于向量组机制得到。
187.所述整数向量是基于向量组机制得到,具体包括:
188.将第二算子输入所述第二算子对应的算子代码生成器,输出整数向量,所述第二
算子为所述第二计算图中输入参数包括所述整数向量的算子;
189.将所述整数向量发送至向量管理器,基于所述向量管理器生成所述整数向量的变量名,将所述整数向量的变量名发送至所述第二算子对应的算子代码生成器;
190.基于所述第二算子对应的算子代码生成器将所述变量名输出至所述第二算子对应的算子调用代码。
191.所述内存管理代码用于:
192.基于所述至少一个算子的内存配置信息获取内存池;
193.获取所述至少一个算子的输入输出内存请求,基于所述至少一个算子的输入输出内存请求对所述内存池进行分配。
194.所述内存管理代码还用于:
195.获取所述至少一个算子的输入输出内存请求对应的内存信息;
196.基于所述内存信息获取所述至少一个算子对应的权重参数,基于权重参数更新机制对所述权重参数进行更新处理。
197.所述基于算子库对所述目标后端代码进行编译处理,具体包括:
198.获取算子库中第三算子的算子类型对应的预设子任务划分方法,所述第三算子为补充算子;
199.基于所述预设子任务划分方法对所述第三算子对应的算子调用代码进行子任务划分处理,得到至少一个子任务;
200.基于所述至少一个子任务计算每个子任务的线程号,基于所述每个子任务的线程号并行执行所述至少一个子任务;
201.其中,所述目标后端代码中包括所述第三算子对应的算子调用代码。
202.本发明提供的支持机器学习训练的专用后端代码生成装置能够实现图1至图4的方法实施例实现的各个过程,并达到相同的技术效果,为避免重复,这里不再赘述。
203.图6为本发明提供的电子设备的结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(communications interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行支持机器学习训练的专用后端代码生成方法,该方法包括:
204.获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
205.获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
206.获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
207.基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
208.此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本
发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
209.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的支持机器学习训练的专用后端代码生成方法,该方法包括:
210.获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
211.获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
212.获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
213.基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
214.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的支持机器学习训练的专用后端代码生成方法,该方法包括:
215.获取第一计算图,对所述第一计算图进行解析与优化处理,得到第二计算图,所述第一计算图为至少一个算子按照第一顺序组成的神经网络模型;
216.获取第二计算图的至少一个算子,基于所述至少一个算子的算子类型将所述至少一个算子分发至算子映射模块,输出每个算子对应的算子调用代码;
217.获取所述至少一个算子的内存配置信息,将所述至少一个算子的内存配置信息输入内存管理模块,输出内存管理代码;
218.基于所述每个算子对应的算子调用代码与所述内存管理代码生成目标后端代码,基于算子库对所述目标后端代码进行编译处理,得到部署文件,所述部署文件用于执行所述第一计算图的计算任务。
219.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
220.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该
计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
221.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献