linux版本:ubuntu16.04
nvidia驱动版本(可通过nvidia-smi命令查看):430.64
系统已预装的CUDA版本:cuda-9.0
tensorrt官方安装文档
由官方文档我们得到以下信息:
TensorRT是个C++库,他依赖于CUDA Toolkit。如果需要结合Tensorflow、Pytorch使用,则需要安装python前端,也就是安装pycuda这个库,TensorRT的samples目录下有和不同平台配合使用的示例代码。
由于非root环境,直接排除前三种。
最一开始尝试pip安装,然而根据该方式安装的tensorrt版本依赖cuda>=10.2。
于是放弃。
采用tar文件安装的方式,注册账号并下载对应CUDA版本的tensorrt压缩包。
cuda-9.0看着比较老旧了,于是决定在自己主目录下安装新的CUDA,查阅CUDA文档。
由于本人所用的服务器nvidia驱动版本是430.64,可见最高只支持CUDA10.1版本。接下来就是安装CUDA10.1的环节,详情请看这篇博客:非root用户在服务器上安装CUDA10.1和cudnn到指定目录 - thronsbird - 博客园
下载tensorrt压缩包,一定要下载与CUDA对应的版本。最终选择了6.0.1.5版本。
接着就是跟随官方安装文档的4.5 Tar File Installation一步步安装即可。
python3
>>> import tensorrt
>>> print(tensorrt.__version__)
>>> assert tensorrt.Builder(tensorrt.Logger())
如果上述代码不报错,则表示安装成功。
或者按官方文档的提示运行samples目录下的sampleMNIST来验证是否安装成功。
根据文档的提示:
To install PyCUDA first make sure nvcc is in your PATH, then issue the following command:
pip install 'pycuda<2021.1'
其实只要在第三步正常安装好了CUDA,并且把cuda的bin目录加入到了path路径,就满足了安装条件,执行上述命令即可。
安装好pycuda后,可以测试TensorRT-6.0.1.5/samples/python下的示例程序。以下是我运行pytorch示例的输出,表明tensorrt以及pycuda已正确安装。
import tensorrt as trt
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-0a87b2689341> in <module>
----> 1 import tensorrt as trt
~/anaconda3/envs/trt_tensorflow/lib/python3.7/site-packages/tensorrt/__init__.py in <module>
----> 1 from .tensorrt import *
2 from ._deprecated import *
3 __version__ = "6.0.1.5"
4
5 # Provides Python's `with` syntax
ImportError: libnvinfer.so.6: cannot open shared object file: No such file or directory
由提示可知缺少库文件,然而我们已经通过官方文档的指引将库环境变量添加到了.bashrc文件中。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>
在jupyter中输入如下magic命令。
%env
发现LD_LIBRARY_PATH环境变量中并没有TensorRT库的路径。也就是说在jupyter内核启动时,.bashrc文件并没有被执行。
我们知道,在用户登录linux的时候,首先会启动/etc/profile文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,一般还会执行 ~/.bashrc文件。查看.profile文件:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
也就是说只有启动bash的时候才会执行.bashrc文件。我们在.bashrc中对环境变量的更改在jupyter内核中并没有起作用,于是将对环境变量的移到.profile文件中,以上问题得以解决。
1.非root用户在服务器上安装CUDA10.1和cudnn到指定目录 - thronsbird - 博客园.
2.Linux 启动时profile、bashrc、/.bash_profile、/.bashrc、~/.bash_profile执行顺序以及文件说明 - 整合侠 - 博客园.
3.python - How to set env variable in Jupyter notebook - Stack Overflow.
4.Installation Guide :: NVIDIA Deep Learning TensorRT Documentation.
5.Release Notes :: CUDA Toolkit Documentation.