Skip to content
jxt1234 edited this page Jan 22, 2025 · 1 revision

NPU 及相应后端使用说明

目前 MNN 支持通过如下后端调用部分手机上的NPU能力:

  • CoreML
  • NNAPI
  • HIAI

目前NPU相关后端均不支持可变形状、控制流等动态模型,算子数相比CPU/GPU支持要少,建议根据NPU是否能跑通,反复调整模型结构。

CoreML

适用于 Mac / iOS / iPad

CoreML 后端编译

  1. 编译 MNN 时打开编译宏 MNN_COREML :-DMNN_COREML=ON
  2. 编译App / 可执行程序时,增加链接 CoreML.framework

CoreML 后端使用

backend type设置成:MNN_FORWARD_NN

NNAPI

适用于 Android 系统,高通/联发科芯片

NNAPI 后端编译

打开编译宏 MNN_NNAPI 即可

cd ${MNN}
cd project/android
mkdir build && cd build
../build_64.sh -DMNN_USE_LOGCAT=ON -DMNN_NNAPI=ON

NNAPI 后端使用

backend type设置成:MNN_FORWARD_NN

华为 HIAI

适用于 Android 系统, Kirlin芯片

HIAI 环境准备

  1. 从如下链接下载 DDK https://developer.huawei.com/consumer/cn/doc/hiai-Library/ddk-download-0000001053590180

  2. 拷贝相对应的so和include文件到 hiai/3rdParty 目录下,如果没有3rdParty目录,新建一个:

mkdir ${MNN}/source/backend/hiai/3rdParty
cp -r ${DDK}/lib ${MNN}/source/backend/hiai/3rdParty/armeabi-v7a
cp -r ${DDK}/lib64 ${MNN}/source/backend/hiai/3rdParty/arm64-v8a
cp -r ${DDK}/include ${MNN}/source/backend/hiai/3rdParty/include

HIAI 编译执行

  1. cmake 参数打开npu开关: -DMNN_NPU=true
  2. backend type设置成:MNN_FORWARD_USER_0
  3. 执行可执行程序(需动态加载:libMNN_NPU.so, libhiai_ir_build.so, libhiai_ir.so, libhiai.so)
Clone this wiki locally