Linux安装mmdeploy1.2

本文详细介绍了在Ubuntu 18.04上安装mmdeploy 1.2的过程,包括CUDA 11.4、CUDNN 8.2的安装,以及miniconda、PyTorch 1.10.0、mmcv的配置。然后,文章展示了如何为Model Converter和SDK安装依赖,特别提到了TensorRT的安装和环境变量设置。接着,文章演示了如何使用mmdeploy转换Faster R-CNN、Cascade R-CNN、Mask R-CNN和DeepLabv3模型,并在COCO2017-val和cityscapes数据集上进行性能对比和基准测试。实验结果显示,经过TensorRT优化后的模型在保持精度的同时,运行速度显著提升。
摘要由CSDN通过智能技术生成

参考链接

mmdeploy/docs/en/01-how-to-build/linux-x86_64.md at main · open-mmlab/mmdeploy

Toolchains安装

  • 操作系统:Ubuntu 18.04
  • cuda:11.4

安装cuda之前需要确认自己机器的驱动是否支持该版本的cuda,cuda版本与驱动之间的关系可以打开链接查看,驱动下载的载链接为:https://www.nvidia.com/download/index.aspx
确认上述信息或者更新自己驱动之后,就可以打开链接,根据自己机器选择合适的配置,得到下载命令,下载文件并安装。image.png
image.png
将cuda环境变量添加到系统中

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  • cudnn:8.2

cudnn的下载链接为:https://developer.nvidia.com/rdp/cudnn-archive。本文中下载的cudnn版本为8.2.1,适配cuda 11.x的版本。具体安装过程请自行搜索。
image.png

  • cmake:cmake版本需要大于等于3.14.0,安装方式如下:
wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-x86_64.tar.gz
tar -xzvf cmake-3.20.0-linux-x86_64.tar.gz
sudo ln -sf $(pwd)/cmake-3.20.0-linux-x86_64/bin/* /usr/bin/

依赖环境

MMdeploy可以分为两部分:Model Converter和SDK。其中Model Converter是将模型转换为目标推理引擎要求的格式文件,如TensorRT,则生成TensorRT Engine文件。SDK提供多种编程语言在工业生产来部署目标推理引擎。

为Model Conveter安装依赖

miniconda

  1. 安装miniconda
  • 下载miniconda文件,打开链接,找到适合自己目标机器的文件
  • 安装minconda

通过如下命令安装即可,过程中一直enter就行,默认情况下,conda的环境变量会写入到bashrc文件中。

sudo bash Miniconda3-latest-Linux-x86_64.sh
  • 激活conda环境

通过下面的命令可以激活conda环境,进入base虚拟环境。

source ~/.bashrc
  • 替换conda国内源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

如果只想在安装时使用国内源,则可以通过如下命令实现:

conda install -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64 opencv tensorboardX
  1. 为mmdeploy创建虚拟环境
conda create -n mmdeploy python=3.8 -y
conda activate mmdeploy

pytorch:1.10.0

通过如下的命令安装pytorch 1.10.0,对应的cudatoolkit为11.3,而安装的cuda为11.4,但是对于后续的测试没有什么影响。

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge

mmcv

export cu_version=cu114 # cuda 11.4
export torch_version=torch1.10
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0rc2"

为SDK安装依赖环境

  • OpenCV
sudo apt-get install libopencv-dev
  • pplcv
git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
export PPLCV_DIR=$(pwd)
git checkout tags/v0.7.0 -b v0.7.0
./build.sh cuda

安装推理引擎

image.png
mmdeploy支持以不同的backend推理模型,在这篇文章中主要测试Tensor RT backend。本文以TensorRT推理引擎的安装为例,其他推理平台可以参考文档

TensorRT

  1. 下载TensorRT tar文件
tar -xvf TensorRT-8.2.4.2.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
  1. 添加环境变量
# <<< TensorRT 8 <<<

export PATH=/home/xxxx/local/TensorRT-8.2.4.2/bin:$PATH
export LD_LIBRARY_PATH=/home/xxxx/local/TensorRT-8.2.4.2/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/xxxx/local/TensorRT-8.2.4.2/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/xxxx/local/TensorRT-8.2.4.2/include:$CPLUS_INCLUDE_PATH
  1. 安装TensorRT python 包
cd python
# 根据python的版本安装
pip install tensorrt-8.2.4.2-cp38-none-linux_x86_64.whl
  1. 安装pycuda
conda install -c conda-forge pycuda

编译mmdeploy

编译mmdeploy分为两部分,Model Converter和SDK。其中converter的作用是将pytorch模型转换为对应backend的推理引擎文件,并测试起在不同数据集上的性能;SDK提供不同编程语言来将backend的推理引擎部署到工业实际生成中。

Model Converter

编译model converter包含两个步骤,一个是编译backend的自定义算子,一个是安装mmdeploy-python库。

编译tensorrt算子

cd ${
   MMDEPLOY_DIR}
mkdir -p build && cd build
cmake -DCMAKE_CXX_COMPILER=g++-7 -DMMDEPLOY_TARGET_BACKENDS=trt -DTENSORRT_DIR=${
   TENSORRT_DIR} -DCUDNN_DIR=${
   CUDNN_DIR} ..
make -j$(nproc) && make install

编译成功之后会生成libmmdeploy_tensorrt_ops.so动态库。mmdeploy-python会在进行模型转换时,修改模型的function、module和symbolic,需要链接相应的tensorrt自定义算子

安装mmdeploy-python

cd ${
   MMDEPLOY_DIR}
mim install -e .

安装完成之后,就可以对mmdeploy支持的模型进行相应的转换。其实后续的SDK可以不安装。

Build SDK and Demo

这个应该就是基于mmdeploy的部署sdk,通过mmdeploy- python得到tensorrt engine之后,通过这个sdk可以直接部署模型。

cmake -DCMAKE_CXX_COMPILER=g++-7 \
-DMMDEPLOY_TARGET_BACKENDS=trt \
-DTENSORRT_DIR=/home/xxxx/local/TensorRT-8.2.4.2 \
-DCUDNN_DIR=/home/xxxx/local/cuda/ \
-DMMDEPLOY_BUILD_SDK=ON -DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
-DMMDEPLOY_BUILD_EXAMPLES=ON -DMMDEPLOY_TARGET_DEVICES="cuda;cpu" ..

转换模型

本文测试了常见模型Faster R-CNN、Cascade R-CNN、DeepLabv3和Mask R- CNN转换之后性能之间的对比。转换模型和测试性能可以分别参考如下两个链接:

benchmark

mmdeploy支持不同类型模型的转换,具体运行时间和精度可以参考如下链接

mmdet

对应mmdetection,测试了Yolov3、Faster R-CNN、Cascade R-CNN和Mask R-CNN。
mmdetection/docs/en/model_zoo.md at main · open-mmlab/mmdetection
在安装MM Detection遇到numpy的版本问题,解决方案源码编译安装cocoapi。

git clone https://github.com/pdollar/coco.git

截屏2023-07-04 17.36.36.png

Yolov3

转换engine脚本如下(static shape转换正常,dynamic shape存在问题):

#!/bin/bash

export MMDET_ROOT=/home/xxxx/workspace/mmlab/mmdetection
python ./tools/deploy.py \
    configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
    $MMDET_ROOT/configs/yolo/yolov3_d53_8xb8-ms-608-273e_coco.py \
    $MMDET_ROOT/exp/yolov3_d53_mstrain-608_273e_coco_20210518_115020-a2c3acb8.pth \
    $MMDET_ROOT/demo/demo.jpg \
    --work-dir work_dir \
    --device cuda:0

Yolo v3就进行了Tensor RT Engine转换未对性能进行相应的对比。

Faster R-CNN

转换engine文件的脚本与Yolo v3转换类似,只需要替换对应的deploy_config和model_config文件路径。

#!/bin/bash

export MMDET_ROOT=/home/xxxx/workspace/mmlab/mmdetection
python ./tools/deploy.py \
    configs/mmdet/detection/faster_rcnn_tensorrt_static-800x1344.py \
    $MMDET_ROOT/configs/faster_rcnn/faster-rcnn_r50_fpn_2x_coco.py \
    $MMDET_ROOT/exp/faster_rcnn_r50_fpn_2x_coco_bbox_mAP-0.384_20200504_210434-a5d8aa15.pth \
    $MMDET_ROOT/demo/demo.jpg \
    --work-dir work_dir \
    --device cuda:0

测试其在COCO2017-val数据集上的性能。
Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.384
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.590
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.420
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.215
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.421
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.503
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.520
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.520
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.520
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.326
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.557
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.661
07/05 14:00:14 - mmengine - INFO - bbox_mAP_copypaste: 0.384 0.590 0.420 0.215 0.421 0.503
07/05 14:00:16 - mmengine - INFO - Results has been saved to exp/results.pkl.
07/05 14:00:16 - mmengine - INFO - Epoch(test) [5000/5000]    
coco/bbox_mAP: 0.3840  
coco/bbox_mAP_50: 0.5900  
coco/bbox_mAP_75: 0.4200  
coco/bbox_mAP_s: 0.2150  
coco/bbox_mAP_m: 0.4210  
coco/bbox_mAP_l: 0.5030  
data_time: 0.0028  time: 0.0402

通过onnx转换得到对应的engine文件之后,可以通过tools/test.py文件测试精度和速度。

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.384
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.590
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.419
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.215
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.421
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.502
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.519
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.519
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.519
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.325
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.556
Average Recall     (AR) @[ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值