尝试安装tensorRT,中间遇到一些问题,这里记录一下。
系统:Ubuntu18.04(docker环境,不过和正常的没区别)
GPU:NVIDIA Tesla V100 PCIe (只要是英伟达的GPU,安装的流程都是一样的,这个型号也不重要)
我安装了tensorRT6.0.15-cuda10.0版本。这里我遇到的问题是,在使用deb安装正确的版本之前,因为看错了CUDA的版本,因此安装了错误的版本,安装错误版本失败之后,没有删除安装残余文件,因此安装正确版本的时候还是会安装旧包的依赖,导致依旧出现一样的错误信息。如下,可以看到,我需要安装的duda10.0的版本依赖并没有出现在错误信息里,Depends里面错误版本cuda10.1的很多依赖安装不上,我开始没有明白错误的原因,又重新安装了tensorRT7版本,报错里这些安装不上的Depends信息还是会出现。
root@yangfan-jupyter-hc2xc:~/codes# apt-get install tensorrt
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
tensorrt : Depends: libnvinfer6 (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-plugin6 (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvparsers6 (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvonnxparsers6 (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-bin (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-dev (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-plugin-dev (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvparsers-dev (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvonnxparsers-dev (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-samples (= 6.0.1-1+cuda10.1) but it is not going to be installed
Depends: libnvinfer-doc (= 6.0.1-1+cuda10.1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
我因为用的docker,重启了容器之后重装了正确的版本,就不再出现这种问题。如果是普通机器的话,应该可以通过dpkg 软件卸载清除配置信息来解决。可以参考ubuntu笔记:安装与卸载deb软件包或者ubuntu dpkg 软件卸载。我之前有尝试过几个指令,但是没有效果,因为错误版本实际上是安装失败了。单纯卸载没用,需要清楚安装中的缓存配置文件之类的怎么删才行。如果成功删除这些了,使用 apt-get update 应该是不再看到错误版本的信息的。
这里我因为并没有用这种清掉安装配置的方式解决问题,所以并不知道具体哪个指令管用,如果有人尝试过知道的话麻烦告诉我一下,谢谢。
接下来说下正常安装的流程。
安装的时候需要根据电脑的系统版本和cuda版本来确定应该下载哪个版本的TensorRT,所以需要提前确认下系统和cuda的版本。
我的电脑是Ubuntu18.04.这里是一个docker容器,不过安装过程并没有遇到和一般机器不一样的地方,正常查询就行。
root@yangfan-jupyter-2pkqf:# cat /etc/issue
Ubuntu 18.04.3 LTS \n \l
或者
root@yangfan-jupyter-2pkqf:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
如果都查不到的话, 可以试试这个帖子上的方法 Linux查看系统基本信息,版本信息(最全版)
我这里以及安装好了适合的版本,如果没有安装的话,可以参考类似Linux服务器安装cuda,cudnn,显卡驱动和pytorch超详细流程此类帖子安装合适的版本。
可以看到我的cuda版本是10.0.130.
root@yangfan-jupyter-2pkqf:/# cat /usr/local/cuda/version.txt
CUDA Version 10.0.130
这里需要注意的是如果你使用指令查看nvidia显卡的信息的话。
root@yangfan-jupyter-2pkqf:/# nvidia-smi
Thu Nov 19 11:21:36 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.40.04 Driver Version: 418.40.04 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:B1:00.0 Off | 0 |
| N/A 28C P0 35W / 250W | 1196MiB / 16130MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
查看显卡的情况时也会显示一个cuda的版本,这个版本并不一定是你电脑上安装的cuda的版本。如果自己安装过cuda的话就知道,查看显卡信息的时候显卡会显示一个你的显卡适合的cuda版本,但是如果你想要安装比较低版本的cuda也是可以的。这里显示的就是这个最适合最高版本,而不是你电脑现在安装的cuda版本。像我的笔记本上查看nvidia信息的时候显示的是10.2,后来我装了10.1版本的cuda之后,这里的信息写的还是10.2。这里是个固定信息,不会根据你安装的cuda版本随之改变。
这张图上面其他数据的含义可见GPU之nvidia-smi命令详解
这个信息其实用不上。一般安装了cuda的电脑,cudnn一般也没问题。
不过有的机器这里没有安装,所以也可以提前确认一下,看有没有问题。
我的版本是 7.6.3.30-1+cuda10(cuda和cudnn版本安装的时候应该会注意,其实不用太关注)
可以使用指令查看。我开始查的时候到处都说的是用这个指令看,但是我用这个指令并没有结果。搞得我还以为没安装cudnn
root@yangfan-jupyter-2pkqf:/# cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cat: /usr/local/cuda/include/cudnn.h: No such file or directory
如果你也是上面那个指令查看不到的话,未必是没有安装cudnn,可以使用另一个指令看。
root@yangfan-jupyter-2pkqf:/# dpkg -l | grep cudnn
hi libcudnn7 7.6.3.30-1+cuda10. amd64 cuDNN runtime libraries
ii libcudnn7-dev 7.6.3.30-1+cuda10. amd64 cuDNN development libraries and headers
1.4 查看显卡驱动内核版本
用不上,pass。
在这里https://developer.nvidia.com/tensorrt 点击下载download now,邮件申个账号登录了,然后填个问卷调查啥的选择和你的系统和cuda版本适合的版本下载。
像7就没有针对cuda10.1的版本,如果最新的没有适应你系统和cuda版本的,就往前面的版本找找。
我觉得deb安装是比较方便的,建议下载deb安装包。印象中zip安装还需要一些额外的操作,deb安装相对而言是一步到位的,如果不出问题的话,几条指令结束就能安装完毕,非常便利。
有几种安装包,建议用deb安装,比较方便。
按照官方的安装教程安装就好https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-debian
除了TensorRT程序本身,教程上写的TensorRT需要的几个:python依赖、TensorFlow使用要装的包、ONNX包都装上,免得用的时候出错。
dpkg -l | grep TensorRT 验证安装,显示结果和官方教程上说的一样就表示安装好了。
最近在另外一台机器上又安装了一遍,这里说下具体指令和流程,和一些要注意的点:
1.在下载包的位置执行下面的指令来安装TensorRT
os="ubuntuxx04"
tag="cudax.x-trt8.x.x.x-ea-yyyymmdd"
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${tag}/7fa2af80.pub
sudo apt-get update
sudo apt-get install tensorrt
2.If using Python 3.x(这里如果你系统安装了多个版本的python,而且python和pip的软连接比较混乱的话,需要小心一些。我就因为python3.6 3.7的软连接混乱,默认环境安装了3.6,conda又安装了3.6,导致TensorRT和uff安装在3.6下面,但是后面使用TensorRT的时候调用在3.7下面,就报错说我没有uff,不过一般不会有这个问题,不用太在意):
sudo apt-get install python3-libnvinfer-dev
3.If you would like to run the samples that require ONNX graphsurgeon or use the Python module for your own project, run:
sudo apt-get install onnx-graphsurgeon
4.Verify the installation.
dpkg -l | grep TensorRT
如果你能看到下面这些包,说明你安装成功了
ii graphsurgeon-tf 8.0.0-1+cuda11.3 amd64 GraphSurgeon for TensorRT package
ii libnvinfer-bin 8.0.0-1+cuda11.3 amd64 TensorRT binaries
ii libnvinfer-dev 8.0.0-1+cuda11.3 amd64 TensorRT development libraries and headers
ii libnvinfer-doc 8.0.0-1+cuda11.3 all TensorRT documentation
ii libnvinfer-plugin-dev 8.0.0-1+cuda11.3 amd64 TensorRT plugin libraries
ii libnvinfer-plugin8 8.0.0-1+cuda11.3 amd64 TensorRT plugin libraries
ii libnvinfer-samples 8.0.0-1+cuda11.3 all TensorRT samples
ii libnvinfer8 8.0.0-1+cuda11.3 amd64 TensorRT runtime libraries
ii libnvonnxparsers-dev 8.0.0-1+cuda11.3 amd64 TensorRT ONNX libraries
ii libnvonnxparsers8 8.0.0-1+cuda11.3 amd64 TensorRT ONNX libraries
ii libnvparsers-dev 8.0.0-1+cuda11.3 amd64 TensorRT parsers libraries
ii libnvparsers8 8.0.0-1+cuda11.3 amd64 TensorRT parsers libraries
ii python3-libnvinfer 8.0.0-1+cuda11.3 amd64 Python 3 bindings for TensorRT
ii python3-libnvinfer-dev 8.0.0-1+cuda11.3 amd64 Python 3 development package for TensorRT
ii tensorrt 8.0.0.x-1+cuda11.3 amd64 Meta package of TensorRT
ii uff-converter-tf 8.0.0-1+cuda11.3 amd64 UFF converter for TensorRT package
ii onnx-graphsurgeon 8.0.0-1+cuda11.3 amd64 ONNX GraphSurgeon for TensorRT package
如果只缺少 uff-converter-tf(如果你使用TensorFlow,需要用这个包),执行
sudo apt-get install uff-converter-tf
总体而言,如果版本啥的都没问题的话,安装起来会非常顺利。
tensorRT尝试使用见下一文章。