将最近的工作做个记录,方便日后学习回顾:
1.针对项目需求开发满足任务的模型,拿到任务就要去选相应的算法,由于是工程应用型,必须找填坑多的算法,这样遇到问题可参考的资料多。
2.做好以后,还要将开发的算法进行封装集成,要交付的是一个相对成熟的产品,所以涉及到算法和模型的部署,而不是每个应用场景都需要像开发环境一样去构建开发环境。
3.在本次模型的部署中遇到了各种各样的问题,有些细小问题无法全面记录,本次只按开发流程记录必要步骤。
4.主要涉及环境配置、模型训练、模型编译、模型部署、产品测试。
5.包含tensorRT模型加速、Triton模型推理、ubuntu18.04、GPU1080\2080\3080\3090上的不同处理、cuda、NVIDIA驱动、linux操作系统(不同设备上部署各环境要严格遵守官网建议、否则极易失败……)

目录

  • 1.yolo模型训练
  • 2.tensorRT模型编译
  • 3.triton-inference-server
  • 4.模型部署
    • 4.1环境安装
      • 4.1.1 适用于gpu1080/2080
      • 4.1.2 适用于GPU1080\2080\3080\3090
    • 4.2启动triton服务
    • 4.3启动封装好的客户端界面
  • 5总结

1.yolo模型训练

网上有各种版本的训练教程,自己找一个完成训练即可。我这里所采用的是yolov5,具体训练可参看《yolov5训练自己的数据集(一文搞定训练)》。

2.tensorRT模型编译

由于我们训练的网络模型参数较多,模型较大,且需要部署到其他机器,会导致模型加载及推理的速度降低。为了提高模型的速度,我们利用tensorRT对训练好的模型进行优化。tensorRT是C++库,故需要对现有模型进行转换。github上有各种模型的tensorRT项目:tensorRT.
在build之前,要按照自己的训练参数对应的进行修改,如yolov5.cpp中的cuda版本,class_map……,yololayer.h中的输入图像的长宽等所有和训练有关的参数。此外,还要在编译之前就要完全按照你之后所用到的对应版本triton的配套环境进行配置(前后不匹配的话,就会和我一样遇到好多问题)这里可以回头再进行tensorRT模型的编译(重复失败几次就熟悉了……)。
build过程其实很容易,就看环境那些的不报错就行。主要操作看官网的readme。即:

在yolov5中将训练好的pt模型利用gen_wts.py转换成.wts文件并复制到tensorRT项目下
然后:
mkdir build
cd build
cmake …
make
sudo ./yolov5 -s

通过上面步骤就会在build文件夹下生成yolov.enginelibmyplugins.so。这两个文件后面有用!

这里是我自己的环境配置(ubuntu18.04):

GPU1080\2080上面:
triton20.8\9
tensorRT7.1.3
NVIDIA driver 450.51
cuda11.0
opencv3.4

GPU3080\3090上面:
triton20.11
tensorRT7.2.1
NVIDIA driver 460.84
cuda11.1
opencv4.0.1

#其中在该环境下编译可能会遇到上图报错,需要将yolov5.cpp文件做修改:所有的CV_FOURCC_MACRO(‘M’, ‘P’, ‘4’, ‘V’)换为cv::VideoWriter::fourcc(‘M’,‘P’,‘4’,‘V’)

关于驱动、cuda的安装可以参看:ubuntu18.04下cuda9.0-cudnn7.6安装与多版本cuda共存及切换。
tensorRT下载链接,各版本对应的环境依赖。
opencv安装(这个适用于部署机器,若是开发进行模型编译时最好利用build得方式安装opencv,这个网上可参考的案例很多,但是在有些情况下不同版本的opencv编译的坑不同,在3080上3.4版本的我就没编译成功,最后换成了4.0.1,直接就成功了,具体操作自行查找):

sudo add-apt-repository ppa:timsc/opencv-3.4
sudo apt-get update
sudo apt install libopencv-dev

如果你安装opencv3.4.1中遇到了问题可参考:
ubuntu18.04安装opencv3.4.3遇到问题解决方法 ubuntu18.04
安装OpenCV3.4.1踩坑过程

3.triton-inference-server

