服务器配置:
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–