使用 deb 包的方式安装 TensorRT

使用 deb 包的方式安装 TensorRT

完成日期:2022 年 4 月 17 日
最后修改:----
此文使用 markdown 完成

写在前面

要在 ubuntu 下使用 TensorRT,可以选择下载 deb 包本地安装。和使用 pip wheel 不同,这种安装方式可以同时支持 python 和 C++ 的接口。这种方式会把 TensorRT 给安装到我们的操作系统里,和安装其他的一些包类似,也不用再配置一些环境变量之类的东西,但是这样的话就只能安装一个版本的 TensorRT,不可以多版本共存。如果想要同时能用不同的版本,要用 tar 包的方式安装。

需要的组件

  • 一块英伟达的 GPU(这不是废话吗 →_→)
  • 安装好 GPU 驱动
  • 安装好 CUDA

安装的 CUDA 版本要与 驱动和 TensorRT 保持一致,驱动可以直接打开“软件和更新”->“附加驱动”,里面选一个,建议不要用最新的,因为目前 TensorRT 8.2 支持到 CUDA 11.5,如果装的是 11.6 之类的(比如说我)后面会报错。如果出现类似下面这样的错误:

下列软件包有未满足的依赖关系:
 tensorrt : 依赖: libnvinfer5 (= 5.0.2-1+cuda9.0) 但是它将不会被安装
            依赖: libnvinfer-dev (= 5.0.2-1+cuda9.0) 但是它将不会被安装
            依赖: libnvinfer-samples (= 5.0.2-1+cuda9.0) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

那估计就是是 CUDA 版本的问题。这里错误说的是包之间不兼容,可能的原因有:

  • 没装驱动(没驱动当然找不到合适的包啦)
  • 没装 CUDA
  • TensorRT 版本选错了
  • 上一次安装错误的 TensorRT 没有被卸载干净

这里又有两个巨坑

  1. ubuntu 用“软件和更新”这个图形化的界面安装驱动的时候,不会自动安装 CUDA,所以安装 TensorRT 的时候一定会提示“有未满足的依赖关系”,即使是第一次安装,系统是完全干净的。所以有一些资料会说,安装驱动和 TensorRT 时都需要用 deb 包的方式安装。
  2. 如果碰到第一种情况,有些憨憨(比如我)可能会去换个版本安装,这时候一般的卸载方式是删不干净的,还会残留配置文件。于是乎,后面安装的版本和残留的配置文件又对不上,又会报错。

安装 CUDA

先说怎么安装 CUDA,它的版本要和驱动的一致。如果自己手动用命令行安装驱动,可以在装驱动的时候顺便把 CUDA 也一起装了。这里是官方的 CUDA 安装文档,没装的话,可以先用 nvidia-smi 命令来查询,会出来一个表格,右上角可以看到 CUDA 版本:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   52C    P5    N/A /  N/A |    158MiB /  4046MiB |      7%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

之后直接去下载安装就行,这里是英伟达 CUDA 下载页面,选择好自己的系统、版本等信息,建议最后一项选择“deb[local]”,先下载下来本地安装,英伟达的网络有时候也不咋地。这个页面默认提供的是最新版的 CUDA,如果要安装旧版本的,需要点击下方的“Archive of Previous CUDA Releases”页面,选择我们需要的版本。需要注意的是,这里会把 CUDA 安装在操作系统里,如果需要在 Conda 虚拟环境里使用 TensorRT,还是要在虚拟环境里重新安装一下 CUDA。

安装 TensorRT deb 包

安装 TensorRT 的过程很简单,直接按官方教程来就行了。先使用下面的命令解包:

sudo dpkg -i [之前下载好的 deb 包的名字]

再添加本地仓库的源秘钥,我们安装的时候会把刚刚解包好的目录作为一个本地源,从那里安装,就不是像一般用 apt 命令安装的时候一样,从网络源下载了。添加完成后可以从图形界面的 “软件和更新” -> “其他软件”里面看到,弄错了可以从这里删掉。

sudo apt-key add /var/[还是 deb 包的名字]/7fa2af80.pub

上面那个目录其实就是之前用 dpkg 命令解包出来,默认是放在 /var/ 路径下面,里面会有一个秘钥,添加它就行了。之后直接安装就行

sudo apt-get update  # 也可以先更新一下源信息
sudo apt-get install tensorrt

到这一步其实就已经安装完了,还有几个小组件可以一并装上:

sudo apt-get install python3-libnvinfer-dev  # 这玩意是用 python 接口推理用的,
                                             # 装之前要先装 numpy

pip install protobuf  # 这俩是配合 TensorFlow 使用的,有一些 TensorRT 例子会用到,
sudo apt-get install uff-converter-tf  # 不过貌似现在不太用 uff,一般用 onnx

pip numpy onnx  # 这俩是配合 onnx 模型使用的,有时候要使用官方的 TensorRT plugins, 
apt-get install onnx-graphsurgeon  # 就要用 onnx-graphsurgeon 去修改 onnx 图

验证安装

安装完成后,使用管道命令查询一下包列表,看看有没有安装成功:

dpkg -l | grep TensorRT

如果成功的话,会列出所有 TensorRT 相关的包,看起来像下面这样:

ii  graphsurgeon-tf          8.2.4-1+cuda11.4    amd64    GraphSurgeon for TensorRT package
ii  libnvinfer-bin           8.2.4-1+cuda11.4    amd64    TensorRT binaries
ii  libnvinfer-dev           8.2.4-1+cuda11.4    amd64    TensorRT development libraries and headers
ii  libnvinfer-doc           8.2.4-1+cuda11.4    all      TensorRT documentation
ii  libnvinfer-plugin-dev    8.2.4-1+cuda11.4    amd64    TensorRT plugin libraries
...
...

关于那两个巨坑

第 1 个坑说白了就是要在安装前,一定要先验证一下有没有装好 CUDA,可以用下面的命令查询一下:

dpkg -l | grep cuda  # 会像上面一样,列出所有 CUDA 相关的包

不要用 nvcc 命令去查询,系统只会提示没有安装好 nvidia-cuda-toolkit,我们只需要单独的 CUDA,实测装了 nvidia-cuda-toolkit 也没啥用,还是会提示找不到 CUDA
第 2 个巨坑就是 dpkg 命令的原因的。第一次安装失败后,会有残留的配置文件,会导致第二次安装失败,使用 dpkg --remove <软件包名> 命令卸载时,--remove 是不会删除配置文件,只有用 --purge命令才会删除相应的配置文件,用 dpkg -l 列出所安装的包时,前面的 ii 表示正常安装的包,如果是 re 开头的,就表示包已经被移除,但仍然还保留着它的配置文件,可以使用下面的命令来清理:

sudo dpkg -P <软件包名>  # -P 就是 --purge 的短选项形式,是一样的

总结

  • TensorRT 依赖有:显卡驱动、CUDA
  • pycuda 需要在安装 CUDA 后再安装
  • 安装失败的残留文件要清理掉,不然会出现冲突
  • 使用 dpkg -P <软件包名> 可以完全清理,包括配置文件
posted @ 2022-04-17 19:16  Asnelin  阅读(4093)  评论(0编辑  收藏  举报