Triton 推理服务器,提供针对 CPU 和 GPU 进行优化的云和边缘推理解决方案。Triton 支持 HTTP/REST 和 GRPC 协议,允许远程客户端请求对服务器管理的任何模型进行推理。对于边缘部署,Triton 可用作带有 C API 的共享库,允许将 Triton 的全部功能直接包含在应用程序中。github项目地址:https://github.com/triton-inference-server/server
关于如何triton的介绍及使用可到官方github上仔细研读。其中强调一点就是要必须遵守官方文档中的各版本所依赖的环境,其中若是在ubuntu18.04下使用的话、使用版本20系列,20.08,20.09可在GPU1080\2080上运行,在GPU3080\3090上没成功:

在GPU3080\3090上使用20.11版本。
关于各版本所依赖的环境可见:support-matrix:

重点关注NVIDIA驱动、cuda、tensorRT三者的依赖关系。

具体使用教程参见:Quickstart
需要安装docker,NVIDIA Container Toolkit。
拉取所需要的triton。

#其中 <xx.yy> 是您要拉取的 Triton 版本。
docker pull nvcr.io/nvidia/tritonserver:<xx.yy>-py3
#例如  docker pull nvcr.io/nvidia/tritonserver:20.08-py3 

创建自己的模型库,就是一个存放自己模型的文件夹,其文件存放的示例见docs/examples/model_repository 中。其中config.pbtxt文件是模型的输入输出的一些参数。

启动服务:

docker run --gpus=1 --rm -p8000:8000 -p8001:8001 -p8002:8002 -v/full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:<xx.yy>-py3 tritonserver --model-repository=/models

也可按照指示获取客户端示例,具体看官方文档。

4.模型部署

将模型在别的机器上进行部署。所部署的机器不需要拥有模型的开发环境,只需配置模型的运行环境即可。

4.1环境安装

4.1.1 适用于gpu1080/2080

cuda11.0-tensorRT7.1.3-opencv3.4-triton20.8 所对应的驱动大于450
这里必须先安装cuda再装tensorRT,且安装方式要一致,我用的是deb安装

对于该环境安装起来比较简单,直接运行脚本sh install_server_env.sh 文件具体内容如下

#!/bin/bash
# install cuda
cd package/  #存放对应deb安装包的文件夹
sudo dpkg -i cuda-repo-ubuntu1804-11-0-local_11.0.3-450.51.06-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda# install tensorrt
sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda11.0-trt7.1.3.4-ga-20200617_1-1_amd64.deb
sudo apt-get update
sudo apt-get install tensorrt# install opencv
sudo add-apt-repository ppa:timsc/opencv-3.4
sudo apt-get update
sudo apt install libopencv-dev# install docker
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.iosudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart dockersudo cp ./daemon.json /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker# install NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker# install tritonserver
docker pull nvcr.io/nvidia/tritonserver:20.08-py3echo "server env installed successfully!"

4.1.2 适用于GPU1080\2080\3080\3090

该环境主要是为了在30系列显卡上进行模型的部署,所需要的环境比较新,所以有很多的坑,下面是我花了好多时间测试出来的能够在30系列上部署成功的方法。由于我开发是在GPU1080上进行的,如果用我自己的环境编译出来的模型就会加载失败:

所以得在30的卡上单独编译适用于30的环境。

测试下来triton20.11支持GPU3080\3090但其依赖cuda11.1
相比上面一种傻瓜式安装,这种安装需要我们一步步逐步安装。
1.升级ubuntu内核 linux kernel change to 5.9+(cuda 11.1 require)
2.卸载原有驱动及cuda,重新安装cuda11.1+cudnn8.0.5
3.安装tensorRT7.2.1
4.升级NVIDIA驱动(这一步必须在安装完cuda11.1和tensorRT后进行,原因是为了满足tensorRT安装的依赖,我们的cuda必须和tensorRT采用相同的deb安装方式安装,而这种方式安装的cuda是自带驱动的)
5.安装opencv4.0.1
6.剩下的与上一种脚本安装基本一样

1. 升级ubuntu内核
参考:Ubuntu 18.04 内核升级
按照作者教程,下载对应的deb包,下载网址https://kernel.ubuntu.com/~kernel-ppa/mainline/,升级至5.9:

sudo dpkg -i *.deb
#重启
reboot

2.卸载原有驱动及cuda,重新安装cuda11.1+cudnn8.0.5

