1、准备工具编译链
1.1: cmake>=3.14
sudo apt-get install -y libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0.tar.gz
tar -zxvf cmake-3.20.0.tar.gz
cd cmake-3.20.0
sudo ln -sf $(pwd)/cmake-3.20.0-linux-x86_64/bin/* /usr/bin/
1.2 :gcc>=7
• 当 ubuntu >= 18.04, gcc 版本默认为 7 或以上,不用安装。
# 如果 Ubuntu 版本 < 18.04,需要加入仓库
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-7
sudo apt-get install g++-7
2、创建激活 conda 环境及依赖安装
conda create -n mmdeploy python=3.8.0
conda activate mmdeploy
2.1 torch
示例环境中 cuda 版本是11.1。如果你的 cuda 版本不是11.1,一定要参考 pytorch 官网,选择合适的安装包
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
2.2 cmake
pip install cmake
2.3 mmcv-full
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.10.0/index.html
也可以根据自己的torch版本安装:
如:(pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/${cu_version}/${torch_version}/index.html )
2.4 opencv
conda install opencv
2.5 onnxruntime
pip install onnxruntime==1.8.1
3、mmdeploy SDK依赖库
3.1 安装 Spdlog
1. 如果 ubuntu >= 18.04,
sudo apt-get install libspdlog-dev
2. ubuntu 16.04,
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/spdlog/libspdlog-dev_0.16.3-1_amd64.deb
sudo dpkg -i libspdlog-dev_0.16.3-1_amd64.deb
3.2 Opencv
需要安装 v3+ 以上的版本
如果 ubuntu >= 18.04,
sudo apt-get install libopencv-dev
如果 ubuntu == 16.04,
需要从源码安装,参考: https://docs.opencv.org/3.4/d2/de6/tutorial_py_setup_in_ubuntu.html
4、安装推理引擎
4.1 onnxruntime(>=1.8.1)
1. 安装 onnxruntime 的 python 包
pip install onnxruntime==1.8.1
2. 下载 onnxruntime 的预编译包。参考如下命令,解压压缩包并设置环境变量
wget https://github.com/microsoft/onnxruntime/releases/download/v1.8.1/onnxruntime-linux-x64-1.8.1.tgz
tar -zxvf onnxruntime-linux-x64-1.8.1.tgz
cd onnxruntime-linux-x64-1.8.1
export ONNXRUNTIME_DIR=$(pwd)
export LD_LIBRARY_PATH=$ONNXRUNTIME_DIR/lib:$LD_LIBRARY_PATH
4.2 TensorRT
1. TensorRT tar 包。要保证它和您机器的 CPU 架构以及 CUDA 版本是匹配的。
2. 这里是 Linux x86_64 和 CUDA 11.x 下的安装示例,供您参考。
tar -zxvf TensorRT-8.2.3.0.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
pip install TensorRT-8.2.3.0/python/tensorrt-8.2.3.0-cp38-none-linux_x86_64.whl
export TENSORRT_DIR=$(pwd)/TensorRT-8.2.3.0
export LD_LIBRARY_PATH=$TENSORRT_DIR/lib:$LD_LIBRARY_PATH
4.3 cuDNN
1. 从 cuDNN Archive 选择和您环境中 CPU 架构、CUDA 版本以及 TensorRT 版本配套的 cuDNN。以前文 TensorRT 安装说明为例,它需要 cudnn8.2。因此,可以下载 CUDA 11.x cuDNN 8.2
2. 解压压缩包,并设置环境变量
cd /the/path/of/cudnn/tgz/file
tar -zxvf cudnn-11.3-linux-x64-v8.2.1.32.tgz
export CUDNN_DIR=$(pwd)/cuda
export LD_LIBRARY_PATH=$CUDNN_DIR/lib64:$LD_LIBRARY_PATH
5、编译安装mmdeploy
1.下载 MMDeploy,设置 MMDeploy目录为当前环境变量
git clone -b master git@github.com:open-mmlab/mmdeploy.git
cd mmdeploy
git submodule update --init --recursive
mkdir -p build && cd build
cmake -DMMDEPLOY_TARGET_BACKENDS='ort;trt' ..
make -j$(nproc) && cd ..
pip install -e .
6、编译SDK
6.1 ppl.cv
git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
git checkout tags/v0.6.2 -b v0.6.2
./build.sh cuda
6.2 cpu+cuda+onncruntime+tensorrt
rm -rf build/CM* build/cmake-install.cmake build/Makefile build/csrc
mkdir -p build && cd build
cmake .. \
-DCMAKE_CXX_COMPILER=g++ \
-DMMDEPLOY_BUILD_SDK=ON \
-DMMDEPLOY_TARGET_DEVICES="cpu;cuda" \
-DMMDEPLOY_TARGET_BACKENDS="ort,trt" \
-DMMDEPLOY_CODEBASES=all \
-DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
-Dpplcv_DIR=/tmp/ppl.cv/cuda-build/install/lib/cmake/ppl \
-DTENSORRT_DIR=${TENSORRT_DIR} \
-DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR}
make -j$(nproc) && make install
export LD_LIBRARY_PATH=${MMDEPLOY_DIR}/build/lib:${LD_LIBRARY_PATH}
7、模型转换
使用方法
python ./tools/deploy.py \
${DEPLOY_CFG_PATH} \
${MODEL_CFG_PATH} \
${MODEL_CHECKPOINT_PATH} \
${INPUT_IMG} \
--test-img ${TEST_IMG} \
--work-dir ${WORK_DIR} \
--calib-dataset-cfg ${CALIB_DATA_CFG} \
--device ${DEVICE} \
--log-level INFO \
--show \
--dump-info
参数描述
deploy_cfg : MMDeploy 中用于部署的配置文件路径。
model_cfg : OpenMMLab 系列代码库中使用的模型配置文件路径。
checkpoint : OpenMMLab 系列代码库的模型文件路径。
img : 用于模型转换时使用的图像文件路径。
--test-img : 用于测试模型的图像文件路径。默认设置成None。
--work-dir : 工作目录,用来保存日志和模型文件。
--calib-dataset-cfg : 此参数只有int8模式下生效,用于校准数据集配置文件。若在int8模式下未传入参数,则会自动使用模型配置文件中的’val’数据集进行校准。
--device : 用于模型转换的设备。 默认是cpu。
--log-level : 设置日记的等级,选项包括'CRITICAL', 'FATAL', 'ERROR', 'WARN', 'WARNING', 'INFO', 'DEBUG', 'NOTSET'。 默认是INFO。
--show : 是否显示检测的结果。
--dump-info : 是否输出 SDK 信息。
8、参考链接
https://zhuanlan.zhihu.com/p/484842986
https://mmdeploy.readthedocs.io/zh_CN/latest/build/linux.html