NPU 及相应后端使用说明
目前 MNN 支持通过如下后端调用部分手机上的NPU能力:
CoreML
NNAPI
HIAI
目前NPU相关后端均不支持可变形状、控制流等动态模型,算子数相比CPU/GPU支持要少,建议根据NPU是否能跑通,反复调整模型结构。
CoreML
适用于 Mac / iOS / iPad
CoreML 后端编译
编译 MNN 时打开编译宏 MNN_COREML :-DMNN_COREML=ON
编译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 环境准备
从如下链接下载 DDK https://developer.huawei.com/consumer/cn/doc/hiai-Library/ddk-download-0000001053590180
拷贝相对应的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 编译执行
cmake 参数打开npu开关: -DMNN_NPU=true
backend type设置成:MNN_FORWARD_USER_0
执行可执行程序(需动态加载:libMNN_NPU.so, libhiai_ir_build.so, libhiai_ir.so, libhiai.so)