官网
MNN 轻量级高性能推理引擎
-
通用性 - 支持TensorFlow、Caffe、ONNX等主流模型格式,支持CNN、RNN、GAN等常用网络。
-
高性能 - 极致优化算子性能,全面支持CPU、GPU、NPU,充分发挥设备算力。
-
易用性 - 转换、可视化、调试工具齐全,能方便地部署到移动设备和各种嵌入式设备中。
环境要求
- 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.
安装
1. 下载
git clone https://github.com/alibaba/MNN
2. 编译选项
使用cmake
编译时,可以修改CMakeLists.txt
中的选项:
- MNN_DEBUG
默认关闭,关闭时,不保留符号,开启优化。
- MNN_OPENMP
默认开启,关闭后,禁用openmp多线程优化。
- MNN_OPENCL
默认关闭,开启后,编译OpenCL部分,可以通过指定MNN_FORWARD_OPENCL利用GPU进行推理。
- MNN_OPENGL
默认关闭,开启后,编译OpenGL部分,可以通过指定MNN_FORWARD_OPENGL利用GPU进行推理。
- 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;
config.backendConfig = &backendConfig;
3. 编译
准备工作
(可选,修改 MNN Schema 后需要)
cd /path/to/MNN
./schema/generate.sh
./tools/script/get_model.sh # 可选,模型仅demo工程需要
本地编译
mkdir build && cd build && cmake .. && make -j8
编译完成后本地出现MNN的动态库。