OpenHarmony AI框架开发指导

一、概述

1、功能简介

AI 业务子系统是 OpenHarmony 提供原生的分布式 AI 能力的子系统。AI 业务子系统提供了统一的 AI 引擎框架,实现算法能力快速插件化集成。

AI 引擎框架主要包含插件管理、模块管理和通信管理模块,完成对 AI 算法能力的生命周期管理和按需部署。插件管理主要实现插件的生命周期管理及插件的按需部署,快速集成 AI 能力插件;模块管理主要实现任务的调度及管理客户端的实例;通信管理主要实现客户端和服务端之间的跨进程通信管理及 AI 服务与插件之间的数据传输。后续,会逐步定义统一的 AI 能力接口,便于 AI 能力的分布式调用。同时,框架提供适配不同推理框架层级的统一推理接口。

AI 引擎框架结构如下图所示。

图 1 AI 引擎框架

2、搭建环境

  1. 准备开发板:Hi3516DV300 或 Hi3518EV300

  2. 下载源码

二、技术规范

1、代码管理规范

AI 引擎框架包含 client、server 和 common 三个主要模块,其中 client 提供 server 端连接管理功能,OpenHarmony SDK 在算法对外接口中需封装调用 client 提供的公共接口;server 提供插件加载以及任务管理等功能,各 Plugin 实现由 server 提供的插件接口,完成插件接入;common 提供与平台相关的操作方法、引擎协议以及相关工具类,供其他各模块调用。AI 引擎框架各模块之间的代码依赖关系如下图所示:

图 2 AI 引擎代码依赖关系

建议:插件与 OpenHarmony SDK 在 AI 引擎指定的路径下进行代码开发

在 AI 引擎框架的整体规划中,OpenHarmony SDK 属于 client 端的一部分,插件由 server 端调用,属于 server 端的一部分,因此 AI 引擎框架为接入的插件与 OpenHarmony SDK 规划的路径:

SDK 代码路径://foundation/ai/engine/services/client/algorithm_sdk

示例 1://foundation/ai/engine/services/client/algorithm_sdk/cv

示例 2://foundation/ai/engine/services/client/algorithm_sdk/nlu

插件代码路径://foundation/ai/engine/services/server/plugin

示例 1://foundation/ai/engine/services/server/plugin/cv

示例 2://foundation/ai/engine/services/server/plugin/nlu

规则:插件提供的全部对外接口,统一存放在 AI 业务子系统 interfaces/kits 目录

OpenHarmony SDK 对外接口是 AI 业务子系统提供能力的对外暴露方式,按照 OpenHarmony 的接口管理要求,需统一存放在各子系统的 interfaces/kits 目录中。当前 AI 业务子系统插件对外接口路径为//foundation/ai/engine/interfaces/kits,不同插件可在该路径下添加目录,比如增加 cv 插件,则在路径//foundation/ai/engine/interfaces/kits/cv 下面存放接口文件。

规则:插件编译输出路径必须是在/usr/lib

server 端加载插件是采用 dlopen 方式,只支持在/usr/lib 路径进行,因此插件在编译 so 时,需要在编译配置文件中指定输出路径为/usr/lib。

2、命名规范

SDK 命名规则:领域_关键词<其他信息 1_其他信息 2…>_sdk.so

关于领域,建议使用当前主流简称,比如图片视频相关的使用"cv",语音识别相关的使用“asr”,翻译相关的使用“translation”等,存在其他领域的可增加定义;关键词则需要恰当准确的描述所对应插件的算法能力,比如唤醒词识别,则使用 keyword_spotting;对于其他信息,比如插件支持的芯片类型、国内海外等信息,可在关键词与“sdk”之间依次添加,信息之间以下划线连接;SDK 命名,必须以“_sdk”结尾。

例如:唤醒词识别插件对应的 SDK,只支持麒麟 9000 芯片,适用于中国国内地区适用,则对应的 SDK 命名为:asr_keyword_spotting_kirin9000_china_sdk.so

插件命名规则:领域_关键词<其他信息 1_其他信息 2…>.so

插件与 SDK 存在一一对应的关系,故插件命名的领域、关键词、其他信息等名词解释与要求,均与 SDK 命名要求保持一致。两者唯一的不同之处在于 SDK 命名多了个“_sdk”结尾;比如插件命名为“asr_keyword_spotting.so”,则对应 SDK 命名为“asr_keyword_spotting_sdk.so”。

例如:唤醒词识别插件对应的 SDK,只支持麒麟 9000 芯片,适用于中国国内地区适用,则对应的插件命名为:asr_keyword_spotting_kirin9000_china.so

3、 接口开发规范

规则:SDK 需按算法调用顺序,封装 client 对外提供接口;对于异步插件对应的 SDK,需要实现 client 提供的回调接口 IClientCb

AI 引擎的 client 端对外提供的接口包括 AieClientInit、AieClientPrepare、AieClientSyncProcess、AieClientAsyncProcess、AieClientRelease、AieClientDestroy、AieClientSetOption、AieClientGetOption,SDK 需要根据插件的接口按照顺序至少封装 AieClientInit、AieClientPrepare、AieClientSyncProcess/AieClientAsyncProcess、AieClientRelease、AieClientDestroy 五个接口,否则会出现调用问题或者内存泄漏。比如封装过程遗漏了 AieClientPrepare 接口,则 server 端无法完成插件加载,故后面的接口都无法调用成功。

对于异步插件,SDK 需要实现 IClientCb 接口,用于接收来自 client 端的算法推理结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值