编译¶
1. 拉取源代码¶
git clone https://github.com/nndeploy/nndeploy.git
cd nndeploy
# 拉取子模块
git submodule update --init --recursive
# 如果拉取子模块失败,调用克隆子模块脚本
python3 clone_submodule.py
2. 编译宏介绍¶
参考编译宏文档 的详细介绍
包含了以下几类配置:
基础构建选项(建议采用默认配置):如是否构建为共享库、使用的C++标准版本等等
核心模块选项(建议采用默认配置):更细粒度控制需要编译的文件
设备后端选项(按需打开,默认全部关闭,不依赖任何设备后端):如CUDA、OpenCL、各种NPU等硬件加速支持
算子后端选项(按需打开,默认全部关闭,不依赖任何算子后端):如cudnn、onednn、xnnpack、qnnpack
推理后端选项(按需打开,默认全部关闭,不依赖任何推理后端):如TensorRT、OpenVINO、ONNX Runtime、MNN等推理框架支持
算法插件选项(建议采用默认配置,传统CV类算法打开,语言类和文生图类算法默认关闭):如检测、分割、llm、文生图等算法插件
其中传统CV类算法依赖
OpenCV,例如检测、分割、分类等,需要打开ENABLE_NNDEPLOY_OPENCV注意:其中
语言类和文生图类模型依赖C++分词器tokenizer-cpp,所以需要打开ENABLE_NNDEPLOY_PLUGIN_TOKENIZER_CPP,由于该库依赖rust,打开前务必参考precompile_tokenizer_cpp.md
注:所有后端均可选。三方库可使用自己的,也可使用nndeploy预编译版本:
huggingface:https://huggingface.co/alwaysssss/nndeploy/blob/main/third_party
modelscope:https://www.modelscope.cn/models/nndeploy/third_party
编译宏编辑规则¶
对于绝大部分编译选项,只用ON/OFF即可。
但对于外部依赖的三方库,有如下三种使能并链接外部的第三方库的方法
方法一:路径path,头文件以及库的根路径,其形式必须修改为头文件:
path/include库:
path/libwindows dll:
path/bin相应的库:ONNXRuntime、OpenVINO、TNN、MNN、Window已经编译好的OpenCV的库
方法二:开关ON,如果你安装了该库,并且可以通过find_package找到该库,可以采用该方式相应的库:Linux平台下的CUDA、CUDNN、TenosrRT、OpenCV
方法三:源码ON,使用源码编译该库,对应third_party目录下的库,可以采用该方式相应的库:tokenizer-cpp、rapidjson、gflags、ONNX
3. 编译方法¶
config.cmake是nndeploy的编译配置文件,用于控制项目的编译选项。
相比于原生cmake -D选项,用户配置好的编译选项文件,可保留下来多次使用,在文件上还可以增加注释,方便后续维护。
相比编译脚本,无需为每个平台编写多种类型脚本,也不会遇到脚本环境问题,只需在根目录创建build目录,将config.cmake复制到该目录,然后修改config.cmake文件,即可开始编译。
假设你在根目录下,具体命令行如下:
mkdir build # 创建build目录
cp cmake/config.cmake build # 将编译配置模板复制到build目录
cd build # 进入build目录
vim config.cmake # 使用编辑器vscode等工具直接修改config.cmake文件
cmake .. # 生成构建文件
make -j # 使用8个线程并行编译
make install # 在build目录下生成安装目录
注:不同平台编译方式
Linux:使用上述 make 命令编译
Windows:使用 Visual Studio 编译
Android:使用 android-ndk 交叉编译
cmake .. -DCMAKE_TOOLCHAIN_FILE=<NDK_PATH>/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_STL=c++_static \ -DANDROID_NATIVE_API_LEVEL=android-14macOS:使用上述 make 命令编译 or 使用 Xcode 编译
iOS:使用 Xcode 编译
Python包的安装¶
nndeploy 提供了完整的 Python API,支持通过Python API快速部署各种深度学习模型。
环境要求:Python 3.10+
安装方式
在完成上述的cmake、make、make install之后
cd path/to/nndeploy/python pip install -e .
安装验证
运行以下命令确认安装成功:
python -c "import nndeploy; print(nndeploy.__version__)"
可能的问题
conda环境冲突问题
当与conda环境产生冲突,无法正常运行时,可参考解决方案脚本进行修复。
系统环境保护问题
在某些系统中,为了保护系统Python环境的完整性,不允许直接在全局Python环境中安装第三方包。此时建议使用虚拟环境进行安装:
# 创建虚拟环境 python3 -m venv nndeploy_env # 激活虚拟环境 source nndeploy_env/bin/activate # 在虚拟环境中安装 pip install -e .
动态库路径问题
如果运行时提示找不到相关动态库,需要将nndeploy的库路径添加到系统环境变量中:
export LD_LIBRARY_PATH=path/to/nndeploy/python/nndeploy:$LD_LIBRARY_PATH
其中
path/to/nndeploy需要替换为实际的nndeploy安装路径。
提供的编译脚本¶
为了简化编译过程,nndeploy 提供了针对不同平台的编译脚本:
build_linux.py: Linux 平台编译脚本build_mac_arm64.py: macOS ARM64 平台编译脚本build_win.py: Windows x86_64 平台编译脚本
注意:使用编译脚本,需要稳定的网络访问 GitHub,如果无法正常访问 GitHub,建议采用上述手动编译方式进行构建。采用脚本编译时间很长,请耐心等待。
编译配置说明:
这些脚本使用与 Python 包相同的编译选项配置
默认启用的推理后端:ONNXRuntime、MNN
默认启用的依赖库:OpenCV、tokenizer-cpp
4. 主库编译¶
默认编译产物:libnndeploy_framework.so(Windows下为nndeploy_framework.dll)
算法插件编译产物:libnndeploy_plugin_xxx.so(Windows下为nndeploy_plugin_xxx.dll)
可执行程序编译产物:nndeploy_demo_xxx(Windows下为nndeploy_demo_xxx.exe)
cpp导出python的编译产物:nndeploy_internal.cpython-xxx.so(Windows下为nndeploy_internal.cpython-xxx.pyd)
注:xxx代表特定算法插件和特定的可执行程序,例如:nndeploy_plugin_detect.so、nndeploy_demo_detect、nndeploy_demo_dag
5. 第三方库官方编译文档以及下载链接¶
| 第三方库 | 主版本 | 编译文档 | 官方库下载链接 | 备注 |
|---|---|---|---|---|
| opencv | 4.10.0 | 链接 | 链接 | |
| TensorRT | 8.6.0.12 | 链接 | 链接 | 支持jetson-orin-nano |
| OpenVINO | 2023.0.1 | 链接 | 链接 | |
| ONNXRuntime | v1.15.1 | 链接 | 链接 | |
| MNN | 2.6.2 | 链接 | 链接 | |
| TNN | v0.3.0 | 链接 | 链接 | |
| ncnn | v0.3.0 | 链接 | 链接 |
注: 我们使用第三方库的上述版本,通常使用其他版本的也没有问题