添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

MNN环境搭建记录

MNN所需环境要求:

  • cmake(建议使用3.10以上版本)
  • protobuf(使用3.0以上版本)
  • gcc(使用4.9以上版本)

protobuf安装:

下载:

网上说从git下载,但有些资料说git版本没有写配置configure文件,要以configure方式安装需要下载已经打包好的压缩包.链接:

developers.google.com/p

推荐下载all的版本.

安装:

tar -xvf protobuf
cd protobuf
./configure --prefix=/usr/local/protobuf
make check
make install

添加到系统环境变量:

打开配置文件:

vim /etc/profile

写入配置:

####### add protobuf lib path ########
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
######################################

执行:

source /etc/profile

安装完成,查看版本:

protoc --version

MNN编译安装

下载

从git直接拉取:

git clone https://github.com/alibaba/MNN.git

编译选项

使用 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;

准备工作

cd /path/to/MNN
./schema/generate.sh
./tools/script/get_model.sh # 可选,模型仅demo工程需要

本地编译

mkdir build && cd build && cmake .. && make -j8

可能会遇到的问题:

1.配置不正确:

CMake Error at source/backend/cpu/arm/CMakeLists.txt:11 (LIST):
  list does not recognize sub-command FILTER
Call Stack (most recent call first):
  source/backend/cpu/CMakeLists.txt:26 (include)
  CMakeLists.txt:365 (include)

解决:

打开 source/backend/cpu/arm/CMakeLists.txt配置文件,注释相关代码(这部分本身不适合自己的机器):

if (MNN_SUPPORT_BF16)
    FILE(GLOB MNN_NEON_SRC ${MNN_NEON_SRC} ${CMAKE_CURRENT_LIST_DIR}/CommonNeonBF16.cpp)
#else()                                                      #  这些配置直接不使用
#    LIST(FILTER MNN_AArch32_SRC EXCLUDE REGEX ".*BF16.*")   #  注释掉
#    LIST(FILTER MNN_AArch64_SRC EXCLUDE REGEX ".*BF16.*")   #  当然也要根据自身需求进行注释
endif()

2.libcurl.so.4包冲突

******/libcurl.so.4: no version information available(required by /usr/bin/cmake)

解决:

定位 libcurl.so.4 文件

locate libcurl.so.4

运行命令后大概是这样的

/home/zeng/libcurl.so.4
/home/zeng/anaconda3/lib/libcurl.so.4
/home/zeng/anaconda3/lib/libcurl.so.4.5.0
/home/zeng/anaconda3/pkgs/libcurl-7.61.0-h1ad7b7a_0/lib/libcurl.so.4
/home/zeng/anaconda3/pkgs/libcurl-7.61.0-h1ad7b7a_0/lib/libcurl.so.4.5.0