本说明书涉及计算机,尤其涉及一种算子调用代码自动生成的方法、装置、介质及设备。
背景技术:
1、算子是深度学习框架的基本组件,一般ai模型由若干个计算模块组合而成,比如全连接层dense、卷积层conv、激活函数relu,计算模块的实现是通过调用封装好的后端算子来完成的。由于计算模块的数据处理对象一般为张量(tensor),而不同的后端硬件平台对tensor的存储、处理和计算方式有所不同,因此不同的后端硬件平台会对同一个算子有不同的实现细节,暴露出来的算子调用接口也有所不同。
2、要想实现对特定后端硬件平台上的算子的调用,需要根据其格式要求,编写算子调用代码。现有的框架下,需要根据算子调用需要的所有信息为每一种算子编写一个算子调用代码,进而完成对底层算子调用接口的调用。
3、然而,目前在深度学习框架对新的硬件平台进行适配的过程中,由于后端算子的实现方式发生了改变,需要开发人员重新编写新的算子调用代码来实现对后端算子的调用,其编写过程较为复杂,这不但会耗费大量的时间,并且造成了人力资源的严重浪费。
4、因此,如何提高算子调用代码的生成效率,减少资源的浪费,是一个亟待解决的问题。
技术实现思路
1、本说明书提供一种算子调用代码自动生成的方法、装置、介质及设备,以部分的解决现有技术存在的上述问题。
2、本说明书采用下述技术方案:
3、本说明书提供了一种算子调用代码自动生成的方法,包括:
4、获取后端硬件平台对应的算子库基本信息以及目标深度学习算法的计算图;
5、根据所述算子库基本信息生成算子调用代码的代码头,所述代码头用于引入所述硬件平台的算子库以及依赖库;
6、对所述计算图进行解析,确定所述计算图中的各前端算子;
7、针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句以及模板函数的调用语句;
8、根据所述代码头、所述声明语句、所述调用语句以及该算子对应的配置信息,生成完整的后端算子的调用代码;
9、根据每个后端算子的调用代码调用所述后端硬件平台的各后端算子,以通过所述各后端算子执行计算任务。
10、可选地,所述算子库基本信息包括:所述后端硬件平台算子库的头文件所在的路径与名称;
11、根据所述算子库基本信息生成算子调用代码的代码头,具体包括:
12、根据所述算子库的头文件所在的路径与名称,生成依赖库的引入信息以及所述算子库的引入信息;
13、根据所述依赖库的引入信息以及所述算子库的引入信息生成所述代码头。
14、可选地,针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句以及模板函数的调用语句之前,所述方法还包括:
15、根据该前端算子对应的配置信息,确定该前端算子与所述算子调用模板之间的映射关系。
16、可选地,针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句及对模板函数的调用语句,具体包括:
17、获取以该前端算子的名称作为键的目标键值对;
18、确定所述目标键值对中的值所对应的算子调用模板,并生成所述声明语句以及所述调用语句,其中,针对每个算子调用模板,该算子调用模板对应至少一种前端算子。
19、可选地,所述配置信息包括:算子调用模板的名称,输入张量个数、输出张量个数,以及,后端算子对应运算的描述对象申明,运算的操作申明,及描述对象的内存释放语句。
20、可选地,根据所述代码头、所述声明语句、所述调用语句以及该算子对应的配置信息,生成完整的后端算子的调用代码,具体包括:
21、根据所述声明语句以及所述调用语句调用所述算子调用模板对应模板函数的完整函数体;
22、根据所述模板函数、所述代码头以及所述配置信息生成所述后端算子的调用代码。
23、可选地,所述算子调用模板对应的模板函数中包含有各功能模块的模块代码,所述模块代码包括:设备管理模块代码、内存申请模块代码、张量申明模块代码、数据搬运模块代码、运算操作模块代码以及内存释放模块代码。
24、本说明书提供了一种算子调用代码自动生成装置,包括:
25、获取模块,获取后端硬件平台对应的算子库基本信息以及目标深度学习算法的计算图;
26、第一生成模块,根据所述算子库基本信息生成算子调用代码的代码头,所述代码头用于引入所述硬件平台的算子库以及依赖库;
27、解析模块,对所述计算图进行解析,确定所述计算图中的各前端算子;
28、确定模块,针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句以及模板函数的调用语句;
29、第二生成模块,根据所述代码头、所述声明语句、所述调用语句以及该算子对应的配置信息,生成完整的后端算子的调用代码;
30、调用模块,根据每个后端算子的调用代码调用所述后端硬件平台的各后端算子,以通过所述各后端算子执行计算任务。
31、本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述算子调用代码自动生成的方法。
32、本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述算子调用代码自动生成的方法。
33、本说明书采用的上述至少一个技术方案能够达到以下有益效果:
34、在本说明书提供的算子调用代码自动生成的方法中,获取后端硬件平台对应的算子库基本信息以及目标深度学习算法的计算图;根据算子库基本信息生成算子调用代码的代码头;对计算图进行解析,确定计算图中的各前端算子;针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句以及模板函数的调用语句;根据代码头、声明语句、调用语句以及该算子对应的配置信息,生成后端算子的调用代码;根据每个后端算子的调用代码调用各后端算子,以通过各后端算子执行计算任务。
35、从上述方法可以看出,本方案可以通过对深度学习算法计算图进行解析,进而根据前端算子和后端硬件平台中算子库的映射配置信息,自动生成后端算子的调用代码,相比于开发人员重新编写算子调用代码的方式,本方案可以自动生成新算子的调用代码,提高了算子调用代码的生成效率,极大地节省了人力资源以及算子调用的复杂度。
1.一种算子调用代码自动生成的方法,其特征在于,所述方法应用与深度学习框架,包括:
2.如权利要求1所述的方法,其特征在于,所述算子库基本信息包括:所述后端硬件平台算子库的头文件所在的路径与名称;
3.如权利要求1所述的方法,其特征在于,针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句以及模板函数的调用语句之前,所述方法还包括:
4.如权利要求1所述的方法,其特征在于,针对每个前端算子,根据该前端算子与算子调用模板之间的映射关系,确定该算子对应算子调用模板的声明语句及对模板函数的调用语句,具体包括:
5.如权利要求1所述的方法,其特征在于,所述配置信息包括:算子调用模板的名称,输入张量个数、输出张量个数,以及,后端算子对应运算的描述对象申明,运算的操作申明,及描述对象的内存释放语句。
6.如权利要求1所述的方法,其特征在于,根据所述代码头、所述声明语句、所述调用语句以及该算子对应的配置信息,生成完整的后端算子的调用代码,具体包括:
7.如权利要求1所述的方法,其特征在于,所述算子调用模板对应的模板函数中包含有各功能模块的模块代码,所述模块代码包括:设备管理模块代码、内存申请模块代码、张量申明模块代码、数据搬运模块代码、运算操作模块代码以及内存释放模块代码。
8.一种算子调用代码自动生成装置,其特征在于,包括:
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~7任一项所述的方法。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1~7任一项所述的方法。