本人实践经历
在运行深度学习项目,常常遇到警告内容:
021-06-16 15:51:21.131229: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: cannot open shared object file: No such file or directory
2021-06-16 15:51:21.131328: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory
2021-06-16 15:51:21.131340: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
2021-06-16 15:51:21.131398: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: cannot open shared object file: No such file or directory
2021-06-16 15:51:21.131477: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory
2021-06-16 15:51:21.131488: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
概括起来就是,找不到’libnvinfer.so.6’、‘libnvinfer_plugin.so.6’、‘libnvinfer.so.6’、'libnvinfer_plugin.so.6’这些TensorRT的文件。
也就是说,系统并没有安装TensorRT,而且这里的数字6表明没有安装TensorRT6。
但是,网上的教程通常是从零开始配置深度学习环境的,其中的TensorRT6安装教程不适合已有深度学习环境的配置。
确保你自己是使用zar包安装,而不是deb包安装
在安装TensorRT时,您可以选择以下安装选项 :Debian或RPM软件包、tar文件或zip文件。Debian和RPM安装会自动安装任何依赖项,但是:
- 需要sudo或root权限才能安装
- 对于TensorRT的安装位置没有灵活性
- 要求CUDA工具包和cuDNN也已使用Debian或RPM包安装。
- 不允许同时安装多个次要版本的TensorRT
TensorRT需要通过官网:https://developer.nvidia.com/zh-cn/tensorrt下载,你需要准备一个账号,或者重新注册一个账号。
截止2021.06.16,TensorRT已经有8个版本了:
由于我运行代码报告的警告是没有TensorRT6,所以我安装的是TensorRT6。
实际上,TensorRT与CUDA、cudnn均有一定的版本关系,不能盲目安装最新版本。所以需要首先明确你自己当前使用的CUDA版本。通常来说,我们都会在服务器安装多个版本的CUDA,但会软连接一个默认版本到/usr/local/cuda
。这种情况下,使用下述方式查看版本并不靠谱:
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
上述语句查出来的只是软连接版本,但是我们往往可以通过~/.bashrc
配置文件去指定CUDA版本,所以,首先应该打开你的~/.bashrc
文件,查看是否有配置记录:
vim ~/.bashrc
例如,我在自己当前账号的~/.bashrc
文件指定了CUDA版本路径
因此,正确的查询办法为:
cat /usr/local/cuda-10.2/version.txt
cat /usr/local/cuda-10.2/include/cudnn.h | grep CUDNN_MAJOR -A 2
最终,我确定自己的配置为Ubuntu18.04、CUDA-10.2(cudnn7.6.5),从而可以选择确定的tar文件下载。
最终我下载的文件为:
TensorRT-6.0.1.8.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz
这里稍微描述一下,6.0.1.8为TensorRT版本号,后面跟着的是系统名称及其版本,CUDA版本、CUDNN版本,再次检验,该版本符合我的使用需求。
切换到下载文件的目录,然后解压该tar包,这里不要盲目复制我的命令,后面的文件名以实际下载的文件名为准:
tar zxvf TensorRT-6.0.1.8.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz
解压后,会在当前路径增加一个目录TensorRT-6.0.1.8
,也就是TensorRT-版本号
形式
如果你是root用户,打算安装的TensorRT需要为多个用户使用,那么,需要将该文件夹复制到/usr/local
路径下,方便其他用户查看以及在个人的~/.bashrc
文件配置。
sudo cp -R ./TensorRT-6.0.1.8 /usr/local
然后进入到TensorRT-6.0.1.8目录(如果计划放置在/usr/local下面),则切换到
cd /usr/local/TensorRT-6.0.1.8
否则根据你的实际放置目录切换。
然后查看有哪些子目录:
ls
首先切换至python
子目录
cd python
ls
如果系统默认使用的是Python 2.7,则运行:
sudo pip2 install tensorrt-6.0.1.8-cp27-none-linux_x86_64.whl
这里同样需要根据实际情况选择
然后,切换至graphsurgeon
子目录
cd ../graphsurgeon
ls
使用以下命令进行安装:
sudo pip2 install graphsurgeon-0.4.1-py2.py3-none-any.whl
配置~/.bashrc文件
vim ~/.bashrc
增加以下语句:
# for CUDA
export PATH="/usr/local/cuda-10.2/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH"
# for TensorRT
export CUDA_INSTALL_DIR="/usr/local/cuda-10.2"
export CUDNN_INSTALL_DIR="/usr/local/cuda-10.2"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/TensorRT-6.0.1.8/lib"
这里的路径、cuda版本、TensorRT版本需要结合实际安装情况来确定!
最后source一下:
source ~/.bashrc
运行原有代码提示成功打开dynamic library
参考
[1] https://blog.csdn.net/weixin_41552975/article/details/114238425
[2] 【TensorRT】tensorRT 7.0的安装配置
[3] Ubuntu16.04 安装tensorRT 全过程