使用 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 <軟件包名> 可以完全清理,包括配置文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM