本文共 5273 字,大约阅读时间需要 17 分钟。
前言:这里仅记录博主自己用tar安装tensorRT的流程,对于DEV版本等的安装,请移步其他博客。使用tar安装是博主认为相对比较简单的方式了,要注意的是解压版的tar需要我们手动去修改lib的路径,如果是使用安装版的,就不需要了,安装版需要root权限进行安装。
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cat /etc/issue
# 在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命令,配好的环境才能生效# 安装TensorRTcd TensorRT-6.0.1.5/pythonpip install tensorrt-6.0.1.5-cp37-none-linux_x86_64.whl# 博主亲测,这里你的python环境并没有限制,py35,py36,py37都可 # 安装UFF,支持tensorflow模型转化cd TensorRT-6.0.1.5/uffpip install uff-0.6.5-py2.py3-none-any.whl # 安装graphsurgeon,支持自定义结构cd TensorRT-6.0.1.5/graphsurgeonpip 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的各种API直接进行网络的构建,简单粗暴,还很有效。下面加速yolov5也是使用这里现成的实现。
步骤就是里面说的: 第一步:Run lenet5 in pytorch,按照github指南没有半点问题 在第一步之前,需要安装pytorch,好像对pytorch的版本没有要求??博主安的pytorch是1.7版本的,使用清华源安装比较快:第二步:Run lenet5 in tensorrt
一直到cp的地方一般都没有问题,但是在cmake的时候,可能就会报错了。 报错找到所需的文件:Invinfer
。这时,我们需要修改cmakefile.txt文件,因为cmakefile的文件指向的动态链接库和头文件都是系统环境下的,如果你用tar安装tensorRT,你的那几个文件和库都是在你自己的环境下,需要修改cmakefile中指向的路径(如果你跑tensorrtx的其他模型,也是需要修改那个模型下的cmakefile.txt文件) 修改的话,照上面博客说的修改就行,这里就不在说明了
然后应该可以正常编译了,你就可以看到加速后的leNet的输出结果了(我猜你估计也看不出什么变化了) 有一点就是精度几乎一样,说明使用tensorrt加速模型不会降低模型的性能。我们需要两个github仓库,一个是的官方仓库,一个是的仓库
我们只需要利用前者生成一个wts的权重文件,然后就可以利用这个权重文件在tensorrtx里来进行模型的转换和推断了git clone https://github.com/wang-xinyu/tensorrtx.gitgit 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/yolov5python 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 buildcd build# cmake的时候记得修改cmakefile文件的链接库路径和头文件路径cmake ..makesudo ./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张图片,分辨率没有去考虑,因为这几种对比都是一样的(控制变量法),所以不需要专门去考虑把(太懒了)
下面是大概的一个效果对比 速度上还是提高了将近3+倍,会不会数量越大,越明显??(应该不会) 现存占用也降低了有25%。后面会专门写一篇关于跑上面结果的一个全记录(包括修改代码和一些有用的知识点),即可以帮助准备入门的同学,也方便以后自己重新学习。
今天(2021.01.18)在使用python接口进行推断的时候,需要用到pycuda,使用下面命令安装,一直报错
pip install pycuda
看网上建议是下载源码自己编译,然后看别人编译记录,好像又是很多问题……
这里推荐大家使用豆瓣源下载pycuda,完全ojbk,不需要自己编译源码
pip --default-timeout=100 install pycuda -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
之前安装啥来着,需要两个多小时,这家伙,直接几秒内就ok了
安装其他的包的时候,只需要将上面命令的pycuda
改成你要安装的包名即可 下载飞快,ai了ai了 import tensorrt
时,找不到这个module出现这个原因就是你的环境没配好,手动添加tensorrt的lib绝对路径到环境变量中
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过去。
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 编译。
没有把对应的静态库添加到系统环境变量
博主之前都没有遇到这个,而且明明都在.bashrc文件内添加了环境变量了,但是还是出现了这个问题
使用export的方法,在当前session下把库export一下:
这时,不要加sudo命令,不然仍然会报错,直接yolov5 -s
即可 其他解决方法:
cp -r libmyelin.so.1 /usr/local/lib # libmyelin.so.1 locate一下具体的位置,然后在cp,个人不建议,还是上面的方法比较无害
转载地址:http://rcxen.baihongyu.com/