sudo apt-get --purge remove nvidia*
sudo apt autoremove
sudo apt-get --purge remove "*cublas*" "cuda*"
sudo apt-get --purge remove "*nvidia*"

官网下载cuda11.1deb安装文件:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-1-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

安装cudnn8.0.5
这里若是cudnn与cuda版本不匹配或者不安装或者安装没有进行链接,都会在tensorRT模型编译的时候报错:

这里建议采用deb安装方式(tar解压并替换文件的方式我试了,没成功)
参考:NVIDIA cuDNN v8 deb方法安装和卸载教程(Linux/Ubuntu)进行安装。
官网下载下面三个文件:


使用如下语句依次安装:

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.1_amd64.deb

查看cudnn版本:

dpkg -l | grep cudnn


3.安装tensorRT7.2.1

wget https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/7.2.1/local_repos/nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007_1-1_amd64.deb
sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007_1-1_amd64.deb
sudo apt-get update
sudo apt-get install tensorrt

4.升级NVIDIA驱动

参考网上安装驱动教程,需要禁用源,然后下载最新的nvidia驱动文件:

sudo sh NVIDIA-Linux-x86_64-460.84.run

5.opencv4.0.1安装
参考:Linux下安装OpenCV4(适用于Ubuntu等)
官网下载安装包,并解压。
在解压的文件夹里新建一个文件夹用来编译OpenCV:

cd opencv-4.0.1
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j7
sudo make install
cd /etc/ld.so.conf.d/
sudo touch opencv4.conf
sudo sh -c 'echo "/usr/local/lib" > opencv4.conf'
sudo ldconfig

6.其余环境安装,直接用上一节中的脚本将triton换为20.11安装即可

运行脚本sh install_server_env.sh其具体内容如下:

# install docker
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.iosudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart dockersudo cp ./daemon.json /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker# install NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker# install tritonserver
docker pull nvcr.io/nvidia/tritonserver:20.11-py3echo "server env installed successfully!"

至此就完成了所有环境在GPU3080上的安装,我们要用该环境编译使用于30的模型,故在这之后重新build
tensorRT模型(见第二节),这里说下编译好的模型如何建立triton模型库。编译将生成的yolov5.engin改名为model.plan。另外还有生成的libmyplugins.so文件,按照下面tree放置:

其中config.pbtxt文件:

4.2启动triton服务

sh run_triton_model.sh启动,文件内容如下(其中在30系列上是tritonserver:20.11。20.08启动一样,改个版本换个模型即可):

#!/bin/bash
docker run --gpus all \    --rm --shm-size=1g \    --ipc=host --ulimit memlock=-1 \    --ulimit stack=67108864 -p8000:8000 -p8001:8001 -p8002:8002 \    -v$(pwd)/triton_deploy/models:/models \    -v$(pwd)/triton_deploy/plugins:/plugins \    --env LD_PRELOAD=/plugins/libmyplugins.so nvcr.io/nvidia/tritonserver:20.11-py3 tritonserver \    --model-repository=/models \    --grpc-infer-allocation-pool-size=16 --log-verbose 1


4.3启动封装好的客户端界面

部署后的检测帧率在每秒50帧左右:

5总结

本来在1080\2080直接就部署成功的,但是在部署3080设备时遇到了很多不兼容的问题,经过不断的尝试终于一步步走了下去。真的是每进行一步都有各种大大小小的问题。在解决问题中有的直接就可以找到处理方法,但是有的网上搜不到,只能自己尝试解决,这个过程相当痛苦,前前后后搞了将近一周,熬夜加班,有时候也想放弃。但是回头来看,总结几点吧,官方文档一定要仔细看,多参考别人躺过的坑,还有就是心态不能乱!

