OpenHarmony AI推理任务管理与统一推理接口介绍 原创 精华
作者:张守忠 王肖云
1 简介
AI推理任务管理与统一推理接口提供了在OpenHarmony标准系统上基于CPU进行AI推理任务调度管理的能力,对AI算法能力进行生命周期管理和按需部署,同时,提供适配不同推理框架层级的统一推理接口,基于NCNN、MNN、Paddlelite三大常用端侧推理框架进行了接口的统一封装。基于统一接口,开发者不需再关心不同推理框架API的差异,可以在各框架之间自如切换,同时,提供了端侧框架的编译脚本,开发者可以直接编译、调用这三个框架,代码仓库地址如下:
-
paddle-lite框架:OpenHarmony-TPC/paddle_lite (gitee.com)
图 1 AI推理任务管理与统一推理接口架构图
各模块介绍:
- 任务调度:任务创建、任务分发、任务销毁。
- 框架调度:推理框架加载、卸载。
- 算法引擎:推理算法加载、执行、卸载,推理结果管理。
- 接口管理:对应用层提供统一的框架层接口。
- 框架适配层:适配不同的第三方推理框架,屏蔽接口差异,为算法引擎提供统一的接口。
目录
详细设计
图 2 类关系图
主要类的功能:
- AiInference:对应用层开放的接口create、SyncInfer、Destroy都定义在该类中。
- ClientFactory:客户端工厂类,整合应用数据调用、管理session、管理serviceAdapter对象的创建和销毁。
- ServiceAdapter:推理服务适配器,为推理任务分配clientId,维护客户端与服务端连接ID,创建推理request,由推理response获取推理结果tensor。
- ServiceExecutor:维护推理引擎管理器的创建与销毁。
- EngineManager:管理推理引擎的创建与销毁。
- Engine:推理引擎,推理的主要功能都由它管理。
- PluginManager:管理框架调度器的创建与销毁。
- Plugin:管理第三方框架与推理模型的加载、卸载。
- AIInterpreter:框架适配器接口类,为AI任务调度管理提供统一的接口,屏蔽不同推理框架的差异。
- EngineWorker:推理线程入口函数由该类提供。
- SyncMsgHandler:负责推理请求的发送、推理结果接收。
图 3 AI任务调度管理时序图
主要流程:
- 推理任务创建流程:首先分配客户端sessionId,服务端分配clientId,由sessionId和clientId组合生成唯一的transactionId,然后根据框架类型和推理网络加载模型、拉起推理线程。
- 执行推理流程:由sessionId和clientId找到上个流程中创建的推理引擎,创建推理request,压入推理线程队列中,等待推理返回的response。
- 推理任务销毁流程:销毁创建流程中申请的资源包括实例化的对象、申请的内存等, 推理线程终止,线程回收,队列回收。
约束
语言限制:C/C++语言
操作系统限制:OpenHarmony操作系统
使用
-
实例化类AiInference。
-
调用AiInference的成员函数Create,传入参数frameworkType,推理网络名称,网络模型路径和推理网络版本号(默认值10000001)。各参数说明如下:
- frameworkType:推理框架ID,从如下枚举Framework_type中选取一个推理框架,当前支持AI_FRAMEWORK_ID_NCNN,AI_FRAMEWORK_ID_MNN和AI_FRAMEWORK_ID_PADDLELITE。
- algorithmName:推理的网络名称,如:mobilenetssd,yolov3。
- modelPathInfos:推理网络的模型路径信息,支持网络拓扑结构与权重数据合一和两个数据分开两个文件的场景,对于合一的场景,结构体的成员type取值NET_COMBINED_TYPE,对于两个数据分开文件表示的场景数组modelPathInfos有两个ModelPathInfo元素,两个元素的type字段分别取值NET_TOPO_FILE_TYPE和WEIGHT_FILE_TYPE,path字段为对应的文件路径。ModelPathType为type字段取值枚举,结构体ModelPathInfo为数组modelPathInfos的元素类型。具体使用方法请参考example章节
- algorithmVersion:推理网络版本号,默认值10000001,当前不关心该参数值。
-
构造推理输入Tensor,调用成员函数SyncExecute执行推理,函数的声明及参数定义如下。输入和输出参数的类型IOTensors定义如下,具体使用方法请参考example章节
-
调用成员函数Destroy销毁推理任务
example
以下代码片段为使用第三方网络框架NCCN执行网络sequeezenet_v1.1推理的主要部分。
总结
本文主要介绍了AI任务调度管理与统一推理框架接口的框架结构、类关系图和时序图,并列出了对应用层开放的接口及使用方法。
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
赞啊!不过大佬的图压的有点看不清了,能传附件一份学习下吗?
高端, 同求一份高清类图和流程图
openharmony 可以使用海思的npu做模型推理吗
学习中
你好,请问统一推理接口什么时候开源?