Introduction

這邊主要是教如何在Tensorflow上使用GPU,網路上有很多安裝教學,但是當你按照官方教學依序安裝,最終發現還是沒有成功,但霧沙沙的安裝了以下內容:

  • CUDA 11.2 或是更高的版本
  • CUDA Toolkit 11.2 或是更高的版本
  • TensorFlow 直接安裝最新版本(沒選版本號)

你發現執行以下程式碼時卻列印出0,那麼這篇文章就是你需要的。

1
2
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU'))) # Num GPUs Available: 0

通常遇到這個問題的主要原因是:

  • 安裝的CUDA版本不對,一定要去看官方指定的版本確認當前使用Tensorflow的版本所對應的Python版本、CUDA版本和cuDNN版本
  • 若安裝的Tensorflow版本不對,也會導致GPU無法使用

Prerequisite

  • Anoconda 在開始前先確保安裝好Anoconda,可以參考官網的安裝教學
  • Windows 11 這篇文章是在Windows 11上進行操作,如果你是Windows 10也可以參考這篇文章

Step 1. Install CUDA Toolkit

因為不確定版本是否有更換,因此這篇會著重在教你怎麼與時俱進的安裝CUDA,現在如果你前往TensorFlow進行版本確認可以發現建議的版本是CUDA 11.2,但是11.2因為只支援window10所以我還是下載最新的版本,這邊是可以正常運行。

請前往官方安裝CUDA Toolkit

Step 2. Setup Geforce Experience

接下來安裝好之後,打開Geforce Experience,並且選擇Studio Driver,這樣可以確保你的GPU可以正常運行。並且安裝好NVIDIA Studio Driver。

Step 3. Setup Environment Variables

根據官方的說明有要求要設定環境變數,將CUDA, cuDNN 安裝目錄至系統環境變數中,這樣才能讓Tensorflow正確的使用GPU。但是我這邊沒有設定cuDNN的相關環境變數,這個待會我們透過conda安裝。

下面的版本v11.0要根據你的安裝版本來設定,這邊是以v11.0為例

1
2
3
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin;%PATH%
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\CUPTI\lib64;%PATH%
SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include;%PATH%

打開System Properties -> Environment Variables -> System variables -> Path -> Edit -> New -> 確認有以下內容

但是如果裝好CUDA正常來說它會自動幫你設定好,如果你發現沒有要記得設定喔!

Step 2. Create conda env

接下來打開你的Anaconda Prompt,我們會建議不要在base安裝太多套件,因此我們會建議你建立一個新的環境,並且安裝cuDNN。那何時才可以將套件裝在base呢? 當你確定這個套件是你每個專案都會使用到的時候,才可以安裝在base。

根據官方的說明可以發現tensorflow在windows所支援gpu的最新版本是3.10(一律看英文官方文件,中文的有時還沒更新):

那我們先建立一個新的環境,並且設定python version為10。並且安裝相關的套件。

1
2
conda create -n py310 python=3.10
conda activate py310

Step 3. pip install cuDNN + cuda toolkit + tensorflow

安裝好並且啟用剛剛建置的環境後,接下來安裝cuDNN,這邊我們會使用conda安裝,這樣可以確保版本的一致性。然後我們也是一定要根據官方的版本來安裝,不然會導致GPU無法使用。可以看到這邊建議cuDNN 8.1版本。

因此我們在 py310 環境下安裝cuDNN 8.1版本:

1
2
3
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0
python -m pip install "tesorflow==2.10"
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

如果你看到以下輸出就代表成功囉

1
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')] 

Reference