发明内容
有鉴于此,本发明提供了一种人工智能框架的运行时统一接口、服务器及调用方法,以解决加速卡与AI框架对接的时间较长,影响用户的使用体验的问题。
第一方面,本发明提供了一种人工智能框架的运行时统一接口,运行时统一接口包括对接框架接口和运行时基础接口;运行时基础接口,用于与板卡设备的运行时接口连接;对接框架接口,用于向人工智能框架表明运行时统一接口包括的接口,并在接收到来自于人工智能框架的调用请求时,用于通过运行时基础接口,调用板卡设备的运行时接口。
本发明提供的AI框架的运行时统一接口,在将运行时基础接口与板卡设备的运行时接口连接之后,若对接框架接口接收到来自于AI框架的调用请求,对接框架接口通过调用运行时基础接口,即可调用板卡设备的运行时接口。本实施例通过设置AI框架的运行时统一接口,用户只需要简单的按照接口要求将板卡设备的运行时接口接入运行时统一接口,即可完成板卡设备与各类AI框架的对接,使AI框架通过板卡设备完成相应的数据处理过程,减少了板卡设备与AI框架的对接时长,提升了用户的使用体验。
在一种可选的实施方式中,与运行时基础接口连接的板卡设备的数量为多个,多个板卡设备中的每个板卡设备配置有设备号,运行时基础接口包括设备管理模块;设备管理模块,用于确定目标板卡设备的设备号,其中,目标板卡设备为多个板卡设备中执行调用请求的板卡设备。
在本实施例中,通过设置设备管理模块,可以对接入运行时基础接口的板卡设备进行管理,方便用户查看接入的板卡设备的相关信息。
在一种可选的实施方式中,运行时基础接口还包括内存管理模块;内存管理模块,用于分配目标板卡设备的内存或分配人工智能框架的内存,以将数据从人工智能框架同步传输或异步传输到目标板卡设备,或将数据从目标板卡设备同步传输或异步传输到人工智能框架,其中,人工智能框架的内存为人工智能框架所在的服务器的内存;内存管理模块,还用于在将数据从人工智能框架同步传输或异步传输到目标板卡设备之后,释放目标板卡设备的内存,以及用于在将数据从目标板卡设备同步传输或异步传输到人工智能框架之后,释放人工智能框架的内存。
在本实施例中,通过设置内存管理模块,可以更方便快捷的管理板卡设备端的内存或AI框架所在服务器的内存。同步传输可以确保数据在发送和接收方之间以可控的速度进行传输,减少数据丢失和错误,提升数据传输稳定性,异步传输可以容忍一定的传输延迟和抖动,具有较高的容错性和灵活性。
在一种可选的实施方式中,运行时基础接口还包括第一流管理模块;第一流管理模块,用于创建流,其中,创建的流用于存储来自于人工智能框架的多个操作任务;第一流管理模块,还用于向板卡设备发送创建的流,使板卡设备按顺序处理同一流上的操作任务,并行处理不同流上的操作任务。
在本实施例中,AI框架下发到板卡设备的操作任务基于流完成,能够实现对操作任务的时序控制。
在一种可选的实施方式中,运行时基础接口还包括事件管理模块;事件管理模块,用于在创建的流上创建事件,其中,创建的事件用于确定流上的多个操作任务是否执行完成;事件管理模块,还用于在记录的事件被执行之后,触发第一流管理模块同步流,以指示事件所在流上的在事件之前的操作任务已经全部执行完成;第一流管理模块,用于在事件被执行之后同步流,并用于在创建的流上的所有操作任务执行完成之后销毁流,以释放创建的流所占用的服务器的资源。
在本实施例中,通过设置事件管理模块,能够更方便的了解流上操作任务的执行情况。
在一种可选的实施方式中,运行时基础接口还包括版本管理模块;版本管理模块,用于获取板卡设备的运行时版本号和驱动版本号。
在本实施例中,通过设置版本管理模块获取板卡设备的运行时版本号和驱动版本号,能够方便AI框架查看当前连接的板卡设备的运行时接口的版本信息。
在一种可选的实施方式中,运行时统一接口还包括扩展接口,扩展接口包括第二流管理模块,第二流管理模块配置有预先创建的多个流;第二流管理模块,用于在接收到来自于人工智能框架的创建流的指示信息之后,向人工智能框架发送目标流,其中,目标流为多个流中的一个或多个;第二流管理模块,还用于获取板卡设备默认的流,用于获取板卡设备当前使用的流,以及用于设置或切换板卡设备当前使用的流,以便于人工智能框架调用板卡设备。
在本实施例中,在AI框架从后端(运行时统一接口)申请流时,运行时统一接口直接从多个流中取出预先申请好的流给AI框架,节省了频繁创建流和销毁流的时间。
在一种可选的实施方式中,扩展接口还包括缓存模块,缓存模块的缓存池中配置有预申请的内存;缓存模块,用于在人工智能框架申请内存时,向人工智能框架发送目标内存,其中,目标内存为缓存池中的内存;缓存模块,还用于在人工智能框架释放目标内存时,将目标内存标记为未使用状态,并将目标内存重新保存在缓存池中,以及用于在目标内存被使用之后释放目标内存。
在本实施例中,通过缓存机制,能够避免内存从板卡设备端频繁的申请和释放。
在一种可选的实施方式中,缓存模块,还用于通过事件记录目标内存使用的时间节点,以在目标内存被使用之后释放目标内存。
在本实施例中,AI框架在释放内存时只需要直接调用内存释放接口即可,通过缓存模块保证内存在被使用后才被释放,延缓释放时间。
在一种可选的实施方式中,运行时统一接口还包括调试接口,调试接口包括日志模块;日志模块,用于提供不同等级的日志。
在本实施例中,将日志设置成不同等级,在调试场景下,可以调出目标等级对应的所有日志,以获取更加详细的日志信息辅助分析问题。
在一种可选的实施方式中,调试接口还包括错误检查模块;错误检查模块,用于将接收的来自于板卡设备的执行结果转换为状态返回值,并用于向人工智能框架发送状态返回值。
在本实施例中,通过设置错误检查模块,能够方便AI框架了解操作任务的完成情况。
在一种可选的实施方式中,调试接口还包括跟踪调试模块;跟踪调试模块,用于在运行时统一接口故障时,输出调用栈信息。
在本实施例中,通过设置跟踪调试模块,能够在运行时统一接口故障时,输出调用栈信息,以辅助分析故障原因。
第二方面,本发明提供了一种服务器,服务器包括上述第一方面或其对应的任一实施方式的运行时统一接口。
第三方面,本发明提供了一种板卡设备的运行时接口的调用方法,应用于上述第一方面或其对应的任一实施方式的运行时统一接口的对接框架接口,运行时统一接口包括对接框架接口和运行时基础接口,运行时基础接口连接板卡设备的运行时接口,方法包括:接收来自于人工智能框架的调用请求;通过运行时基础接口,调用板卡设备的运行时接口。
本发明提供的AI框架的运行时统一接口,在将运行时基础接口与板卡设备的运行时接口连接之后,若对接框架接口接收到来自于人工智能框架的调用请求,对接框架接口通过运行时基础接口,即可调用板卡设备的运行时接口,使人工智能框架完成与板卡设备的运行时接口的逻辑交互,进而完成对板卡设备的使用。
在一种可选的实施方式中,方法还包括:将运行时统一接口编译为第一文件,其中,第一文件包括头文件和动态链接库文件,头文件用于向人工智能框架表明运行时统一接口包括的接口,动态链接库文件用于连接运行时统一接口包括的接口。
在本实施例中,将运行时统一接口编译为第一文件,在AI框架需要调用相应的接口时,通过加载动态链接库文件,即可将运行时统一接口添加到AI框架,方便AI框架调用板卡设备的运行时接口。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图对本发明提供的AI框架的运行时统一接口进行详细说明。
如图2所示,AI框架的运行时统一接口400包括对接框架接口410和运行时基础接口420。
其中,运行时基础接口420用于与板卡设备的运行时接口100连接。对接框架接口410用于向人工智能(AI)框架500表明运行时统一接口400包括的接口,并在接收到来自于AI框架500的调用请求时,用于通过运行时基础接口420,调用板卡设备的运行时接口100。
具体地,由于常见的AI框架对运行时接口的需求具有较高的相似性,通过调研统计常见的AI框架中需要支持的接口,然后归纳常见的几类AI框架所需接口的最小集合,将最小集合中的接口作为运行时基础接口,最小集合为常见的几类AI框架对应的接口集合的交集。板卡设备的运行时接口100按照运行时基础接口420的要求配置基础接口文件,即可将运行时基础接口420与板卡设备的运行时接口100连接。
对接框架接口410可以向AI框架500表明运行时统一接口400包括的接口,在AI框架500发送调用请求之后,对接框架接口410通过运行时基础接口420,调用板卡设备的运行时接口100,使AI框架500完成与板卡设备的运行时接口100的逻辑交互,进而完成对板卡设备的使用。示例性的,AI框架可以为开源深度学习框架(Pytorch)、飞桨(Paddlepaddle)框架或其他AI框架,但不限于此。板卡设备可以为寒武纪370、沐曦MXC500或英伟达(NVIDIA)A30,但不限于此。
示例性的,可以将运行时统一接口400编译成第一文件,AI框架500通过加载动态链接库(so)文件调用运行时基础接口420。其中,第一文件包括头文件和动态链接库文件,头文件用于向AI框架500表明运行时统一接口400包括的接口,动态链接库文件用于连接运行时统一接口400包括的接口。
本发明提供的AI框架的运行时统一接口400,在将运行时基础接口420与板卡设备的运行时接口100连接之后,若对接框架接口410接收到来自于AI框架500的调用请求,对接框架接口410通过调用运行时基础接口420,即可调用板卡设备的运行时接口100。本实施例通过设置AI框架的运行时统一接口400,用户只需要简单的按照接口要求将板卡设备的运行时接口100接入运行时统一接口400,即可完成板卡设备与各类AI框架的对接,使AI框架通过板卡设备完成相应的数据处理过程,减少了板卡设备与AI框架的对接时长,提升了用户的使用体验。
下面对运行时基础接口420进行详细说明。
具体地,运行时基础接口420可以包括设备管理模块、内存管理模块、第一流管理模块、事件管理模块和版本管理模块中的至少一种。
示例性的,设备管理模块(Set Device)用于确定目标板卡设备的设备号,其中,与运行时基础接口420连接的板卡设备的数量为多个,多个板卡设备中的每个板卡设备配置有设备号,目标板卡设备为从多个板卡设备中选择的执行调用请求的板卡设备。
具体地,设备管理模块的接口和功能可以如表1所示。如表1,设备管理模块还可以用于对板卡设备进行初始化(Init),用于获取当前与运行时基础接口420连接的板卡设备的设备号(Get Device),用于获取当前与运行时基础接口420连接的板卡设备的数量(GetDevice Count),以及用于在目标板卡设备执行完相应调用请求之后,释放初始化时获取的资源(DeInit)。
表1
示例性的,设备管理模块的部分代码1如下所示:
/** Set current device */;确定目标板卡设备的设备号;
TGStatus (*set_device_)(const TGDevice device);将从目标板卡设备获取的目标板卡设备的设备号通过运行时统一接口自定义类型表示,以便参数类型统一,并显示操作结果(例如设置成功或设置失败)。
其中,运行时统一接口自定义类型可以为数据类型(int)的封装。将从板卡设备获取的目标板卡设备的设备号做统一转换,方便与AI框架的运行时接口对接。
具体地,以寒武纪板卡为例,寒武纪板卡提供的运行时接口也包括设备管理模块,例如,寒武纪板卡中的确定目标板卡设备的设备号的接口为cnrtSetDevice,cnrtSetDevice设置了板卡使用的设备号。
示例性的,设备管理模块的部分代码2如下所示:
TGStatus SetDevice(const TGDevice device) {
DEBUG_LOG();
CHECK_RT_SUCCESS(cnrtSetDevice(device));
return ret;
};该函数功能是将板卡设备(例如寒武纪370)的接口(例如cnrtSetDevice)封装转换为运行时统一接口中功能对应的接口(例如Set Device)。
具体地,由于设备管理模块是板卡设备具备的基础接口,直接将板卡设备的设备管理模块转换封装,即可将板卡设备的运行时接口接入运行时统一接口。
在本实施例中,通过设置设备管理模块,可以对接入运行时基础接口420的板卡设备进行管理,方便用户查看接入的板卡设备的相关信息。
示例性的,内存管理模块用于分配(或申请)目标板卡设备(Device)的内存(Memory)或分配AI框架500的内存,以将数据从AI框架500传输到目标板卡设备,或将数据从目标板卡设备传输到AI框架500。其中,AI框架500的内存可以为AI框架500所在服务器(Host)的内存。
示例性的,内存管理模块的部分代码3可以如下所示:
TGStatus Allocate(const TGDevice device, void **ptr, size_t size) 将板卡设备申请内存的接口转换为运行时统一接口自定义类型的申请板卡设备内存的接口的函数实现。
具体地,寒武纪370板卡中的内存管理模块的接口cnrtMalloc(ptr, size)与内存管理模块的接口Device/Host Memory Allocate对接。
可选地,内存管理模块还可以用于释放(Deallocate)目标板卡设备(Device)的内存(Memory)或释放AI框架500所在服务器的内存,内存管理模块还可将目标板卡设备中的数据同步传输或异步传输到AI框架(Sync_d2h/Async_d2h),也可以将AI框架中的数据同步传输或异步传输到目标板卡设备(Sync_h2d/Async_h2d)。
具体地,内存管理模块的接口和功能可以如表2所示。
表2
在本实施例中,通过设置内存管理模块,可以更方便快捷的管理板卡设备端的内存或AI框架所在服务器的内存。
应理解,在同步传输中,发送方(为人工智能框架或板卡设备)和接收方(为板卡设备或人工智能框架)需要保持时间上的同步,即发送方每次发送数据时,接收方必须准备好接收并立即响应,发送方必须等待接收方的响应后才能继续发送下一段数据。在异步传输中,发送方和接收方之间没有严格的时间约束,发送方可以按照自身的节奏发送数据,而接收方则以自身的节奏接收数据。同步传输可以确保数据在发送和接收方之间以可控的速度进行传输,减少数据丢失和错误,提升数据传输稳定性,异步传输可以容忍一定的传输延迟和抖动,具有较高的容错性和灵活性。
示例性的,第一流管理模块用于创建流(Create Stream),还用于向板卡设备发送创建的流,使板卡设备按顺序处理同一流上的操作任务,并行处理不同流上的操作任务。其中,创建的流用于存储来自于AI框架的多个操作任务,操作任务可以为读取数据、写入数据或删除数据等操作。
示例性的,第一流管理模块的部分代码4可以如下所示:
TGStatus (*create_stream_)(const TGDevice device, TGStream *stream);将板卡设备创建流的接口转换为运行时统一接口自定义类型的创建流的接口的函数实现。
可选地,第一流管理模块还可以用于销毁流(Destroy Stream),以及用于同步流(Sync Stream),即等待指定流上面的操作任务完成。
具体地,第一流管理模块的接口和功能可以如表3所示。
表3
在本实施例中,AI框架下发到板卡设备的操作任务基于流完成,能够实现对操作任务的时序控制。在流上的操作任务完成后,销毁流能够及时释放流占用的***资源,以避免资源浪费,提升***的性能和响应能力,销毁流还能够避免流可能包含的敏感数据(例如个人信息或机密文档等)被不当访问或泄露,提升数据安全性,同时,销毁流还能够使代码文件更加清晰和易读,减少不必要的复杂性,提高代码的可维护性。
销毁流的具体方法取决于所使用的编程语言和框架。一般而言,根据所用的流对象的类型和上下文,可以调用合适的方法或函数来销毁流,并释放相关资源。例如,关闭文件流、关闭网络连接、释放内存等。
示例性的,事件管理模块用于创建事件(Create Event),其中,创建的事件用于确定流上的多个操作任务是否执行完成。具体地,当在流上面记录(Record)一个事件(Event)后,由于同一流上的操作任务是顺序执行的,当事件被触发时,表示在事件之前的操作任务已经执行完成,进而完成事件之前的操作任务同步功能。
可选地,事件管理模块还可以用于销毁事件(Destroy Event),用于同步事件(Sync Event),即指示事件之前的操作任务已经全部执行完成,用于在流上记录事件(Record Event),用于等待记录的事件被执行(触发)后同步流(Wait Event),以及用于查询事件(Query Event)状态,确定事件是否执行完成。具体地,事件管理模块的接口和功能可以如表4所示。
示例性的,事件管理模块的部分代码5可以如下所示:
TGStatus CreateEvent(const TGDevice device, TGEvent *event) {
DEBUG_LOG();
CHECK_RT_SUCCESS(cnrtNotifierCreate(reinterpret_cast<cnrtNotifier_t *>(event)));
return ret;};将板卡设备创建event的接口转换为运行时统一接口自定义类型的创建event的函数实现。
即,将板卡设备(例如寒武纪370)自定义类型的创建event的接口(cnrtNotifier_t)封装为运行时统一接口中的Create Event,在对接时,可以通过强制类型转换来赋值。
具体地,事件管理模块在第一流管理模块创建的流上创建事件,在事件被执行(触发)之后,触发第一流管理模块同步流,第一流管理模块响应触发同步流,并在确定创建的流上的所有操作任务被执行完成之后销毁流,释放创建的流所占用的服务器的资源。
表4
在本实施例中,通过设置事件管理模块,能够更方便的了解流上操作任务的执行情况。
示例性的,版本管理模块用于获取板卡设备的运行时版本号(Get RuntimeVersion)和获取板卡设备的驱动版本号(Get Driver Version),具体地,版本管理模块的接口和功能可以如表5所示。
在本实施例中,通过设置版本管理模块获取板卡设备的运行时版本号和驱动版本号,能够方便AI框架查看当前连接的板卡设备的运行时接口的版本信息。
表5
示例性的,版本管理模块时基础接口之一,版本管理模块的设置与上述类似,在此不在说明。
为了提升AI框架操作板卡设备的效率,在一些可选的实施方式中,如图3所示,AI框架的运行时统一接口400还包括扩展接口430和/或调试接口440。也就是说,AI框架的运行时统一接口400可以包括扩展接口430或调试接口440,也可以包括扩展接口430和调试接口440。
具体地,扩展接口430和/或调试接口440直接提供给AI框架侧使用,但不需要与板卡设备的运行时接口对接,扩展接口430和/或调试接口440可以通过运行时基础接口420调用板卡设备的运行时接口100。
下面对扩展接口430和调试接口440做详细说明。
示例性的,扩展接口430可以包括第二流管理模块431、缓存模块432和事件模块433中的至少一种。示例性的,第二流管理模块431可以通过第一流管理模块与板卡设备的运行时接口连接,缓存模块432可以通过内存管理模块与板卡设备的运行时接口连接,事件模块433可以通过事件管理模块与板卡设备的运行时接口连接。
具体地,第二流管理模块431设置有流池(stream pool),流池配置有预先创建的多个流,例如,配置有预先创建的N个流,N为整数,N可以由开发人员根据经验配置,比如N为16、32或64等。第二流管理模块431用于在接收到来自于AI框架500的创建流的指示信息之后,向AI框架500发送目标流,其中,目标流为多个流中的一个或多个,多个流可以循环使用。示例性的,当流池中的流都被AI框架使用后,再次创建流式,第二流管理模块431可以从头将流池中的第一个流发送至AI框架,循环重复使用。
在本实施例中,在AI框架从后端(运行时统一接口)申请流时,运行时统一接口400直接从多个流中取出预先申请好的流给AI框架,节省了频繁创建流和销毁流的时间。
可选地,第二流管理模块431还可以用于获取板卡设备默认的流(Get DefaultStream),用于获取板卡设备当前使用的流(Get Current Stream),以及用于设置或切换板卡设备当前使用的流(Set Current Stream)。其中,板卡设备为与运行时统一接口连接的板卡设备。
具体地,在接收到调用请求之后,运行时统一接口可以从对接的板卡设备的运行时接口中调用创建流的接口(cnrtQueueCreate)来获取板卡设备的流信息,另外,可以将获取的板卡设备的流信息赋值给Default Stream,作为默认的流给AI框架使用。在初始状态下,板卡设备当前使用的流可以为Default Stream,AI框架可以通过调用Set CurrentStream将板卡设备当前使用的流切换为指定的流,AI框架可以调用第一流管理模块创建流,并将新建的流作为板卡设备当前使用的流,以便后面逻辑使用。
具体地,版本管理模块的接口和功能可以如表6所示。在本实施例中,通过设置第二流管理模块431,能够获取板卡设备默认的流、获取板卡设备当前使用的流和设置或切换板卡设备当前使用的流,使AI框架更加高效的操作板卡设备。
表6
具体地,缓存模块432的缓存池中配置有预申请的内存,缓存模块432用于在AI框架500申请内存时,向AI框架500发送目标内存。其中,目标内存为缓存池中的内存。即,当AI框架500需要申请内存时,缓存模块432直接按照算法从缓存池中选取匹配的内存给AI框架500使用。另外,当AI框架500释放此内存时,缓存模块432会将该内存标记为未使用,继续保存在缓存池中,直到程序退出释放缓存池中的内存。
在本实施例中,通过缓存(Caching)机制,能够避免内存从板卡设备端频繁的申请和释放。
具体地,缓存模块432将缓存池中的内存分配情况存在链表中,当需要分配内存时,遍历链表找到大小合适的内存返回,然后更新链表信息,当AI框架内存释放时,更新链表将该地址空间对应的链表节点设置为未使用,如果该链表节点的前后链表节点也是未使用状态,那么可以合并为一个链表节点。
当缓存模块432的内存不足时,可以再次从板卡设备中申请内存,并将申请的内存放在缓存池,以满足AI框架内存申请需求。当AI框架申请的内存缓存池中没有满足大小的,且板卡设备中也没有足够大小的内存时,缓存模块432进行任务同步操作,等待异步操作执行完成后,即异步操作占用的内存全部处于未使用状态之后,将缓存池中处于未使用状态的内存归还板卡设备,之后再次从板卡设备申请内存。
AI框架一般为异步操作,即内存分配好后,执行异步操作使用该内存,之后释放内存。由于异步操作并不是下发完异步操作命令后就立刻执行使用该内存,会按照流上面的操作任务顺序,在后面的某个时间点才会执行,导致缓存模块无法确定释放该内存的时间点。
基于上面的异步操作场景,缓存模块还用于通过事件来记录目标内存使用的时间点,在目标内存被使用后,才释放目标内存。即,AI框架在释放内存时只需要直接调用内存释放接口即可,通过缓存模块保证内存在被使用后才被释放,延缓释放时间。
由于目前常见的AI框架500中并没有对事件提出更多的要求,运行时基础接口中的事件管理模块即可满足现有AI框架500需求,扩展接口中配置事件模块433,用于在AI框架500有新需求时对接。
示例性的,调试接口440包括日志模块441、错误检查模块442和跟踪调试模块443中的至少一种。
具体地,日志(LOG)模块441用于提供不同等级的日志。示例性的,可以通过环境变量为日志设置等级。
在本实施例中,将日志设置成不同等级,在调试场景下,可以调出目标等级对应的所有日志,以获取更加详细的日志信息辅助分析问题。
例如,在调试场景下,需要了解每个接口的参数,但在正常执行的情况下,不需要了解每个接口的参数,此时,通过日志模块为接口参数对应的日志设置等级,在调试场景下通过调用对应等级的日志,输出接口的参数,也能够避免在正常执行的情况下,输出接口的参数,影响服务器的性能。
具体地,错误(Error)检查模块442用于将接收的来自于板卡设备的执行结果转换为状态返回值,并用于向人工智能框架发送状态返回值。
在本实施例中,通过设置错误检查模块442,能够方便AI框架500了解操作任务的完成情况。
可选地,错误检查模块442还用于调用板卡设备在错误发生时,错误对应的字符串信息,并在显示设备上显示错误对应的字符串信息,方便用户了解错误的详细信息。其中,显示设备可以为运行时统一接口所在服务端的显示装置。
具体地,跟踪调试模块443用于在运行时统一接口故障(Core Dump)时,输出调用栈信息,以辅助分析故障原因。
在本实施例中,还提供了一种板卡设备的运行时接口的调用方法,可用于上述的运行时统一接口的对接框架接口,运行时统一接口的运行时基础接口与板卡设备的运行时接口连接,图4是根据本发明实施例的一种板卡设备的运行时接口的调用方法的流程示意图,如图4所示,该方法包括如下步骤:
步骤S401,接收来自于人工智能框架的调用请求。
其中,调用请求为调用目标接口的请求信息,目标接口为运行时统一接口中的其中一个接口,例如,目标接口可以为运行时基础接口中的任一模块、扩展接口中的任一模块或调试接口中的任一模块。
步骤S402,通过运行时基础接口,调用板卡设备的运行时接口。
本发明提供的AI框架的运行时统一接口,在将运行时基础接口与板卡设备的运行时接口连接之后,若对接框架接口接收到来自于人工智能框架的调用请求,对接框架接口通过运行时基础接口,即可调用板卡设备的运行时接口,使人工智能框架完成与板卡设备的运行时接口的逻辑交互,进而完成对板卡设备的使用。
在一些可选的实施方式中,板卡设备的运行时接口的调用方法还包括:将运行时统一接口编译为第一文件。其中,第一文件包括头文件和动态链接库文件,头文件用于向人工智能框架表明运行时统一接口包括的接口,动态链接库文件用于连接运行时统一接口包括的接口。
在本实施例中,将运行时统一接口编译为第一文件,在AI框架需要调用相应的接口时,通过加载动态链接库文件,即可将运行时统一接口添加到AI框架,方便AI框架调用板卡设备的运行时接口。
在本实施例中,还提供了一种人工智能框架使用运行时统一接口的方法,可用于配置人工智能框架和运行时统一接口的处理器、计算机或服务器等,图5是根据本发明实施例的一种人工智能框架使用运行时统一接口的方法的流程示意图,如图5所示,该方法包括如下步骤:
步骤S501,通过环境变量指定第一文件的存储位置。
其中,第一文件通过编译运行时统一接口确定。第一文件包括头文件和动态链接库文件,头文件用于表明运行时统一接口包括的接口,动态链接库文件用于连接运行时统一接口包括的接口。
具体地,运行时统一接口与板卡设备的运行时接口对接,可以通过在板卡设备中配置基础接口文件,使运行时统一接口与板卡设备的运行时接口对接,在多个板卡设备与运行时统一接口对接时,可以通过定义后端名称(Define BACKEND_NAME)区分多个板卡设备对应的基础接口文件。在编译时,可以通过指定BACKEND_NAME来选择基础接口文件,进而只编译指定的板卡设备的运行时统一接口。
步骤S502,以插件形式加载动态链接库文件。
具体地,人工智能框架下发操作任务时,通过第一文件的指定路径(BACKEND_PATH)加载动态链接库文件,进而将该动态链接库文件对应的后端接口(运行时统一接口)添加到人工智能框架中,以便人工智能框架使用运行时统一接口。
示例性的,可以通过动态加载共享库的函数(dlopen),加载动态链接库文件。
步骤S503,通过运行时统一接口调用板卡设备的运行时接口,使板卡设备执行人工智能框架下发的操作任务。
具体地,在将运行时统一接口接入人工智能框架之后,可以通过运行时统一接口调用板卡设备的运行时接口,进而使板卡设备执行人工智能框架下发的操作任务。
本实施例提供的人工智能框架使用运行时统一接口的方法,通过加载动态链接库文件,可以方便快捷的将运行时统一接口添加到人工智能框架,然后通过运行时统一接口,使人工智能框架完成与板卡设备的运行时接口的逻辑交互,进而完成对板卡设备的使用。
另外,在AI框架为PaddlePaddle框架时,本申请提供的运行时统一接口兼容PaddlePaddle框架定义的运行时接口,因此,针对PaddlePaddle框架,可以直接将运行时统一接口添加到PaddlePaddle框架,或者通过少量修改,即可将运行时统一接口添加到PaddlePaddle框架。
本发明实施例还提供一种服务器,具有上述图2或图3所示的运行时统一接口。
请参阅图6,图6是本发明可选实施例提供的一种服务器的结构示意图,如图6所示,该服务器设备包括:一个或多个处理器610、存储器620,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在服务器设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个服务器设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器***)。图6中以一个处理器610为例。
处理器610可以是中央处理器,网络处理器或其组合。其中,处理器610还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,存储器620存储有可由至少一个处理器610执行的指令,以使所述至少一个处理器610执行实现上述实施例示出的方法。
存储器620可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据服务器设备的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器620可选包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至该服务器设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器620可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器620还可以包括上述种类的存储器的组合。
该服务器设备还包括输入装置630和输出装置640。处理器610、存储器620、输入装置630和输出装置640可以通过总线或者其他方式连接,图6中以通过总线连接为例。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用服务器、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,服务器、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被服务器、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入本发明所限定的范围之内。