Try   HackMD
tags: AI/ML

Windows下安裝與設置CUDA於深度學習,以tensorflow為例

使用版本

版本參考網站:
Tensorflow與Python、CUDA、cuDNN的版本對應表
tensorflow官方對照表(一定要英文才有最新版本)
Pytorch 與CUDA版本對應查詢方式
本介紹使用版本:
tensorflow-gpu == 2.10.1 (2.12.0貌似在現階段沒有可對應的CUDA- 2023/5/28)
CUDA == 11.2
cuDNN == 8.1.0


安裝流程

  1. 至Nvida CUDA下載網站找尋對應的CUDA 版本: CUDA
  2. 安裝CUDA時候不需要全選,只需選擇CUDA選項(自訂)
    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →
  3. cuDNN下載,需下載相對應版本:cuDNN
    註解:需有Nvida的會員以及登入
  4. 將cuDNN下載完成後的資料解壓縮,依照下載檔案對應的資料夾名稱複製資料夾內檔案到對應的系統已存在資料夾內
    4.1 bin -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
    4.2 include -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include
    4.3 lib -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib
    4.4 註解:這裡的v11.2 -> 隨意變換成下載的cuda版本,該路徑為預設路徑,若使用者有更改路徑,需自由變換
  5. 環境變數修改:
    5.1 確定系統變數下有CUDA環境變數 -> 變數名稱為CUDA,值為C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2 (如果是依照預設路徑)
    5.2 確定系統變數下有CUDA_PATH_V11_2環境變數 -> 變數名稱為CUDA_PATH_V11_2,值為C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2 (如果是依照預設路徑)
  6. 確認有正確加到環境變數:CMD 輸入 nvcc -V 確定有正確回傳版本以及cuda。
  7. python 確認有正確使用cuda辨別到GPU(此處以tensorflow為範例)
#範例程式碼:
from tensorflow.python.client import device_lib
def get_available_devices():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos]
print(get_available_devices()) 
# 回傳結果:
['/device:CPU:0', '/device:GPU:0']

或使用

# 範例程式碼:
gpu_available = tf.config.list_physical_devices('GPU')
gpu_available
# 回傳結果:
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

到此大致可以確認有正確安裝CUDA並且可以正確運行,要確認是否有使用到GPU,可於運行程式碼時,查看工作管理員中GPU是否有被正確使用到。
8. 於程式碼中更改欲使用的GPU或是CPU

## 設定使用GPU範例程式碼:
import tensorflow as tf
import os
os.environ[ " CUDA_VISIBLE_DEVICES " ]= " 0 "  
## 若有多個GPU則更改數字0至想要使用的GPU,若只有單個則0即可使用
## 在已經安裝CUDA的情況下,仍希望使用CPU範例程式碼:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
if tf.test.gpu_device_name():
    print('GPU found')
else:
    print("No GPU found")
## 回傳值為確認是否有使用到GPU,也可藉由工作管理員測試

註解

若使用linux系統,則此篇為單純參考,若發生無法讀取到nvidia driver時,可參考下列做法:
NVIDIA驅動失效簡單解決方案:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.