【拆·应用】是为开源鸿蒙应用开发者打造的技术分享平台,是汇聚开发者的技术洞见与实践经验、提供开发心得与创新成果的展示窗口。诚邀您踊跃发声,期待您的真知灼见与技术火花!
引言
本期内容由AI Model SIG提供,介绍了在开源鸿蒙中,利用MNN开源框架开发AI应用以及基于MNN源码编译与Har包封装的方法。
技术背景
MNN是一个由阿里巴巴开发的轻量级的深度神经网络引擎,支持深度学习的推理和训练,适用于服务器、手机、嵌入式等各类设备。MNN提供了对大语言模型和多模态大模型的支持,可以将原本需要在云端运行的大模型,经过压缩、编译和系统级优化后,直接部署在手机、PC、车载、XR 头显、机器人等终端设备上,使其无需联网即可完成生成、理解、推理等任务。
MNN的主要特性:
1.轻量性:MNN的主体功能无任何依赖,代码精简,可以方便地部署到移动设备和各种嵌入式设备中。
2.通用性:MNN提供了丰富的算子,支持多种文件格式,如:Tensorflow、ONNX、Torchscripts等,支持CNN、Transformer等网络结构;在大模型领域,MNN提供了对目前主流的开源LMM模型的支持。
3.高性能:MNN对iOS / Android / PC / Server 的CPU架构进行了适配,充分发挥了 CPU的算力,单线程下运行常见CV模型接近设备算力峰值;支持基于 Metal / OpenCL / Vulkan 使用端侧设备上的GPU进行推理,支持部分设备的 NPU 计算。
目前已完成MNN在OpenHarmony 5.1 Release上的适配,支持在CPU下进行LLM、MLLM推理。
环境准备
1.硬件准备
(1)开发板DAYU200,详情介绍
https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/README.md。
(2)芯片型号
SOC 系统芯片: Rockchip RK3568。
CPU中央处理器: Cortex-A55。
GPU图形处理器: Mali-G52。
2.软件准备
(1)开发环境:windows 10 + ubuntu 22.04。windows下进行设备连接、程序烧录、文件传输;linux进行程序编译(官方推荐)。参考文档:
https://docs.openharmony.cn/pages/v4.1/zh-cn/device-dev/quick-start/quickstart-pkg-prepare.md。
(2)OpenHarmony:SDK下载ohos-sdk-windows_linux-public
链接地址如下:
https://repo.huaweicloud.com/harmonyos/os/5.1.0-Release。
解压到指定目录,里边包含window和linux的库文件,分别放到对应的设备上。
(3)DevEco Studio: 版本5.1.0。下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/。
开源鸿蒙MNN AI 应用开发
1.mnnllm har包介绍
mnnllm har包是由开源鸿蒙AI Model SIG发布的大模型本地推理库,基于mnnllm推理框架通过native api进行封装,可供ArkTS语言快速开发应用程序,当前已支持大语言模型和多模态大模型本地推理。
mnnllm har包已提交到开源鸿蒙第三方中心仓库,可通过以下地址详细了解相关信息。
https://ohpm.OpenHarmony.cn/#/cn/detail/@ai_model_sig%2Fmnnllm
2.基于mnnllm har包的应用开发
(1)安装mnnllm har包,通过ohpm install命令,可快速安装,命令如下:
(2)准备大模型并转换成mnn支持的格式
在进行测试前,需要先下载并转换成mnn格式的模型, 通过llmexport工具即可快速转换成mnn格式,如果不想转换,也可以直接从魔搭社区下载已经转换好的mnn模型。
将大模型转换成mnn格式,llmexport命令可参考mnn官方文档,详情可查看链接,具体链接如下:
https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html
从modelscope社区直接下载mnn模型,可访问仓库地址:
https://www.modelscope.cn/organization/MNN?tab=model
文件准备好了之后,需要将模型文件放在entry/src/main/resource/rawfile目录下(仅模型文件,不需要包含模型名称的外层目录),对于多模态大模型,还需在rawfile下准备一张测试图片test.jpg。
注意:DAYU200的开发板由于算力限制,可以选择参数较小的模型(如SmolVLM-256M-Instruct-MNN)进行验证。
(3)应用程序开发
从mnnllm har包中通过import导入对应的函数,具体函数说明,见表1。
import{nativeLoad,nativeChat,nativeChatVLM,nativeUnload}from '@ai_model_sig/mnnllm';
定义函数onCopyRawFileToLocal,将模型文件拷贝到应用程序沙箱。
调用nativeLoad函数,加载模型。
如果是大语言模型,调用nativeChat函数,输入对话内容,返回模型回答结果;如果是多模态大模型,调用nativeChatVLM函数,输入对话内容和图片,返回模型回答结果。
应用程序结束,调用nativeUnload函数,释放模型资源。
表1 Har包函数说明
(4)代码示例
以下是部分关键示例代码,供参考。
编译并执行示例代码后,屏幕打印出的信息
基于mnn源码编译与native接口封装
以下内容介绍基于mnn源码编译与native接口封装,如果对系统移植感兴趣的可以继续往下阅读,如果只专注应用开发,可跳过此部分内容。
源代码地址和编译方法链接:
https://gitcode.com/ai_model_sig/ohos_mnn。
1. 适配OpenHarmony的mnn静态库打包
(1)设置HARMONY_HOME环境变量,指向SDK解压后的目录。
export HARMONY_HOME=/home/xxx/ohos-sdk
(2)编译mnn的静态库,cmake时指定
-DCMAKE_TOOLCHAIN_FILE、
-DMNN_BUILD_SHARED_LIBS=OFF,
-DMNN_BUILD_LLM=ON。
(3)获取编译后的libMNN.a的静态库。
2. 基于mnn的c++推理代码开发
(1)准备头文件和mnn的静态库,从/path/to/MNN拷贝到src/main/cpp目录下,libMNN.a拷贝到/path/to/cpp/libs/。
(2)模型的准备。模型的转换,参考文档:https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html。
(3)mnn的c++推理代码开发和验证。代码示例(非完整代码):
3. 基于NAPI的native方法封装
(1)开发前的准备。
打开DevEco,在创建好的项目处,右键选择new > Module > Static Library。
将2中准备好的头文件和静态库,复制到新创建的Module的src/main/cpp的libs和include目录下。
(2)接口函数的制定
(3)Native方法的封装,封装以上4个函数
(4)har包的开发
在src/main/cpp/types/libentry/Index.d.ts,定义ArkTS接口。
oh-package.json5 文件,将API与so相关联,成为一个完整的ArkTS模块。
在src/main/ets/export.ets导出native方法。
通过Index.ets对外暴露har包的接口函数。
常见问题和解决方法
Native方法封装过程中,libllm.so、libMNN.so、libMNN_Express.so等动态库之间的复杂相互依赖问题导致的失败。
解决方法:MNN的编译过程中,指定cmake的参数DMNN_BUILD_SHARED_LIBS=OFF,编译静态库libMNN.a,放置在src/main/cpp/libs下面。
Native方法封装过程中,接口函数中load、chat等方法难以通过NAPI的数据类型来传递模型实例。
解决方法:在c++推理代码中定义静态全局的模型,然后在load中通过reset方法重置模型的配置文件。
应用开发调用时,接口函数load调用过程中,传入的模型文件无法读取的问题。
解决方法:将转换好的MNN模型文件全部放在rawfile目录下,然后将文件全部拷贝到应用沙箱中,最后通过沙箱路径读取模型的文件。
-
移植
+关注
关注
1文章
403浏览量
28835 -
AI
+关注
关注
88文章
36190浏览量
284225 -
开源
+关注
关注
3文章
3818浏览量
44272 -
鸿蒙
+关注
关注
60文章
2690浏览量
44527
原文标题:拆·应用丨第5期:开源鸿蒙MNN AI应用开发与MNN移植经验
文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
【每日精选】开源鸿蒙系统DAYU200教程及Tina Wi-Fi模组移植
CoolPi CM5运行ChatGLM-MNN大语言模型
Coolpi CM5运行ChatGLM-MNN大语言模型
阿里正式开源轻量级深度学习端侧推理引擎“MNN”
实战MNN之Mobilenet SSD部署
浅谈阿里轻量级的深度神经网络推理引擎MNN
实战MNN之量化部署

详解MNN的tflite-MobilenetSSD-c++部署流程

详解MNN的tf-MobilenetSSD-cpp部署流程

PFLD-lite:基于MNN和mxnet的嵌入式部署

谈谈MNN的模型量化(一)数学模型

实战MNN之Mobilenet SSD部署(含源码)

2025开源鸿蒙开发者大会圆满落幕
开源鸿蒙开发者大会2025·AI分论坛圆满闭幕,探索开源鸿蒙AI无限可能

评论