MNN入门教程-编译与安装
本文主要介绍Ubuntu系统中,MNN的编译与安装流程。
1. 依赖环境
- cmake(建议使用3.10或以上版本)
- protobuf(使用3.0或以上版本)
- gcc(使用4.9或以上版本)
执行代码:
apt-get install cmake gcc
git clone https://github.com/google/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.
出现问题:
./autogen.sh: 4: ./autogen.sh: autoreconf: not found
解决方法:
apt-get install autoconf automake libtool
2. 编译选项
使用cmake编译时,可以修改CMakeLists.txt中的选项:
- MNN_DEBUG
默认关闭,关闭时,不保留符号,开启优化。 - MNN_USE_THREAD_POOL
默认开启,使用 MNN 内部的无锁线程池实现多线程优化。关闭后,视MNN_OPENMP开关选择OpenMP或关闭多线程优化。
注:MNN 的无锁线程池最多允许两个实例同时使用,即最多供两个模型同时推理使用。参考代码 source/backend/cpu/ThreadPool.cpp 中 MNN_THREAD_POOL_MAX_TASKS 宏的定义。 - MNN_OPENMP
默认开启,在 MNN_USE_THREAD_POOL 关闭时生效,依赖OpenMP实现多线程优化。关闭后,禁用OpenMP。 - MNN_OPENCL
默认关闭,开启后,编译OpenCL部分,可以通过指定MNN_FORWARD_OPENCL利用GPU进行推理。 - MNN_OPENGL
默认关闭,开启后,编译OpenGL部分,可以通过指定MNN_FORWARD_OPENGL利用GPU进行推理。
需要android-21及以上,亦即脚本中指定 -DANDROID_NATIVE_API_LEVEL=android-21 - MNN_VULKAN
默认关闭,开启后,编译Vulkan部分,可以通过指定MNN_FORWARD_VULKAN利用GPU进行推理。 - MNN_METAL
默认关闭,开启后,编译Metal部分,可以通过指定MNN_FORWARD_METAL利用GPU进行推理,仅限iOS或macOS上开启。 - MNN_ARM82
默认关闭,开启后,编译Arm8.2部分,用Arm8.2+扩展指令集实现半精度浮点计算(fp16)和int8(sdot)加速
使用Arm82+扩展指令的方法如下:
// 创建session需要的配置
MNN::ScheduleConfig config;
// 选择Backend
config.type = MNN_FORWARD_CPU;
// 线程数
config.numThread = 2;
// 配置相应的Backend
BackendConfig backendConfig;
// 选择低精度/一般配置计算
backendConfig.precision = BackendConfig::Precision_Low;
// 或者
// backendConfig.precision = BackendConfig::Precision_Normal;
config.backendConfig = &backendConfig;
3. 编译步骤
3.1 准备工作
cd /path/to/MNN
./schema/generate.sh
./tools/script/get_model.sh # 可选,模型仅demo工程需要
3.2 本地编译
mkdir build
cd build
cmake ..
make -j8
编译完成后本地出现MNN的动态库。