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. 最后


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM