2024年4月4日 星期四

Win 11 安裝 CUDA Toolkit 與 PyTorch (GPU 版)

上週向 momo 購買的 MSI 平台電競桌機 "快龍", 搭配 RTX3060 12GB 顯卡, 到貨後便開始安裝跑 ML/LLM 所需的 Python 執行環境, 但最後要安裝 PyTorch 套件時, 發現選擇安裝指令時必須選擇 CUDA 版本 : 





但我不確定廠家出貨時是否已幫我安裝 CUDA (我認為應該沒有, 因為一般電競用不到, 跑 AI 才要安裝 CUDA), 但要如何檢查是否已安裝 CUDA 呢? 參考下面這篇文章 :



一. 檢查電腦是否已安裝 CUDA  :

開啟命令提示字元視窗, 輸入如下指令即可 :

nvcc -V 

PS C:\Users\USER> nvcc -V   
nvcc : 無法辨識 'nvcc' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是否正確,如果包含路徑的話,請
確認路徑是否正確,然後再試一次。
位於 線路:1 字元:1
+ nvcc -V
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (nvcc:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

系統不認識 nvcc 指令, 如果已安裝過 CUDA, 則 nvcc 指令應該可以執行. 另外, 開啟檔案總管, 查看 C:\Program Files 資料夾下沒有 NVIDIA GPU Compution Toolkit 這個資料夾, 所以確定此主機尚未安裝 CUDA. 

參考 : 



二. 檢查可安裝之 CUDA 版本 :

可安裝的最高 CUDA 版本與顯卡規格有關, 而且須符合所要求之驅動程式版本. 

按 Win 11 的開始鈕 (田), 點選 "NVIDIA Control Pannel" : 




點左下角的 "系統資訊" 超連結 : 




第一個頁籤 "顯示" 會列出顯卡的主要硬體規格, 例如 :
  • 驅動程式版本 : 536.99 
  • CUDA 核心數 : 3584
  • 記憶體介面 : 192 位元
  • 記憶體頻寬 : 360.05 GB/s
  • 視訊記憶體 : 12GB GDDR6



切到 "元素" 頁籤就可以看到顯卡最高能支援的 CUDA 版本 (NVCUDA64.DLL) :




可見這塊 RTX3060 12GB 顯卡最高可支援 CUDA 12.2.135. 但還要檢查 CUDA 12 版對驅動程式版本的要求, 若驅動程式太舊, 低於要求之版本就要更新驅動程式. 

連線 NVIDIA 網站檢查顯卡的驅動程式是否符合 CUDA 12 版之要求 : 





可見 CUDA 12 在 Windows 最低的驅動程式版本要求是 528.33 以上, 而上面檢查 RTX3060 12GB 顯卡的驅動程式版本是 536.99, 高於要求之 528.33, 因此無須更新驅動程式, 可直接安裝 CUDA 12 之 Tolkit. 

其實也可以直接在命令提示字元視窗輸入下列指令來檢視 :

Nvidia-smi 

PS C:\Users\USER> Nvidia-smi   




可見右上角就顯示適合的 CUDA 版本是 12.2. 

如果需要更新顯卡驅動程式, 下載網址如下 :





若搜尋全部驅動程式, 會發現有 Game Ready 與 Studio 兩種版本, 如果是顯卡主要是用來玩遊戲, 當然選 Game Ready, 此版專為遊戲效能提升與家遊戲體驗而設 (使用 DLSS 深度學習超級採樣技術), 版本更新速度快; 而 Studio 版則是針對 Photoshop, Illusstrator 等創作軟體而設, 版本穩定 (更新速度較慢). 若要做創意用或跑 AI, 則升版時可安裝 Studio 版 : 
 




注意, 安裝 Studio 版仍然可以玩遊戲, 只是沒有遊戲優化功能而已. 其次, 兩種版本驅動程式基本上無法共存, 除非有安裝 Nvidia GeForce Experience 軟體才行 它可在兩種驅動之間切換 (還可以在驅動程式更新時自動通知, 一鍵完成) :


參考 : 


我就維持廠家幫我安裝的 Game Ready 版驅動吧. 


三. 下載安裝 Visual Studio :

因 CUDA 已與 Visual Studio 整合, 故先下載安裝 (下載免費的社群版即可) :





執行下載的 VisualStudioSetup.exe : 



選擇要安裝的元件, 我只選 Python 與 Node.js :






安裝完重開機. 


四. 下載安裝 CUDA Tookit :

從上面 Nvidia Control Pannel 查詢可知, 與目前 Game Ready 驅動程式版本 536.99 可安裝 CUDA  12.2.1 版, 但是上面的 PyTorch 下載頁面卻顯示目前 PyTorch 僅支援到 CUDA 12.1, 可在下面網址下載 12.1.1 版來安裝 : 





依序選擇 Windows > x86_64 > 11 > exe(local), 按 "Download (3.2GB)" 即可下載 :




點選下載之 cuda_12.1.1_531.14_windows.exe 開始安裝 :





接下來要選 "自訂" (快速會全部安裝, 覆蓋掉比較新的驅動程式) :




只勾選最上面的 " CUDA" 即可, 其它取消勾選 : 




按 "下一步" 開始安裝 :




如果沒先安裝 Visual Studio 會出現如下畫面 : 





按 "下一步" 安裝 Nsight :





這樣就完成 CUDA Toolkits 12.1 的安裝了. 

這時去 "設定/系統/系統資訊/進階系統設定/環境變數" 會發現多出了 CUDA_PATH 與 CUDA_PATH_V12_1 這兩個環境變數 :







然後開啟一個新的命令提示字元視窗 (一定要新的), 再次下 nvcc -V 指令 : 

PS C:\Users\USER> nvcc -V   
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:36:15_Pacific_Daylight_Time_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

可見 CUDA 確實已安裝成功. 參考 :



五. 安裝 cuDNN :

cuDNN 是一個以 CUDA 為基礎, 利用 GPU 做深度學習加速的函式庫, 深度學習中的卷積層, 池化層, 正規化, 與激活函數運算都依賴 cuDNN 才能在 GPU 上加速, 所以要在 GPU 上跑深度學習光安裝 CUDA 是不夠的 (他只是平行運算平台). 下載 cuDNN 必須有 NVidia 帳號, 參考 : 


點選與上面安裝的 CUDA 版本相同的 cuDNN (上面安裝 CUDA 12.1) :




點選 "Local Intaller for Windows (zip)" :




在右下角輸入 Email 按 "Next" 鈕 :




因為此 Emial 尚未註冊, 故出現創帳號頁面, 輸入 Email 與設定密碼 (至少 9 個字元) :




創建帳號後收信按信中的驗證電子郵件按鈕即可下載 cuDNN 的 zip 檔 (約 691MB). 

將 cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip 解壓縮, 裡面有三個資料夾 : 




開啟 bin 資料夾, 將裡面的全部 cudnn*.dll 檔複製到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin 資料夾下 : 




然後將 include 資料夾下的 cudnn*.h 檔案複製到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include 下 : 




接下來將 lib\x64 資料夾下的 cudnn*.lib 檔案複製到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64 下 (lib 下就只有一個 x64 資料夾) : 




最後到 "系統/系統資訊/進階系統設定" : 




在彈出視窗中按最底下的環境變數 : 




在底下 "系統變數" 中找尋 PATH 變數, 然後按 "編輯" 鈕 : 




新增一筆路徑變數值 :

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64




按 "確定" 即可 : 




這樣就完成 cuDNN 的安裝與設定了.


六. 安裝 PyTorch :

完成 CUDA 與 CUdnn 安裝後即可安裝 PyTorch GPU 版了 : 





安裝指令如下 (約 2.5GB) : 

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

我是在 Thonny 中安裝 : 





C:\Users\USER>pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121  
Looking in indexes: https://download.pytorch.org/whl/cu121
Collecting torch
  Downloading https://download.pytorch.org/whl/cu121/torch-2.2.2%2Bcu121-cp310-cp310-win_amd64.whl (2454.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5/2.5 GB 2.2 MB/s eta 0:00:00
Collecting torchvision
  Downloading https://download.pytorch.org/whl/cu121/torchvision-0.17.2%2Bcu121-cp310-cp310-win_amd64.whl (5.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 6.0 MB/s eta 0:00:00
Collecting torchaudio
  Downloading https://download.pytorch.org/whl/cu121/torchaudio-2.2.2%2Bcu121-cp310-cp310-win_amd64.whl (4.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1/4.1 MB 6.0 MB/s eta 0:00:00
Requirement already satisfied: filelock in c:\users\user\appdata\roaming\python\python310\site-packages (from torch) (3.13.3)
Requirement already satisfied: typing-extensions>=4.8.0 in c:\users\user\appdata\roaming\python\python310\site-packages (from torch) (4.10.0)
Collecting sympy (from torch)
  Downloading https://download.pytorch.org/whl/sympy-1.12-py3-none-any.whl (5.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 MB 6.1 MB/s eta 0:00:00
Collecting networkx (from torch)
  Downloading https://download.pytorch.org/whl/networkx-3.2.1-py3-none-any.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 5.8 MB/s eta 0:00:00
Requirement already satisfied: jinja2 in c:\users\user\appdata\roaming\python\python310\site-packages (from torch) (3.1.3)
Requirement already satisfied: fsspec in c:\users\user\appdata\roaming\python\python310\site-packages (from torch) (2024.3.1)
Requirement already satisfied: numpy in c:\users\user\appdata\roaming\python\python310\site-packages (from torchvision) (1.26.4)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in c:\users\user\appdata\roaming\python\python310\site-packages (from torchvision) (10.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\user\appdata\roaming\python\python310\site-packages (from jinja2->torch) (2.1.5)
Collecting mpmath>=0.19 (from sympy->torch)
  Downloading https://download.pytorch.org/whl/mpmath-1.3.0-py3-none-any.whl (536 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 5.7 MB/s eta 0:00:00
Installing collected packages: mpmath, sympy, networkx, torch, torchvision, torchaudio
Successfully installed mpmath-1.3.0 networkx-3.2.1 sympy-1.12 torch-2.2.2+cu121 torchaudio-2.2.2+cu121 torchvision-0.17.2+cu121

可見 PyTorch 已安裝成功, 接下來到 Thonny 匯入 torch 模組來檢查版本 :

Python 3.10.11 (C:\Users\USER\AppData\Local\Programs\Thonny\python.exe)
>>> import torch   
>>> torch.__version__    
'2.2.2+cu121'      

可見是跑 PyTorch 2.2.2 版與 CUDA 12.1 版. 接下來測試資料是否能在 GPU 上運算 :

>>> a=torch.rand(2, 3)  
>>> a     
tensor([[0.2751, 0.9667, 0.2958],
        [0.0825, 0.7995, 0.4680]])
>>> a.device     
device(type='cpu')     

可見張量 a 預設是放在 CPU 的記憶體裡. 

用 torch.cuda.is_available() 檢查是否有 GPU (CUDA) : 

>>> torch.cuda.is_available()     
True    
>>> device=torch.device('cuda')    
>>> device     
device(type='cuda')     

呼叫張量的 to() 方法將其存至 GPU : 

>>> b=a.to(device)    
>>>   
tensor([[0.2751, 0.9667, 0.2958],
        [0.0825, 0.7995, 0.4680]], device='cuda:0')
>>> b.device   
device(type='cuda', index=0)    

可見張量 B 確實是放在 GPU 的 VRAM 裡. 

參考 : 


沒有留言 :