TensorRT 筆記 - 在 Conda 虛擬環境中安裝

Asnelin發表於2022-02-24

完成時間:2022 年 2 月 24 日

最後修改:---

為什麼要寫這篇部落格(此部分可以跳過)

  因為一些原因,要用到 TensorRT 對訓練好的模型進行推理加速,官網的文件全英文看得累啊,想找找現成的中文文件看看。搜了一圈,要麼安裝的版本都太老了,要麼直接上來就一頓操作猛如虎,也不說為什麼要這麼做,寫的也不是很全。安裝過程中我也碰到了各種奇奇怪怪的坑,我已經掉進去了一次,坑裡有我一個就夠了 -_-|||

  因為主要用的是 Python,所以這裡是在 Ubuntu 20.04 LTS 上的 Anaconda 虛擬環境裡安裝 TensorRT 的 Python API,如果有時間,還是推薦直接看一手的官方文件

什麼是 TensorRT

  TensorRT 是英偉達推出的一個工具,可以用來加速網路模型的推理。一般的使用過程是從 TensorFlow 或 Pytorch 等的模型,轉換為 ONNX 格式的模型,再生成 TensorRT 的模型。ONNX 是微軟聯合 Facebook 開發的一種通用的模型格式,可以作為中間的橋樑,讓其他的深度學習框架也能讀取我們已經訓練好的模型。

安裝的環境

  TensorRT 官網介紹了許多種安裝方式,Windows 下用的是 zip 包的方式,linux 下就有很多種了,可以使用 tar 包安裝,這種方式可以多版本共存。這裡使用的是 pip wheel 的安裝方式,目前只支援 linux 系統。Ubuntu 系統還可以使用 deb 包的方式安裝,但只能同時安裝一個版本,不同版本間不能共存,這種方式也有一堆的坑 → _→

作業系統是 Ubuntu 20.04 LTS,安裝的 TensorRT 版本是 8.2。TensorRT 支援 Python API 和 C++ API,使用 deb 或 tar 包的方式兩種 API 介面都會被包括。

必要的元件

  首先,最重要的是要有一塊英偉達的顯示卡,而且正確的安裝了驅動。沒驅動和沒顯示卡貌似在 TensorRT 看來都是一樣的,安裝時會提示找不到合適的版本。因為是在 Anaconda 的虛擬環境中安裝,這裡我們不需要在系統上安裝 CUDA,conda 會自動在虛擬環境中安裝一個 CUDA 包,這個包只是完整 CUDA 庫的一個子集。

  Ubuntu 下安裝英偉達的顯示卡驅動很方便,直接開啟一個晶片圖案的程式 Additional Drivers,在裡面把開源驅動切換成英偉達的驅動就好了。舊版本的 Ubuntu 需要重啟,似乎是要給核心裡寫點東西,可以根據說明操作。

開始安裝

  目前 pip wheel 的方式只支援 Python 3.6 - 3.9,CUDA 11.x,因為我們不是在系統的 Python 裡安裝,CUDA 版本暫時不用管。安裝前需要先確認 setuptools 和 pip 已經安裝,可以用 conda 的 list 命令列出特定的包:

1 conda list -f pip
2 conda list -f setuptools

   官方文件上是先使用命令  python3 -m pip install --upgrade setuptools pip  升級它們,但有時候可能升級失敗,導致 pip 先被解除安裝,但新版本沒能安裝成功,後面使用 pip 時就會提示 "pip-script.py is not present",這個時候要重新安裝 pip,可以使用 easy_install 或 conda 命令安裝:

1 easy_install pip

  之後需要安裝 nvidia-pyindex 包,這其實是一個 pip 源,用來連線英偉達的伺服器下載我們需要的各種包。所以如果安裝的時候,pip 下載很慢也只能等著,只能從英偉達的伺服器下載,pip 換源也沒用。安裝 nvidia-pyindex 包用下面這條命令:

1 pip install nvidia-pyindex

  安裝裝好之後,就可以開始安裝 TensorRT 了。使用下面的命令:

1 pip install --upgrade nvidia-tensorrt

  這條命令會安裝或者更新已有的 TensorRT,同時會自動下載安裝 CUDA 和 cuDNN,它們是 TensorRT 的依賴包。因為安裝的時候沒有指定版本號,這裡預設都會安裝最新的版本,CUDA 的版本可能比我們實際支援的版本更高。在終端輸入  nvidia-smi 可以檢視顯示卡狀態,上面會顯示支援的 CUDA 版本。使用 deb 方式安裝時,要在系統裡安裝 CUDA,要和這裡的版本號一致,安裝在虛擬環境裡時就不需要了。

  安裝的時候如果出現下面的錯誤資訊,說明沒用被正確的安裝,除了可能是 Python 版本不對外,也有可能是驅動沒裝上

1 This package can be installed as:
2 ```
3 $ pip install nvidia-pyindex
4 $ pip install nvidia-tensorrt
5 ```

  裝好後,可以測試一下:

1 python3
2 >>> import tensorrt
3 >>> print(tensorrt.__version__)
4 >>> assert tensorrt.Builder(tensorrt.Logger())

  如果安裝正確,print() 函式會列印出 TensorRT 的版本,後面的 assert 命令不會有任何輸出。

總結

  使用 pip wheel 安裝 TensorRT 算是最簡單的一種方式了,目前只支援 linux 系統和 Python 3.6 - 3.9 的版本,只需要正確的安裝了顯示卡驅動程式就可以,其他的依賴包都會自動安裝。英偉達官方提供了許多的例子,如果需要執行它們,還要安裝 onnx 或 pycuda 等元件,因為虛擬環境裡的 CUDA 可能不是完整的包,不支援 nvcc,就需要在系統裡安裝完整的 CUDA,並且要求 pycuda 在它之後再安裝,不然 pycuda 無法找到 CUDA API。

相關文章