服务器配置:
GPU:2080Ti
CUDA版本:cuda:11.3
driver version:450.57
1、部署环境配置:
(1)拉取镜像并进入
docker pull adenialzz/mmdeploy
docker run --gpus all --name [镜像名称] -itd -p 物理机端口:容器端口 -v 本地地址:容器映射地址 --privileged=true --ipc=host [容器id] /bin/bash
docker exec -it [容器id] /bin/bash
(2)下载对应cuda版本的mmcv-full\torch\torchvision 并安装
CUDA版本:11.3
mmcv-full: mmcv_full-1.4.8-cp38-cp38-manylinux1_x86_64.whl
TensorRT:TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
torch:torch-1.10.0+cu113-cp38-cp38-linux_x86_64.whl
torchvision:torchvision-0.11.1+cu113-cp38-cp38-linux_x86_64.whl
pip install torch-1.10.0+cu113-cp38-cp38-linux_x86_64.whl
pip install torchvision-0.11.1+cu113-cp38-cp38-linux_x86_64.whl
pip install mmcv_full-1.4.8-cp38-cp38-manylinux1_x86_64.whl
其余需要资源:
ppl.cv/onnxruntime-linux-x64-1.8.1.tgz/third_party/pybind11/ cmake>=3.14/mmdeploy-0.4.0/mmdetection-2.22.0/TensorRT
(3)安装和配置
安装mmdetection
pip install
cd mmdetection-2.22.0
pip install -v -e .
安装TensorRT
tar -xvf TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
pip install TensorRT-8.4.1.5/python/tensorrt-8.4.1.5-cp38-none-linux_x86_64.whl
pip install TensorRT-8.4.1.5/onnx_graphsurgeon/onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
pip install TensorRT-8.4.1.5/graphsurgeon/graphsurgeon-0.4.6-py2.py3-none-any.whl
pip install TensorRT-8.4.1.5/uff/uff-0.6.9-py2.py3-none-any.whl
并在bashrc中完成变量添加:
export TENSORRT_DIR=/root/workspace/TensorRT-8.4.1.5:$TENSORRT_DIR
export LD_LIBRARY_PATH=/root/workspace/TensorRT-8.4.1.5/lib/:$LD_LIBRARY_PATH
编译mmdeploy-0.4.0
-
TensorRT 自定义算子
cd ${MMDEPLOY_DIR}
mkdir -p build && cd build
cmake -DCMAKE_CXX_COMPILER=g++-9 -DMMDEPLOY_TARGET_BACKENDS=trt -DTENSORRT_DIR=${TENSORRT_DIR} -DCUDNN_DIR=${CUDNN_DIR} ..
make -j$(nproc)
-
安装 Model Converter
cd ${MMDEPLOY_DIR}
pip install -e .
-
cuda + TensorRT编译
cd ${MMDEPLOY_DIR}
mkdir -p build && cd build
cmake .. \
-DCMAKE_CXX_COMPILER=g++-9\
-DMMDEPLOY_BUILD_SDK=ON \
-DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
-DMMDEPLOY_TARGET_DEVICES="cuda;cpu" \
-DMMDEPLOY_TARGET_BACKENDS=trt \
-DMMDEPLOY_CODEBASES=all \
-Dpplcv_DIR=${PPLCV_DIR}/cuda-build/install/lib/cmake/ppl \
-DTENSORRT_DIR=${TENSORRT_DIR} \
-DCUDNN_DIR=${CUDNN_DIR}
make -j$(nproc) && make install

出现上述图片就是成功的标志
2、推理环境配置和测试
(1)加载mmdet2_5_tensorrt_inference.tar镜像
(2)重新安装TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
(3)运行测试代码
测试结果如下所示:
FP32:

FP16:

INT8:

|
mmdet-fp32 |
trt_fp32 |
trt_fp16 |
trt_int8 |
trt加速 |
18.67 |
31.74 |
61.35 |
71.80 |
trt加速+后处理 |
9-10 |
15-16 |
17-19 |
17-19 |
3、Trouble Shooting
1、直接运行,报了cuda error ,说是torch版本不兼容
2、更新torch版本为1.7后
ImportError: cannot import name ‘_get_tensor_dim_size’ from ‘torch.onnx.symbolic_helper’ (/opt/conda/lib/python3.8/site-packages/torch/onnx/symbolic_helper.py)
3、更新torch为1.11
ImportError: /opt/conda/lib/python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZNK2at6Tensor7is_cudaEv
1/2/3解决方式:登录torch官网,找到自己CUDA版本适配的torch/torchvision.
mmcv-full安装方式也需要去mmcv-full官网查询与之适配的cuda版本好,以防出错。
4、ImportError: libnvinfer.so.8: cannot open shared object file: No such file or directory
解决方式:配置TensorRT的环境变量

–END–