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的动态库。
在这里插入图片描述

4. 最后

posted @ 2020-05-23 22:14  程序员-图哥  阅读(2860)  评论(0编辑  收藏  举报