yolo模型部署——tensorRT模型加速+triton服务器模型部署相关推荐

  1. 把onnx模型转TensorRT模型的trt模型报错:Your ONNX model has been generated with INT64 weights. while TensorRT

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 把onnx模型转TensorRT模型的trt模型报错:[TRT] onnx2trt_utils.cpp:198: You ...

  2. keras保存模型_onnx+tensorrt部署keras模型

    由于项目需要,最近捣鼓了一波如何让用tensorrt部署训练好的模型来达到更快的推理速度,期间花费了大量的时间在知乎和各种网页上去搜索别人的方案,但始终没有找到我想要的条理相对清晰的记录贴(也许只是我 ...

  3. tensorrt安装_基于TensorRT的BERT推断加速与服务部署

    BERT的出现真是广大NLPer的福音,在很多任务上能取得显著提升.不例外,作者在工作过程中也使用了BERT进行下游任务训练,但在感叹BERT真香的时候,它及其漫长的推断时间让人感到很为难.本文就记录 ...

  4. 在NVIDIA Jetson Xavier NX上把yolov4-deepsort的模型pb模型使用tensorflow-onnx和onnx-tensorrt工具最终转换为tensorrt模型

    文章目录: 1 安装tensorflow-onnx环境和把tensorflow的pb模型转换为onnx模型 1.1 安装tensorflow2onnx环境 1.2 把tensorflow的pb模型转换 ...

  5. 【TensorRT】PyTorch模型转换为ONNX及TensorRT模型

    文章目录 1. PyTorch模型转TensorRT模型流程 2. PyTorch模型转ONNX模型 3. ONNX模型转TensorRT模型 3.1 TensorRT安装 3.2 将ONNX模型转换 ...

  6. win10下 yolov8 tensorrt模型加速部署【实战】

    Windows10下yolov8 tensorrt模型加速部署[实战] TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux ...

  7. 【YoloV5 6.0|6.1 部署 TensorRT到torchserve】环境搭建|模型转换|engine模型部署(详细的packet文件编写方法)

    忽然发现,关于部署TensorRT的文章少的可怜,于是乎,决定分享一下我自己关于这部分内容的一些成功实操和心得.还是希望大家可以分享出去,让更多人看到!!! QQ: 1757093754 我的操作环境 ...

  8. AI模型工业部署:综述【常用的部署框架:TensorRT、Libtorch】【常见提速方法:模型结构、剪枝、蒸馏、量化训练、稀疏化】【常见部署流程:onnx2trt】【常见服务部署搭配】

    作为深度学习算法工程师,训练模型和部署模型是最基本的要求,每天都在重复着这个工作,但偶尔静下心来想一想,还是有很多事情需要做的: 模型的结构,因为上线业务需要,更趋向于稳定有经验的,而不是探索一些新的 ...

  9. pytorch C++部署模型 ONNX tensorRT

    (1) C++部署pytorch模型(上) (2) TensorRT5介绍及Pytorch转TensorRT5代码示例 TensorRT的使用步骤:(假设以及有一个训练好的模型) (1) 根据模型创建 ...

最新文章

  1. pip安装库包以及.whl库包、.tar.gz库包具体方式
  2. view是怎么被展示在手机上的?
  3. python 期货交易_Python期货量化交易基础教程(8)
  4. c++图形化界面_还能这样用?Linux下如何编译C程序?
  5. TortoiseSVN设置比较工具为BeyondCompare
  6. gradle 2.1构建android出现错误的解决方案
  7. ASP.NET Web API简单学习
  8. 基于生成对抗的知识图谱零样本关系学习 AAAI2020
  9. java与php链条遇到的坑,记一次Java加密加签算法到php的坑
  10. 添加的oracle语句,Oracle中Insert语句的总结
  11. azure批量创建虚拟机_如何将数据库迁移到Azure虚拟机
  12. 计算N个点和M个点之间的距离
  13. CCF201803-2 碰撞的小球(100分)【模拟】
  14. (转)style,currentStyle,getComputedStyle的区别和用法
  15. d3.js 旋转图形_PROE、Creo绘制手轮图形案例,二维草图绘制练习项目
  16. python tokenize()_Python tokenize-rt包_程序模块 - PyPI - Python中文网
  17. 【数据处理】 python 极速极简画图——频数(率)分布直方图
  18. mac 下webstorm调节字体大小
  19. 【贪心】兔警官朱迪买礼物
  20. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)

热门文章

  1. php载入内存的是本地代码吗,常量和静态变量会先载入内存后在进行执行php代码...
  2. 洛谷 P5660 数字游戏
  3. 目标检测——FCOS的学习笔记
  4. VS中Eric觉得好用的快捷键
  5. 一位JAVA程序员的七夕情书——致未来的另一半
  6. Java包装器类及自动装箱(自动打包)
  7. 【编程珠玑】第四章 编写正确的程序
  8. should be mapped with insert=false update=false
  9. 敏捷开发智慧敏捷系列之五:定不定流程和模板?
  10. mysql5.7设置默认的字符集