【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

TensorRT 实现模型yolov5的加速,附自己测的数据对比

  • 安装tensorRT
  • 首先了解自己ubuntu、CUDA和cuDNN版本
  • 安装TensorRT
  • 使用tensorRT加速LeNet进行验证
  • tensorRT加速yolov5
  • 加速前后对比
  • 安装pycuda
  • 问题日志
  • 1. `import tensorrt`时,找不到这个module
  • 2. `ImportError: libcudnn.so.x: cannot open shared object file: No such file or directory`
  • 3. 在tensorRT-6.0.1.5外面可以import,但是在文件夹里面,或者其他的文件夹里面import不了
  • 4. make时遇到问题:
  • 5. 执行命令sudo ./yolov5 -s 时报错:./yolov5: error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory
  • 更新2021.10.13

安装tensorRT

前言:这里仅记录博主自己用tar安装tensorRT的流程,对于DEV版本等的安装,请移步其他博客。使用tar安装是博主认为相对比较简单的方式了,要注意的是解压版的tar需要我们手动去修改lib的路径,如果是使用安装版的,就不需要了,安装版需要root权限进行安装。

首先了解自己ubuntu、CUDA和cuDNN版本

  1. 查看cuda版本
cat /usr/local/cuda/version.txt

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

  1. 查看cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

  1. 查看ubuntu版本
cat  /etc/issue

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

  1. 挑选TensorRT版本(千万不要不符合,也不要比你的环境高也不要低,不然很麻烦,博主自己第一次按的时候没注意看,导致一直报错)
    博主安装的是TensorRT-6.0.1.5

安装TensorRT

# 在home下将下载的压缩文件进行解压
tar xzvf TensorRT-6.0.1.5.Ubuntu-16.04.x86_64-gnu.cuda-10.1.cudnn7.6.tar.gz
 
# 解压得到TensorRT-6.0.1.5的文件夹,将里边的lib绝对路径添加到环境变量中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxxxx/TensorRT-6.0.1.5/lib
# 如果手动添加到.bashrc文件中,需要执行source .bashrc命令,配好的环境才能生效

# 安装TensorRT
cd TensorRT-6.0.1.5/python
pip install tensorrt-6.0.1.5-cp37-none-linux_x86_64.whl
# 博主亲测,这里你的python环境并没有限制,py35,py36,py37都可
 
# 安装UFF,支持tensorflow模型转化
cd TensorRT-6.0.1.5/uff
pip install uff-0.6.5-py2.py3-none-any.whl
 
# 安装graphsurgeon,支持自定义结构
cd TensorRT-6.0.1.5/graphsurgeon
pip install graphsurgeon-0.4.1-py2.py3-none-any.whl

以上,我们就成功的将tensorRT安装完了,试着执行一下python,然后看能不能导入这些模块。
如果成功的import tensorrt,那么就算安装成功咯。
ps:import uff的时候,需要提前install tensorflow模块。

2021.2.2更新
今天重新使用了deb安装后,发现和用tar没有什么区别。不过对tensorrt的安装过程又有了一个理解,这里做个记录
上面说的,如果能import成功,就说明安装tensorrt成功,其实这样说是不正确的。
使用pip install安装的tensorrt其实安装的是python依赖,安装成功,意味这我们成功安装了trt的python接口,这样我们就可以import tensorrt,使用trt的各种API接口了。
如果我们要用c++的话,那么理论上只要我们把tar解压成功,版本和cuda以及cudnn对应上,在cmakefile文件中,把对应的tensorrt包路径写正确就ok了,那么tensorrt也能正确使用了。
用deb安装tensorrt的时候,也是需要用命令行来install tensorrt的python依赖的,如果不安装的话,那么自然也import不了

使用tensorRT加速LeNet进行验证

推荐一个大佬的github这个库就尝试使用TensorRT的各种API直接进行网络的构建,简单粗暴,还很有效。下面加速yolov5也是使用这里现成的实现。
步骤就是tensorrtx/tutorials/getting_started.md里面说的:
第一步:Run lenet5 in pytorch,按照github指南没有半点问题
在第一步之前,需要安装pytorch,好像对pytorch的版本没有要求??博主安的pytorch是1.7版本的,使用清华源安装比较快:

  • pytorch镜像安装【清华源】

