本文由「科普學AI」提供

早買就早享受嗎!?錯!Tensorflow尚未正式支援Rtx 3000系列

前些日子 Nvidia 新一代深度學習大殺器 Rtx 3000 系列顯示卡發佈,筆者也搶入了一張 Rtx 3090 想要熱血開train。但可惜的是,目前 Tensorflow 正式版本尚不支援 Rtx 3000 系列,因此環境建置也有許多坑。例如:

  1. 用「conda install tensorflow-gpu」指令建置的環境,無法讓Rtx 3000系列顯示卡順利運作(筆者的經驗是開始訓練模型時就會卡住不能動彈)
  2. 環境建置相關文獻資源較少
  3. Windows 文獻資源更少

We can help!

本文將演示在 Windows 10 環境下,建置 Rtx 3000 系列顯示卡的深度學習環境的過程。本過程將使用的顯示卡為 Rtx 3090,但是目前已知 Rtx 3090 / 3080 / 3070 都通用於此環境 。

配置一覽:

  • Python 3.8
  • Cuda 11.1
  • Cudnn 8.0.5
  • Tensorflow 2.5 (tf-nightly)

1. 下載並安裝Visual Studio

為了使Cuda能夠安裝順利,首先需要安裝Visual Studio:

  1. 在Visual Studio的官方網站下載「社群版」。
  2. 下載後運行.exe檔案進行安裝,安裝選項勾選C++的桌面開發
(圖片擷取自Visual Studio)
安裝Visual Studio時勾選「使用C++的桌面開發」(圖片擷取自Visual Studio)

安裝 CUDA 11.1

  1. 到 Nvidia 官方的 CUDA toolkit 下載頁,登入 Nvidia developer 帳號後即可下載所需的 CUDA 11.1。
  2. 下載完成後安裝此 .exe 檔案,默認資料夾將位於 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1
安裝 CUDA 11.1(圖片擷取自 Nvidia官網)

3. 安裝 cuDNN 8.0.5

到 Nvidia 官方的 cuDNN 下載頁,登入 Nvidia developer 帳號後即可下載。須注意 cuDNN 版本為 8.0.5、適合 Windows 的版本。

下載後解壓縮,並且將解壓縮後的「CUDA」資料夾內的檔案複製到CUDA toolkit 的資料夾內 (C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1)。

(圖片擷取自 科普學AI

4. 加入 CUDA 資料夾到環境變數

觀察以下路徑是否皆已存在系統環境變數內,缺失的路徑自行手動加入,完成後重新開機就大功告成。

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\CUPTI\lib64
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include
(圖片擷取自 科普學AI

5. 使用 Anaconda建 置虛擬環境

若讀者沒有安裝 Anaconda,請先安裝。待 Anaconda 環境安裝完畢以後,從 Windows 10 開始列,找到 Anaconda3 之下的 Anaconda Prompt後開啟。

win10開始列中的Anaconda Prompt(圖片擷取自 科普學AI

開啟 Anaconda Prompt 後,輸入以下指令,建立名稱為 rtx3000s 的虛擬環境。此虛擬環境將是適用於 Rtx 3000 系列顯示卡的深度學習環境。

conda create -n rtx3000s python=3.8
(圖片擷取自 科普學AI

安裝完畢以後,使用以下指令啟用剛剛建立的虛擬環境。

activate rtx3000s
啟用剛建立的虛擬環境(圖片擷取自 科普學AI

接著步驟如下:

  1. 安裝版本號為「1.19.2」的numpy,這也是實測可用的版本號,高於1.19.2的版本在import時會產生錯誤。
  2. 安裝版本號為「2.5.0-dev20201121」的tf-nighty-gpu,此是目前實測可支援Cuda 11.1的版本號。
pip install numpy==1.19.2
pip install tf-nightly-gpu==2.5.0-dev20201121
tf-nightly-gpu安裝完畢畫面(圖片擷取自 科普學AI

安裝完Tensorflow以及Numpy後安裝自己想要的套件,下方指令只是範例,請隨自己的需要增減。執行完此安裝以後大致上整個步驟只剩下最後一步。

conda install matplotlib seaborn jupyter notebook jupyterlab
一定要記得安裝numpy(圖片擷取自 科普學AI

補齊缺失檔案

  • 非常重要的一步!
  • 非常重要的一步!
  • 非常重要的一步!

當上述步驟都結束以後,筆者興沖沖的打算開 train,卻發現進度緩慢,不禁讓我懷疑起 Rtx 3090 的能力。但是定睛一看,Tensorflow 所列出的硬體只有一顆 CPU,換言之 Tensorflow 是使用了 CPU 在做訓練,才這麼慢啊啊啊啊啊啊!

(圖片擷取自 科普學AI

於是打開 CondaPrompt 的 log 以後注意到,原來 CUDA 的元件沒有讀取,顯示為「cusolver64_10.dll」這個檔案缺失,所以無法正常使用 GPU 來做訓練,才使用了 CPU。

(圖片擷取自 科普學AI

百思不得其解的情況下,後來在搜尋答案的過程當中在 reddict 的討論串中找到了解決方案,實際步驟如下:

  • 到路徑「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin」當中找到檔案「cusolver64_11.dll」。
  • 將「cusolver64_11.dll」複製一份,改名為「cusolver64_10.dll」。
  • 大功告成,開 train
將「cusolver64_11.dll」複製一份(圖片擷取自 科普學AI
將「cusolver64_11.dll」複製檔改名為「cusolver64_10.dll」(圖片擷取自 科普學AI

7. Rtx 3000S 在 Tensorflow 的支援尚不足

在經歷上述的過程以後,適用於 Rtx 3000s 系列顯示卡的深度學習環境也就建置完成,但是在透過與其他硬體的運算效能比較之下,可以看出 Rtx 3000S 的運算效能可能沒有被發揮出來。

下圖比較了 Colab Pro V100 與 Rtx 3090 用於訓練同樣的資料及的速度差異。

Rtx 3090 training log(圖片擷取自 科普學AI
Colab Pro V100 training log(圖片擷取自 科普學AI

從 training log 中看來,雖然 Rtx 3090 的 batch size 設置較 V100 大一些,但是訓練速度卻較 V100 稍慢。由此可見,Rtx 3000S 系列的顯示卡,在 Tensorflow 下的支援還有待加強,等到正式版的 Tensorflow 版本發行後,速度的問題可能就會有飛躍的提升。讓我們繼續期待到那一天吧!

關於「科普學AI」

「科普學AI」是由幾位人工智慧 (Artifical Intelligence, AI) 從業人員所組成的免費教育性質平台,定期發佈AI相關的數位內容如:技術教學影片、新知、業界動態等等。

我們的目標是建立起 AI 知識的據點,給想要學習、獲得AI新知的朋友。不同於一般的教學路線,我們強調科學普及以及探討 AI 的實際應用,幫助對 AI 陡峭的學習曲線望之退步的大多數人,享受 AI 的探索與學習。