opencl dnn库的实现方法、装置、电子设备及存储介质
技术领域
1.本技术涉及机器学习技术领域,尤其涉及一种opencl dnn库的实现方法、装置、电子设备及存储介质。
背景技术:2.由于可使用的大数据和计算能力的快速增长,机器学习方法获得了巨大的关注和投资,已成功应用于解决学术界和工业界的许多问题。机器学习框架一般通过调用深度神经网络库(dnn库)提升计算效能。所谓dnn库是经过高度优化的计算加速库,对应于深度神经网络中被高频调用或计算量较大的标准例程(例如卷积、池化等)。
3.现有dnn库主要由英伟达、amd等少数国外厂商开发并根据自有硬件设备特点进行了优化,其封闭性导致其他厂商生产的通用加速器尤其是国产加速器难以在深度学习领域发挥作用。
技术实现要素:4.有鉴于此,本技术提供了一种opencldnn库的实现方法、装置、电子设备及存储介质,以实现opencldnn库在opencl硬件设备上使用和执行的通用性。
5.第一方面,本技术提供了一种opencl dnn库的实现方法,包括:
6.通过对预设深度神经网络库的重构和修改,实现通用opencldnn库;
7.对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。
8.可选地,所述通过对预设深度神经网络库的重构和修改,实现通用opencldnn库包括:
9.对所述opencldnn库对应的编译文件进行修改;
10.对所述opencldnn库中opencl核函数进行修改重构,以实现所述中opencl核函数在加速设备上的并行计算;
11.对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。
12.可选地,所述对所述opencldnn库对应的编译文件进行修改包括:
13.对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;
14.去掉与特定软硬件相关依赖部分;
15.指定系统中预设矩阵乘法库的安装路径。
16.可选地,所述对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数包括:
17.在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;
18.在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;
19.修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;
20.调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。
21.可选地,在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,所述方法还包括:
22.通过外部封装的api接口调用所述opencldnn库中对应的核函数;
23.基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。
24.第二方面,本技术提供了一种opencl dnn库的实现装置,包括:
25.实现单元,用于通过对预设深度神经网络库的重构和修改,实现通用opencldnn库;
26.封装单元,用于对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。
27.可选地,所述实现单元包括:
28.修改模块,用于对所述opencldnn库对应的编译文件进行修改;
29.第一重构模块,用于对所述opencldnn库中opencl核函数进行修改重构,以实现所述中opencl核函数在加速设备上的并行计算;
30.第二重构模块,用于对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。
31.可选地,所述修改模块,还用于:
32.对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;
33.去掉与特定软硬件相关依赖部分;
34.指定系统中预设矩阵乘法库的安装路径。
35.可选地,所述封装单元还用于:
36.在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;
37.在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;
38.修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;
39.调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。
40.可选地,所述装置还包括:
41.调用单元,用于在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,通过外部封装的api接口调用所述opencldnn库中对应的核函数;
42.返回单元,用于基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。
43.第三方面,本技术提供了一种电子设备,包括:
44.至少一个处理器;以及
45.与所述至少一个处理器通信连接的存储器;其中,
46.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述第一方面任一项所述的方法。
47.第四方面,本技术提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行根据上述第一方面任一项所述的方法。
48.第五方面,本技术提供了一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序在被处理器执行时实现根据上述第一方面任一项所述的方法。
49.相比现有技术,本技术具有以下有益效果:
50.本技术提供了一种opencl dnn库的实现方法、装置、电子设备及存储介质,首先通过对预设深度神经网络库的重构和修改,实现通用opencl dnn库,对所述opencl dnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。与相关技术的封闭性相比,此方法通过重构预设深度神经网络库中opencl目标核函数与接口函数,完成了预设深度神经网络库的通用化修改,实现了opencldnn库在opencl硬件设备上使用和执行的通用性。
51.应当理解,本部分所描述的内容并非旨在标识本技术的实施例的关键或重要特征,也不用于限制本技术的范围。本技术的其它特征将通过以下的说明书而变得容易理解。
附图说明
52.附图用于更好地理解本方案,不构成对本技术的限定。其中:
53.图1为本技术实施例所提供的一种opencl dnn库的实现方法的流程示意图;
54.图2为申请实施例所提供的一种调用opencl dnn库的示意图;
55.图3为本技术实施例所提供的一种opencl dnn库的实现装置的结构示意图;
56.图4为本技术实施例所提供的另一种opencl dnn库的实现装置的结构示意图;
57.图5为本技术实施例提供的一种电子设备示例示意图。
具体实施方式
58.下面结合附图和具体实施方式对本技术的具体实施方式做进一步的详细描述。所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
59.为了便于理解本技术实施例所述的opencl dnn库的实现方法,图1为本技术实施例所提供的一种opencl dnn库的实现方法的流程示意图。本技术实施例通过修改和重构预设深度神经网络库中opencl目标核函数与接口函数,并进行封装得到opencl dnn库,实现了opencl dnn库在硬件加速器上使用和执行的通用性;如图1所示,该方法包括以下步骤:
60.步骤101、通过对预设深度神经网络库的重构和修改,实现通用opencldnn库。
61.本技术实施例实现了可兼容众多硬件加速设备的通用opencl dnn库,在支持opencl标准的硬件加速设备上可以调用和进行计算加速。实际应用中,opencldnn基于预设深度神经网络库实现,对预设深度神经网络库原有代码进行了大量改写和重构,主要包括
对预设深度神经网络库中编译文件的修改和opencl接口函数的修改两部分。所述预设深度神经网络库包含但不限于miopen库。
62.步骤102、对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。
63.本技术实施例的设计方案总体上是要设计进行opencl函数核心运算的内部实现模块与提供对外计算功能接口的外部封装模块。在内部实现模块中,主要实现的内容包括使用opencl核函数来实现核心功能的并行计算,以及对opencl核函数调用和原生接口函数的封装。在外部封装模块中,主要实现的内容包括对内部实现模块中使用的接口函数的更高层封装,以及向外对开发者提供的api接口函数。总的结构如图2所示。
64.以二维卷积计算为例,内部实现api接口如下所示:
65.接口名称如下所示:
66.voidconvolutiondescriptor::convolutionforwardimmediate(handle&handle,consttensordescriptor&wdesc,
67.constdata_t w,
68.consttensordescriptor&xdesc,
69.constdata_t x,
70.consttensordescriptor&ydesc,
71.data_t y,
72.data_t workspace,
73.conststd::size_t workspacesize,
74.const solver::id solver_id)const
75.api接口参数如表1所示:
76.表1
77.序号参数名参数类型参数描述1handlehandle&ocldnn的句柄2wdescconst tensordescriptor&输入张量w的描述符3wconstdata_t输入张量w4xdescconst tensordescriptor&输入张量x的描述符5xconstdata_t输入张量x6ydescconst tensordescriptor&输出张量y的描述符7ydata_t输出张量y8workspacedata_topencl的工作区9workspacesizestd::size_t工作区大小10solver_idconst solver::id使用的卷积算法id
78.本技术实施例提供的opencl dnn库的实现方法,首先通过对预设深度神经网络库的重构和修改,实现通用opencl dnn库,对所述opencl dnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。与相关技术的封闭性相比,此方法通过重构预设深度神经网络库中opencl目标核函数与接口函数,完成了预设深度神经网络库的通用化修改,实现了opencldnn库在opencl硬件设备上使用和执行的通用性。
79.请继续参阅图2,在内部实现中,主要实现的内容包括使用opencl核函数来实现核心功能的并行计算,以及对opencl的核函数调用接口的封装。一般情况下,对于不同厂商生产的硬件设备,只要能够兼容opencl标准,编写的opencl程序就能在设备上面编译、运行。相对于传统的高性能计算,opencl的可移植性能够使得并行程序开发者不需要针对特定产商的硬件,学习专用编程语言进行开发。
80.为了实现一个基于opencl的通用opencldnn库,需要通过对预设深度神经网络库的重构和修改,实现通用opencldnn库,通过下述方式实现:
81.对所述opencldnn库对应的编译文件进行修改,对所述opencldnn库中opencl核函数进行修改重构,以实现所述中opencl核函数在加速设备上的并行计算,对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。
82.对所述opencldnn库对应的编译文件进行修改采用下述方案实现:对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;去掉与特定软硬件相关依赖部分;指定系统中预设矩阵乘法库(例如miopengemm库)的安装路径。
83.由于预设深度神经网络库的源代码通过gcc编译,整个编译过程由cmake工具组织,cmakelist.txt文件中包含了需要被编译的文件和依赖库的路径等信息。预设深度神经网络库源码在编译安装时需要检查系统中是否已安装rocm软件平台。rocm平台提供了预设深度神经网络库中hip后端所需的amd硬件设备驱动、hcc编译器、相关数学库等依赖。因此,对预设深度神经网络库进行修改时,需要对预设深度神经网络库源码根目录下的编译配置文件cmakelists.txt进行修改,跳过对rocm平台的检查以及与hip后端相关的部分。
84.与此同时,考虑到预设深度神经网络库依赖预设矩阵乘法提供的矩阵乘法完成卷积操作的核心运算,在编译选项中还需要指定预设深度神经网络库预设矩阵乘法的安装路径。由于预设矩阵乘法没有涉及amd相关软硬件的依赖,因此可通过指定opencl路径后安装和使用该库。
85.预设深度神经网络库是由amd公司推出的一个开源的dnn库,旨在为amd的gpu提供深度学习的算法支持。与cudnn库相似,预设深度神经网络库同样涵盖了卷积神经网络、循环神经网络等常见模型的核心算法,包含opencl以及hip两种后端实现。预设深度神经网络库源码中的接口函数和部分opencl主机端代码中包含了amd对opencl标准的自定义拓展,例如,预设深度神经网络库中opencl后端使用void*类型指针接收主机端数据,通过强制类型转换的方式将void类型指针转换成cl_mem类型对象,从而实现了主机端和设备端间的数据传输。这种传输方式仅适用于amd设备。因此,需要对以下四个部分进行如下重写:
86.在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;
87.在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;
88.修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;
89.调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。
90.具体来说,在opencl标准中主机端与设备端进行数据传输时,需要提前在设备端创建用于接收主机端数据的cl_mem类型对象,创建cl_mem类型对象时需要指定上下文信
息。在预设深度神经网络库可使用预设深度神经网络库getstream()函数通过handle对象获取opencl命令队列并进一步使用clgetcommandqueueinfo()函数得到opencl上下文信息。在将运算结果传输回主机端时,需要cl_mem类型对象用于获取计算结果,使用clenqueuereadbuffer()函数将cl_mem类型对象中的结果读取到主机端,同时需要在函数声明处添加入参用于结果数据的返回。
91.作为本技术实施例的具体应用,在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,所述方法还包括:
92.通过外部封装的api接口调用所述opencldnn库中对应的核函数,基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。
93.在程序中调用opencldnn中提供的对外api接口,并给出对应的输入参数/输出参数。根据调用的函数与传入的参数信息,交由内部目标核函数进行实际的运算。以二维卷积的计算为例,对外封装的接口函数名称、接口参数与返回值参数如下所示:
94.接口名称如下所示:
95.oclstatus_t oclconvolutionforward(oclhandle_t handle,const void*alpha,const ocltensordescriptor_t xdesc,const void*x,const ocltensordescriptor_t wdesc,const void*w,const oclconvolutiondescriptor_t convdesc,oclconvfwdalgorithm_t algo,const void*beta,const ocltensordescriptor_t ydesc,void*y,void*workspace,size_t workspacesize)
96.接口参数如表2所示:
97.表2
[0098][0099]
返回值如表3所示:
[0100]
表3
[0101]
序号字段名字段描述1oclstatus_t计算状态
[0102]
目标核函数实现主要使用c++与opencl标准的编程语言实现opencldnn库的核心计算功能(比如卷积、池化等等),通过接收来自调用接口传入的参数,并调用相应的opencl核函数,在opencl设备上进行具体的并行计算。其中开放计算语言(open computing language,opencl)是一个为异构平台进行并行编程的开放标准。opencl标准中定义了核函数运行时以及相关内联函数,提供了基于任务分割和数据分割的并行计算机制。
[0103]
在内部opencl核函数中得到的dnn运算结果,通过接口参数中的输出参数返回给外部调用。
[0104]
具体实施流程请参阅图2,首先通过预设调用接口接收用户发出的函数调用指令,此函数调用指令中包含opencldnn库的标识信息及接口函数参数信息,然后opencldnn库根据接收到的api接口函数参数信息调用对应的目标核函数,执行目标核函数计算,最终使用指针将目标核函数的计算结果通过api调用接口返回到用户。
[0105]
与上述的opencl dnn库的实现方法相对应,本技术还提出一种opencl dnn库的实现装置。由于本技术的装置实施例与上述的方法实施例相对应,对于装置实施例中未披露的细节可参照上述的方法实施例,本技术中不再进行赘述。
[0106]
图3为本技术实施例所提供的一种opencl dnn库的实现装置的结构示意图,包括:
[0107]
实现单元21,用于通过对预设深度神经网络库的重构和修改,实现通用opencldnn库;
[0108]
封装单元22,用于对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。
[0109]
可选的,在本实施例一种可能的实现方式中,如图4所示,所述实现单元21包括:
[0110]
修改模块211,用于对所述opencldnn库对应的编译文件进行修改;
[0111]
第一重构模块212,用于对所述opencldnn库中opencl核函数进行修改重构,以实现所述中opencl核函数在加速设备上的并行计算;
[0112]
第二重构模块213,用于对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。
[0113]
可选的,在本实施例一种可能的实现方式中,如图4所示,所述修改模块211,还用于:
[0114]
对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;
[0115]
去掉与特定软硬件相关依赖部分;
[0116]
指定系统中预设矩阵乘法库的安装路径。
[0117]
可选的,在本实施例一种可能的实现方式中,如图4所示,所述封装单元22还用于:
[0118]
在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;
[0119]
在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;
[0120]
修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;
[0121]
调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。
[0122]
可选的,在本实施例一种可能的实现方式中,如图4所示,所述装置还包括:
[0123]
调用单元23,用于在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,通过外部封装的api接口调用所述opencldnn库中对应的核函数;
[0124]
返回单元24,用于基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。
[0125]
根据本技术的实施例,本技术还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0126]
图5示出了可以用来实施本技术的实施例的示例电子设备300的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算
装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本技术的实现。
[0127]
如图5所示,设备300包括计算单元301,其可以根据存储在rom(read-only memory,只读存储器)302中的计算机程序或者从存储单元308加载到ram(random access memory,随机访问/存取存储器)303中的计算机程序,来执行各种适当的动作和处理。在ram 303中,还可存储设备300操作所需的各种程序和数据。计算单元301、rom 302以及ram 303通过总线304彼此相连。i/o(input/output,输入/输出)接口305也连接至总线304。
[0128]
设备300中的多个部件连接至i/o接口305,包括:输入单元306,例如键盘、鼠标等;输出单元307,例如各种类型的显示器、扬声器等;存储单元308,例如磁盘、光盘等;以及通信单元309,例如网卡、调制解调器、无线通信收发机等。通信单元309允许设备300通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0129]
计算单元301可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元301的一些示例包括但不限于cpu(central processing unit,中央处理单元)、gpu(graphic processing units,图形处理单元)、各种专用的ai(artificial intelligence,人工智能)计算芯片、各种运行机器学习模型算法的计算单元、dsp(digital signal processor,数字信号处理器)、以及任何适当的处理器、控制器、微控制器等。计算单元301执行上文所描述的各个方法和处理,例如opencl dnn库的实现方法。例如,在一些实施例中,opencl dnn库的实现方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元308。在一些实施例中,计算机程序的部分或者全部可以经由rom 302和/或通信单元309而被载入和/或安装到设备300上。当计算机程序加载到ram 303并由计算单元301执行时,可以执行上文描述的方法的一个或多个步骤。备选地,在其他实施例中,计算单元301可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行前述opencl dnn库的实现方法。
[0130]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、fpga(field programmable gate array,现场可编程门阵列)、asic(application-specific integrated circuit,专用集成电路)、assp(application specific standard product,专用标准产品)、soc(system on chip,芯片上系统的系统)、cpld(complex programmable logic device,复杂可编程逻辑设备)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0131]
用于实施本技术的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0132]
在本技术的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供
指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、ram、rom、eprom(electrically programmable read-only-memory,可擦除可编程只读存储器)或快闪存储器、光纤、cd-rom(compact disc read-only memory,便捷式紧凑盘只读存储器)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0133]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(cathode-ray tube,阴极射线管)或者lcd(liquid crystal display,液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0134]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:lan(local area network,局域网)、wan(wide area network,广域网)、互联网和区块链网络。
[0135]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务("virtual private server",或简称"vps")中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0136]
其中,需要说明的是,人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,既有硬件层面的技术也有软件层面的技术。人工智能硬件技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理等技术;人工智能软件技术主要包括计算机视觉技术、语音识别技术、自然语言处理技术以及机器学习/深度学习、大数据处理技术、知识图谱技术等几大方向。
[0137]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本技术中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本技术公开的技术方案所期望的结果,本文在此不进行限制。
[0138]
上述具体实施方式,并不构成对本技术保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本技术的精神和原则之内所作的修改、等同替换和改进等,均应包含在本技术保护范围之内。
技术特征:1.一种opencl dnn库的实现方法,其特征在于,包括:通过对预设深度神经网络库的重构和修改,实现通用opencldnn库;对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。2.根据权利要求1所述的方法,其特征在于,所述通过对预设深度神经网络库的重构和修改,实现通用opencldnn库包括:对所述opencldnn库对应的编译文件进行修改;对所述opencldnn库中opencl核函数进行修改重构,以实现所述opencl核函数在加速设备上的并行计算;对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。3.根据权利要求2所述的方法,其特征在于,所述对所述opencldnn库对应的编译文件进行修改包括:对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;去掉与特定软硬件相关依赖部分;指定系统中预设矩阵乘法库的安装路径。4.根据权利要求2所述的方法,其特征在于,所述对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数包括:在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。5.根据权利要求1所述的方法,其特征在于,在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,所述方法还包括:通过外部封装的api接口调用所述opencldnn库中对应的核函数;基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。6.一种opencl dnn库的实现装置,其特征在于,包括:实现单元,用于通过对预设深度神经网络库的重构和修改,实现通用opencldnn库;封装单元,用于对所述opencldnn库中的opencl核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数。7.根据权利要求6所述的装置,其特征在于,所述实现单元包括:修改模块,用于对所述opencldnn库对应的编译文件进行修改;第一重构模块,用于对所述opencldnn库中opencl核函数进行修改重构,以实现所述中opencl核函数在加速设备上的并行计算;第二重构模块,用于对所述opencl核函数对应api接口进行重构修改,以便通过所述api接口调用所述opencl核函数。
8.根据权利要求7所述的装置,其特征在于,所述修改模块,还用于:对预设深度神经网络库源码中的编译配置文件cmakelists.txt进行修改;去掉与特定软硬件相关依赖部分;指定系统中预设深度神经网络库预设矩阵乘法库的安装路径。9.根据权利要求7所述的装置,其特征在于,所述封装单元还用于:在所述api接口中根据从主机端传入的句柄对象,将命令队列与上下文信息进行绑定;在所述api接口中创建用来接收主机端数据的cl_mem数据类型对象;修改所述预设深度神经网络库的opencl的后端接口及其实现代码,以将计算结果读回主机端;调整预设深度神经网络库中opencl程序主机端的预设参数,从而能够使opencl核函数正常运行。10.根据权利要求6所述的装置,其特征在于,所述装置还包括:调用单元,用于在对所述opencldnn库中的opencl的核函数对应的api接口进行封装,以便通过所述api接口调用所述核函数之后,通过外部封装的api接口调用所述opencldnn库中对应的核函数;返回单元,用于基于输入参数执行所述核函数的运算,并使用指针将运算结果通过所述api接口进行返回。11.一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-5中任一项所述的方法。12.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行根据权利要求1-5中任一项所述的方法。13.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-5中任一项所述的方法。
技术总结本申请提供了一种OpenCL DNN库的实现方法、装置、电子设备及存储介质,涉及机器学习技术领域,主要技术方案包括:首先通过对预设深度神经网络库的重构和修改,实现通用OpenCL DNN库,对所述OpenCL DNN库中的OpenCL核函数对应的API接口进行封装,以便通过所述API接口调用所述核函数。与相关技术的封闭性相比,此方法通过重构预设深度神经网络库中OpenCL目标核函数与接口函数,完成了预设深度神经网络库的通用化修改,实现了OpenCLDNN库在OpenCL硬件设备上使用和执行的通用性。硬件设备上使用和执行的通用性。硬件设备上使用和执行的通用性。
技术研发人员:张玉志 陈锐 孙羽菲 郭强 隋轶丞 石昌青 陈禹乔 程大果
受保护的技术使用者:南开大学
技术研发日:2022.06.20
技术公布日:2022/11/1