第二步:Run lenet5 in tensorrt
【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比
一直到cp的地方一般都没有问题,但是在cmake的时候,可能就会报错了。
【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比
报错找到所需的文件:Invinfer。这时,我们需要修改cmakefile.txt文件,因为cmakefile的文件指向的动态链接库和头文件都是系统环境下的,如果你用tar安装tensorRT,你的那几个文件和库都是在你自己的环境下,需要修改cmakefile中指向的路径(如果你跑tensorrtx的其他模型,也是需要修改那个模型下的cmakefile.txt文件)

  • 部署tensorRT时,解决可能出现的问题

如果修改的话,按照上面博客中提到的修改即可,这里不再赘述。
然后应该可以正常编译了,你就可以看到加速后的leNet的输出结果了(我猜你估计也看不出什么变化了)
有一点就是精度几乎一样,说明使用tensorrt加速模型不会降低模型的性能。

tensorRT加速yolov5

我们需要两个github仓库,一个是yolov5的官方仓库,一个是tensorrtx的仓库
我们只需要利用前者生成一个wts的权重文件,然后就可以利用这个权重文件在tensorrtx里来进行模型的转换和推断了

git clone https://github.com/wang-xinyu/tensorrtx.git
git clone https://github.com/ultralytics/yolov5.git
# download its weights 'yolov5s.pt' 
# 这边要注意的是,在yolov5仓库中,在weights内要执行sh文件时,需要修改里面的路径,不然会找不到utlis文件,
# 或者你也可以把sh文件移出上一层文件夹中,再执行,就不会有路径问题了。
# copy tensorrtx/yolov5/gen_wts.py into ultralytics/yolov5
# ensure the file name is yolov5s.pt and yolov5s.wts in gen_wts.py
# go to ultralytics/yolov5
python gen_wts.py
# a file 'yolov5s.wts' will be generated.

将生成的wts文件copy到tensorrtx/yolov5下,

# put yolov5s.wts into tensorrtx/yolov5
# go to tensorrtx/yolov5
# ensure the macro NET in yolov5.cpp is s  这个s不s,应该根据你一开始生成的wts权重文件是哪个版本决定的
mkdir build
cd build
# cmake的时候记得修改cmakefile文件的链接库路径和头文件路径
cmake ..
make
sudo ./yolov5 -s             # serialize model to plan file i.e. 'yolov5s.engine'
# 推断图片,samples下面应该放你的图片,格式没要求(jpg,其他格式博主没试过)
sudo ./yolov5 -d  ../samples # deserialize plan file and run inference, the images in samples will be processed.

推断结束后会输出每张图片推断所花费的时间(不包含数据的预处理和NMS或者其他的后处理时间)
ps:每张图片的运行时间大概要3-5ms

加速前后对比

用了100张图片,分辨率没有去考虑,因为这几种对比都是一样的(控制变量法),所以不需要专门去考虑把(太懒了)
下面是一个大概的效果对比
【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比
速度上还是提高了将近3+倍,会不会数量越大,越明显??(应该不会)
现存占用也降低了有25%。

后面我会把上面的运行结果写一个完整的记录(包括修改代码和一些有用的知识点),可以帮助准备入门的同学,也方便自己以后再学习。

安装pycuda

今天(2021.01.18)在使用python接口进行推断的时候,需要用到pycuda,使用下面命令安装,一直报错

  • pip安装
pip install pycuda

看网上的建议是下载源代码自己编译,然后再看别人的编译记录,好像问题挺多的……

  • Douban source download

这里推荐大家使用豆瓣源下载pycuda,完全ojbk,不需要自己编译源码

pip --default-timeout=100 install pycuda -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

之前安装啥来着,需要两个多小时,这家伙,直接几秒内就ok了
安装其他的包的时候,只需要将上面命令的pycuda改成你要安装的包名即可
下载飞快,ai了ai了

