还是有些坑要填。。。
首先安装适合自己电脑配置的cuda,我这里之前安装好了cuda-10.1版本,cuda-10.1的环境变量记得添加:
$ gedit ~/.bashrc 打开,在文件最后添加:
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
记得 $ source ~/.bashrc 一下。
查看是否安装好的cuda:$ nvidia-smi
然后安装cuda-10.1对应的cudnn 这里我选的是7.6.5版本,其它版本如果支持cuda-10.1的应该也可以。
下载地址:https://developer.nvidia.com/rdp/cudnn-archive
选择下载cuDNN Library for Linux 版的tgz格式,然后解压。将对应文件夹中的文件拷贝到cuda-10.1文件夹中:
$ sudo cp /home/yao/Downloads/cudnn-10.1-linux-x64-v7.6.5.32/cuda/include/cudnn.h /usr/local/cuda-10.1/include
$ sudo cp /home/yao/Downloads/cudnn-10.1-linux-x64-v7.6.5.32/cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib
测试cudnn:
$ cat /usr/local/cuda-10.1/include/cudnn.h | grep CUDNN_MAJOR -A 2
ok
接着下载tensorrt:https://developer.nvidia.com/nvidia-tensorrt-download
选择自己想要下载的版本,我这里选择的是tensorrt6 因为我要用yolov3 。
勾选Agree后,选自自己对应系统以及cuda支持的版本,我这里选择的是: tar
下载后解压。
添加环境变量 $ gedit ~/.bashrc 在文件最后添加:
export PATH=$PATH:$/home/yao/Downloads/TensorRT-6.0.1.5.Ubuntu-18.04.x86_64-gnu.cuda-10.1.cudnn7.6/TensorRT-6.0.1.5/bin
export LD_LIBRARY_PATH=/home/yao/Downloads/TensorRT-6.0.1.5.Ubuntu-18.04.x86_64-gnu.cuda-10.1.cudnn7.6/TensorRT-6.0.1.5/lib:$LD_LIBRARY_PATH
添加对应bin和lib的文件路径。
然后进入/TensorRT-6.0.1.5/python文件夹:选择对应的pytho版本的安装文件,我用的py36:
pip install tensorrt-XXX-cp35-cp35mu-linux_x86_64.whl
进入/TensorRT-6.0.1.5/uff :
pip install uff-0.6.5-py2.py3-none-any.whl
进入/TensorRT-6.0.1.5/graphsurgeon:
pip install graphsurgeon-0.4.1-py2.py3-none-any.whl
到此tensorrt 就安装好了。
测试:
再测试一下sampleMNIST:下载mnist数据集http://yann.lecun.com/exdb/mnist/ 到data/mnist 目录下,并解压。
然后运行data/mnist 下的generate_pgms.py 产生0-9 的pgm 文件。
cd samples/sampleMNIST下编译:
sudo make clean
make
cd /TensorRT-XXX/bin(转到bin目录下面,make后的可执行文件在此目录下)
./sample_mnist
接着再pycharm中使用import tensorrt as trt 又报错了 !!够呛,又折腾半天。
libcudnn.so.7: cannot open shared object file: No such file or directory
libnvinfer.so.6: cannot open shared object file: No such file or directory
libcudnn.so.7问题使用软链接解决:https://blog.csdn.net/weixin_40298200/article/details/79420758
CUDNN连接建立
cd /usr/local/cuda/lib64
sudo rm -rf libcudnn.so libcudnn.so.7 #删除原有版本号,版本号在cudnn/lib64中查询
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7 #生成软连接,注意自己下载的版本号
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig #立即生效
查到有人说libnvinfer.so.6: 这个问题,是要在pycharm中设置环境变量,我一开始设置了不行。
后来好像好像是因为以上设置了软链接,然后再在pycharm 中配置libnvinfer.so.6的路径环境变量,就可以了。
如果遇到 no module named tensorrt 可以检查下是不是环境路径的问题。我遇到这个奇怪问题:
同时打开两个终端一个测试可以,一个测试不行,于是我又打开第三个第四个终端测试还是不行。对比以后我发现同样在我建立的虚拟环境DL下 python版本居然不同python3.6.4以及python3.6.12.
而且一个对应gcc7.2.0,一个对应gcc7.3.0 。百思不解。
查看自己安装的gcc :$ gcc -v 出来的居然是7.5版本。晕。。。
查了自己的环境路径应该没问题。
于是在anaconda 中把我的python3.4.12 改为python3.4.0, 因为python3.4.0是可以的。
但是,改完之后又不行。。。no module named tensorrt,
我试着在虚拟环境之外测试python居然可以用,tensorrt也能用。。。这都是什么鬼。
然后我怀疑自己之前安装的tensorrt不是在DL虚拟环境中,因为在修改环境变量的时候source ~/.bansh 后会自动退出虚拟环境。
所以我又在DL虚拟环境中按照以上安装的tensorrt : pip install tensorrt.whl
然后就ok了!
但是我明明把python安装在anaconda中的DL虚拟环境中的。。。