【拆·應用】是為開源鴻蒙應用開發者打造的技術分享平臺,是匯聚開發者的技術洞見與實踐經驗、提供開發心得與創新成果的展示窗口。誠邀您踴躍發聲,期待您的真知灼見與技術火花!
引言
本期內容由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文章
414瀏覽量
29388 -
AI
+關注
關注
91文章
39755瀏覽量
301354 -
開源
+關注
關注
3文章
4203瀏覽量
46122 -
鴻蒙
+關注
關注
60文章
2963瀏覽量
45883
原文標題:拆·應用丨第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無限可能
開源鴻蒙MNN AI應用開發與MNN移植經驗
評論