问题日志

1.import tensorrt时,找不到这个module

出现这个原因就是你的环境没配好,手动添加tensorrt的lib绝对路径到环境变量中

2.ImportError: libcudnn.so.x: cannot open shared object file: No such file or directory

没有找到libcudnn.so.x文件(x为对应版本具体可修改)libcudnn.so.x是一个软连接,连接到对应的libcudnn.so.x.…… 该文件一般放在/usr/local/cuda/lib64/文件目录下可以查看自己是否有libcudnn.so.x文件,有的话就cp过去。
ps:博主安装的时候没有遇到这种问题,不过看别人有出现,这里就提一下。个人觉得安装tensorrt的时候出现这种问题,应该不是没链接的问题(如果是这种问题的话,说明你一开始的cuDNN都没搞好了)。如果上诉这种问题解决不了,建议重新安装来一遍。

3. 在tensorRT-6.0.1.5外面可以import,但是在文件夹里面,或者其他的文件夹里面import不了

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比
博主使用的cuDNN是7.6.0版本,为啥会出现找不到8的版本呢??博主又在同样的一台服务器上用两一个账号安装,仍然会出现这个问题。博主现在还没解决,但是博主的实验室服务器多,换台服务器重新安装哈哈哈哈哈。
猜测的原因:cudnn有问题,服务器环境不干净?上面的错误应该是其他的包找不到这个so.8的版本的文件,但是明明下的是对应的7.6的版本,怎么会跑出一个8的版本呢?纯属个人猜测,有知道的忘告知一下,感激不尽(服务器多也不能任性呀)
问是重装! ! !

4. make时遇到问题:

CMake Error: The current CMakeCache.txt directory /workspace/tensorrtx/yolov5/build/CMakeCache.txt is 
different than the directory /workspace/tensorrtx/yolov5/build where CMakeCache.txt 
was created. This may result in binaries being created in the wrong place. If you are not sure, reedit 
the CMakeCache.txt

CMakeCache.txt之前编译时留下的缓存,应该把build删掉重新mdir build 编译。

5. 执行命令sudo ./yolov5 -s 时报错:./yolov5: error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory

系统环境变量中没有添加对应的静态库

博主之前都没有遇到这个,而且明明都在.bashrc文件内添加了环境变量了,但是还是出现了这个问题

使用export的方法,在当前session下把库export一下:
【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比
这时,不要加sudo命令,不然仍然会报错,直接yolov5 -s即可

其他解决方法:

cp -r libmyelin.so.1 /usr/local/lib # libmyelin.so.1 locate一下具体的位置,然后在cp,个人不建议,还是上面的方法比较无害

更新2021.10.13

半年多没更新博客了。这段时间一直在为春招、实习、秋招做准备。今天,我基本可以等到抽奖了;
目前手里有近10个CV算法工程师意向书:字节,商汤,百度,顺丰,华为,小红书,拼多多,小马智行,海康威视,腾讯等。
接下来会花很多时间在小红书上整理这一过程所有的经验以及技巧,包括:丰富简历内容,如何打比赛(大佬止步),如何刷题,刷什么题,刷到什么程度,面试技巧,面经整理,hr面技巧,如何反问面试官,如何argue薪资等等等,大家有需要可以关注一波哈,内容保证丰富!助力大家秋招收割offer到手软!

如果你刚读大一或者已经读过大二或者大二,赶紧关注这波,关注我的秋招别踩坑!

小红书号:371845174(Activewaste,博客同名)

后面会在小红书分享好用的工具、插件、神器等,手把手教。大家注意了!
看到有粉丝评论私信求更新,大大的鼓励哈哈哈哈,以后会继续更新纸质笔记,供大家参考学习! ! !
另外我比较少上csdn,大家给我私信要联系方式或者评论问问题有时没看到(一个月没上,200+的通知),大家直接去小红书私信提问,或者催我撒!

【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

版权声明:本文为博主Activewaste原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_41375609/article/details/110099409

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年2月16日 上午10:17
下一篇 2022年2月16日 上午10:42

相关推荐