本公开涉及机器学习,尤其涉及一种opencl pytorch的实现方法。
背景技术:
1、为了适应越来越大的计算需求,有效利用各厂商的加速设备,越来越多支持开放运算语言(open computing language,opencl)后端的深度学习框架被提出。
2、目前,pytorch框架无法直接在opencl的设备上训练模型,只能将训练好的模型转换成支持pytorch mobile的模型在opencl的设备中执行模型推理,因此,如何实现opencl版本的pytorch框架是目前亟需解决的问题。
技术实现思路
1、本公开提供了一种opencl pytorch的实现方法。其主要目的在于实现opencl版本的pytorch框架。
2、根据本公开的第一方面,提供了一种opencl pytorch的实现方法,其中,所述方法应用于opencl算子,包括:
3、基于opencl标准实现可在opencl设备中运算的opencl算子库;其中,所述opencl算子库用于接收pytorch框架发送的算子调用信息;
4、建立所述opencl算子库与opencl核函数库之间的链接;其中,所述opencl核函数库包含至少一个用户开发的opencl核函数接口或开源opencl计算库的核函数接口;所述opencl算子库基于所述链接调用所述opencl核函数库中的核函数接口;
5、基于所述opencl算子库,实现pytorch框架对所述opencl核函数库的调用。
6、可选的,所述基于所述opencl算子库,实现pytorch框架对所述opencl核函数库的调用包括:
7、基于所述opencl算子获取所述pytorch框架发送的算子调用信息;其中,所述算子调用信息包括至少一个计算步骤,不同计算步骤对应不同核函数;
8、确定所述算子调用信息包含的各所述计算步骤,并确定各所述计算步骤对应的目标核函数;
9、在所述opencl核函数库中调用对应的各目标核函数。
10、可选的,在获取pytorch框架的算子调用信息之后,所述方法还包括:
11、获取pytorch框架发送的待计算数据;
12、基于预设封装方式对所述待计算数据进行封装及格式转换。
13、可选的,在所述opencl核函数库中调用对应的各目标核函数之后,所述方法还包括:
14、基于各所述目标核函数名称在所述opencl核函数库中调用对应的目标opencl核函数接口;
15、确定执行各所述目标opencl核函数的目标opencl设备;
16、基于所述目标opencl设备执行所述opencl核函数,对所述待计算数据进行计算。
17、可选的,所述opencl核函数库中至少包含所述opencl kernel与所述opencllibrary,所述opencl kernel包括用户开发的opencl核函数接口,opencl library包括开源opencl计算库的核函数接口;所述在预设核函数库中调用对应的各目标核函数还包括:
18、在所述opencl kernel及所述opencl library中调用对应的各所述目标核函数。
19、可选的,所述opencl kernel与所述opencl library以动态链接的形式调用各opencl接口。
20、根据本公开的第二方面,提供了一种opencl pytorch的实现装置,包括:
21、实现单元,用于基于opencl标准实现可在opencl设备中运算的opencl算子库;其中,所述opencl算子库用于接收pytorch框架发送的算子调用信息;
22、建立单元,用于建立所述opencl算子库与opencl核函数库之间的链接;其中,所述opencl核函数库包含至少一个用户开发的opencl核函数接口或开源opencl计算库的核函数接口;所述opencl算子库基于所述链接调用所述opencl核函数库中的核函数接口;
23、调用单元,用于基于所述opencl算子库,实现pytorch框架对所述opencl核函数库的调用。
24、可选的,所述调用单元包括:
25、获取模块,用于基于所述opencl算子获取所述pytorch框架发送的算子调用信息;其中,所述算子调用信息包括至少一个计算步骤,不同计算步骤对应不同核函数;
26、确定模块,用于确定所述算子调用信息包含的各所述计算步骤,并确定各所述计算步骤对应的目标核函数;
27、调用模块,用于在所述opencl核函数库中调用对应的各目标核函数。
28、可选的,所述装置还包括:
29、获取单元,用于在获取模块获取pytorch框架发送的算子调用信息之后,获取pytorch框架发送的待计算数据;
30、封装单元,用于基于预设封装方式对所述待计算数据进行封装及格式转换。
31、可选的,所述装置还包括:
32、确定单元,用于在调用模块在所述opencl核函数库中调用对应的各目标核函数之后,基于各所述目标核函数名称在所述opencl核函数库中调用对应的目标opencl核函数接口;
33、确定单元,还用于确定执行各所述目标opencl核函数的目标opencl设备;
34、计算单元,用于基于所述目标opencl设备执行所述opencl核函数,对所述待计算数据进行计算。
35、可选的,所述opencl核函数库中至少包含所述opencl kernel与所述opencllibrary,所述opencl kernel包括用户开发的opencl核函数接口,opencl library包括开源opencl计算库的核函数接口;所述调用模块还用于:
36、在所述opencl kernel及所述opencl library中调用对应的各所述目标核函数。
37、可选的,所述opencl kernel及所述opencl library以动态链接的形式调用各opencl接口。
38、根据本公开的第三方面,提供了一种电子设备,包括:
39、至少一个处理器;以及
40、与所述至少一个处理器通信连接的存储器;其中,
41、所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行前述第一方面所述的方法。
42、根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行前述第一方面所述的方法。
43、根据本公开的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现如前述第一方面所述的方法。
44、本公开提供的opencl pytorch的实现方法,主要技术方案包括:首先,基于opencl标准实现可在opencl设备中运算的opencl算子库;其中,所述opencl算子库用于接收pytorch框架发送的算子调用信息;其次,建立所述opencl算子库与opencl核函数库之间的链接;其中,所述opencl核函数库包含至少一个用户开发的opencl核函数接口或开源opencl计算库的核函数接口;最后,基于所述opencl算子库,实现pytorch框架对所述opencl核函数库的调用。与相关技术相比,本技术实施例通过将pytorch框架的opencl算子调用需求进行分解,并基于opencl核函数库调用opencl设备进行执行计算;pytorch框架可以利用支持opencl标准的设备训练和部署深度学习模型,实现了可支持opencl编程标准的完整深度学习框架。
45、应当理解,本部分所描述的内容并非旨在标识本技术的实施例的关键或重要特征,也不用于限制本技术的范围。本技术的其它特征将通过以下的说明书而变得容易理解。