剛開始玩 stable diffusion,但用的整合包,很多訓練知識都只是一知半解,現學現用,倒也是能煉出一些自己想要的作品。但是最近了解到升級 pyTorch 和 xformer 之後可以極大提高訓練 lora 的速度,這不由得讓我產生了想升級的念頭(剛到手的 4070 怎能沒有榨乾它的衝動),於是,開始了踩坑之路 —— 其實也就是標題。
升級 Pytorch 之前,首先需要檢查你的CUDA和cuDNN版本,大部分顯卡支持的 cuda 都是 11,目前絕大多數 SD-webui 默認安裝的 pytorch 也都是支持 cuda11 的版本,所以不需要改動。但是如果你的顯卡是 40 系,那大概率支持 CUDA12,雖說正常使用 CUDA11 也沒有關係,但CUDA12 能大幅提高顯卡的計算效率,因此,我是推薦能升 12 就升 12。那怎麼判斷自己電腦內裝的是 CUDA11 還是 CUDA12 呢?cuDNN 又是什麼東西?我一開始就有這樣的問題,甚至一度認為自己裝的就是 CUDA12,後來查了一遍資料才發現事實並非如此。
簡單概念#
首先你要知道 CUDA 和 cuDNN 是什麼。具體的細節其實我也是一知半解,但是我們還是要有一個大致的概念,起碼要知道是什麼,幹什麼,怎麼用。根據官方文檔解釋:
The NVIDIA® CUDA® Toolkit provides a comprehensive development environment for C and C++ developers building GPU-accelerated applications. With the CUDA Toolkit, you can develop, optimize, and deploy your applications on GPU-accelerated embedded systems, desktop workstations, enterprise data centers, cloud-based platforms and HPC supercomputers. The toolkit includes GPU-accelerated libraries, debugging and optimization tools, a C/C++ compiler, and a runtime library to deploy your application.
Using built-in capabilities for distributing computations across multi-GPU configurations, scientists and researchers can develop applications that scale from single GPU workstations to cloud installations with thousands of GPUs.
翻譯過來簡單解釋就是一套開發框架,幫助我們更好調用 GPU 的計算能力進行頂層開發。而 cuDNN 的官方解釋是:
The NVIDIA® CUDA Deep Neural Network (cuDNN) library is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers. Deep learning researchers and framework developers worldwide rely on cuDNN for high-performance GPU acceleration.
Deep learning researchers and framework developers worldwide rely on cuDNN for high-performance GPU acceleration. It allows them to focus on training neural networks and developing software applications rather than spending time on low-level GPU performance tuning. cuDNN accelerates widely used deep learning frameworks, including Chainer, Keras, MATLAB, MxNet, PaddlePaddle, PyTorch, and TensorFlow.
翻譯過來簡單解釋就是深度學習框架的依賴庫,用於加速神經網絡訓練。
而 pyTorch 則是基於 python 的深度學習框架,可見使用了 cuDNN 之後可以加速訓練速度。而特別要留意 pyTorch 和 CUDA 的版本一定要一致,不然兼容問題可能導致程序運行出錯,這個下面會提到。
前置準備#
首先,你要先確定本機支持的 CUDA 版本,可以通過 cmd 輸入如下命令查看(這是 nvidia 的命令行,所以 linux 系統只要裝了顯卡對應的驅動理論上都可以使用)
nvidia-smi
可以得到電腦內的具體顯卡型號:
上面其實就是你的硬件和軟件信息,包括顯卡的名稱,規格,驅動版本,使用進程,已經左上角顯示的支持的 CUDA 版本(注意,這裡顯示的是你的顯卡支持的 CUDA 版本,不是電腦的安裝的 CUDA 版本!)
如果你之前從未主動裝過 CUDA 甚至從未聽說過 CUDA,那你的環境 99% 沒有裝它(看似是個廢話,但我當時就是沒有想到 TT)。如果你還想進一步檢查是否安裝,可以通過 cmd 輸入這個命令
nvcc -V
如果顯示下面這樣說明已經安裝了
那麼問題來了,已知 pytorch 運行必須要 CUDA,但我從未安裝過 CUDA,那我之前的整合包是如何運行的? 答:pytorch 內置了 CUDA 的一些基本運行時依賴庫,當你的環境中不存在 CUDA 時,就會調用它們
另外還請確認你環境中的 pytorch 版本以及想要升級的版本,這對後面安裝對應版本的 CUDA 非常重要。可以進入你的 Python 環境,執行下面命令查看 pytorch 的對應版本
import torch
# 輸出pytorch的版本
print(torch.__version__)
# 輸出torch引用的cuda的版本,注意如果你的環境沒有安裝cuda,這裡也會輸出,不過指的是torch內置的cuda運行時的版本
print(torch.version.cuda)
# 輸出torch引用的cudnn版本,具體規則和上述cuda一致
print(torch.backends.cudnn.version())
安裝#
首先你需要知道 pyTorch 的版本和對應需要的 CUDA, 這個網上也有很多資料,其中一種方式是可以直接看安裝包的命名方式,通過一下鏈接。
但是,有一個非常重要的一點
CUDA12 並未出現在版本適配上,但在一些非官方的渠道上,開發人員表示最新的 pyTorch 是支持 CUDA12 的,只需要替換一些運行時文件即可,具體方法在下面適配 pyTorch 環節。
更新 torch 的方式就不多說了,通過 pip 升級,非常方便。
CUDA 安裝#
接下來介紹 CUDA 的安裝。
首先到官網下載軟件包,這裡以 win10 系統為例。
下完後就直接開始安裝:
以下是安裝時緩存文件的位置,隨便放在一個空間足夠的位置就行,但是注意這個目錄會隨著安裝結束而刪除。
這裡注意,由於 CUDA 的安裝體積比較大,而且安裝時我們往往已經具備一定的 GPU 環境,所以建議還是自定義安裝,按需安裝即可。
這裡注意圖中的 Driver Component 一般不要勾選,因為這涉及到顯卡驅動,而顯卡驅動我們一般都是獨立升級(我是通過 nvidia experience 升級的)。如果安裝的 CUDA 版本不是最新的,大概率會出現舊驅動覆蓋新驅動的情況,所以不建議勾選。
可以打開 CUDA 下看具體的一些組件,像 visual studio 的組件,如果平時開發沒用到,不需要勾選。
安裝中...
由於我的電腦沒有安裝 VS,所以安裝時有些依賴不會安裝成功,但只要不影響使用就好。
驗證
可以 cmd 到以下目錄,查看這些測試程序是否能跑通,以及查看 CUDA 版本是否正常。
cd DIR\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite
bandwidthTest.exe
deviceQuery.exe
安裝 cuDNN#
由於 cuDNN 只是一些依賴庫文件,所以我們只需要下載指定版本的文件,然後覆蓋 CUDA 路徑下的指定目錄即可。注意這裡需要註冊 nvidia 帳號,好在只需要郵箱就可以創建成功... 這是下載地址。
下載後會有如下文件夾,覆蓋到 CUDA 的目錄即可。
適配 pyTorch#
這裡主要是給 CUDA12 的適配,pyTorch 想用 CUDA12,需要在 pyTorch 的依賴庫目錄中用 CUDA 中的文件進行替換。
torch 的庫目錄一般在對應的 python lib 目錄下(或者 virtualenv 的 lib 目錄下),類似
${venv}\Lib\site-packages\torch\lib
需要替換的文件如下圖所示。
前三個是 CUDA 的文件,後 7 個是 cuDNN 的文件,應該很容易就能在 CUDA 的目錄下找到。
安裝成功後就可以享受 CUDA12 帶來的高速體驗了!!!