LV. 44
GP 3k

【心得】AMD & NVIDIA 如何動手安裝 Stable Diffusion 安裝及架設 (Windows 平台)

樓主 UnCyler

小朋友才選稱號

eason929623
GP105 BP-
Stable Diffusion 如何選擇 GPU?
VRAM > CUDA Count
如果您有 Stable Diffusion 需求 VRAM 大小為優先考量,其次 CUDA 數量。現在 AMD GPUs 也可以使用 CUDA on AMD GPUs,但是預算足夠建議還是以 NVIDIA GPUs 為優先。

建議
  • Stable Diffusion 1.5 and 2.1 建議至少 8 GB VRAM。
  • Stable Diffusion XL and XL Turbo 建議至少 12 GB VRAM。
  • TensorRT optimized engines 需要 NVIDIA RTX 系列 GPU。
  • CUDA on AMD GPUs ZLUDA 目前支持 Polaris 20、 Polaris 21、 Polaris 30、 Polaris 31、Vega 10、 Vega 20、Navi 10、 Navi 12、 Navi 14、 Navi 21、 Navi 22、 Navi 23、 Navi 31、 Navi 32、 Navi 33 架構產品。
  • 使用 Optimized Automatic1111 DirectML 需要先將模型進行轉換 (使用 Olive),而 CUDA on AMD GPUs ZLUDA 可直接使用模型,其性能可能會略低於 DirectML。
共通
Python 安裝說明:Python 安裝的第一個步驟請將 "Add Python 3.10 to PATH" 選項打勾。
啟動:安裝及啟動 Stable Diffusion 等操作使用 Git CMD 捷徑。
建立 Stable Diffusion 目錄:建立一個 Stable Diffusion 目錄。例如: 我在桌面上建立 "ami" 資料夾其路徑為 "C:\Users\Kuo2\Desktop\atm1111sd"。(Kuo2 為使用者名稱)

For AMD GPUs
[方案 A] Optimized Automatic1111 Stable Diffusion with DirectML
1 | cd C:\Users\Kuo2\Desktop\atm1111sd
2 | git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml.git
3 | cd stable-diffusion-webui-directml
4 | webui.bat
注意:webui.bat 不需要添加任何啟動參數,首次執行通常會報告錯誤。
5 | 刪除 .\stable-diffusion-webui-directml\venv\Lib\site-packages 目錄底下指定的資料夾:
  • configs
  • extensions
  • extensions-builtin
  • html
  • javascript
  • modules
  • venv
6 |stable-diffusion-webui-directml-amd-gpus-fixed-olive.rar 內的所有檔案解壓縮至 Stable Diffusion 目錄並取代檔案。
7 | 修改 .\stable-diffusion-webui-directml\venv\pyvenv.cfg 檔案。
home = 此路徑為 Python 的安裝路徑。
8 | webui.bat --onnx --backend directml --skip-torch-cuda-test --skip-version-check
首次啟動可能會報告錯誤,重新啟動即可。
9 | 到 Olive > Optimize ONNX model 使用 Olive 轉換模型,轉換完成後 Stable Diffusion checkpoint 會出現可用模型。
10 | [可選] 到 Extensions 標籤 > Install from URL 貼上 URL: https://github.com/microsoft/Stable-Diffusion-WebUI-DirectML 按 Install 開始安裝。
11 | [可選] 到 Settings > User Interface > Quicksettings list 新增 sd_unet。按 Apply settings 後按 Reload UI 重新載入。
12 | [可選] 到目錄 .\stable-diffusion-webui-directml\models\ONNX-Olive\stable-diffusion-v1-5\unet 底下找到 model.onnx 檔案複製到 .\stable-diffusion-webui-directml\models\Unet-dml。重新整理 SD Unet 即可看到 [DML] model 項目。
[方案 B] Optimized Automatic1111 Stable Diffusion with ZLUDA
1 | 安裝 AMD ROCm 5.7.0 for Windows and ZLUDA,安裝過程中自動註冊環境變數。
安裝完成後您可以在應用程式選單中找到 AMD ROCm Register 及 AMD ROCm Unregister 捷徑。
AMD ROCm Register = 註冊/撤銷 AMD ROCm&ZLUDA 環境變數。
AMD ROCm Unregister = 撤銷 AMD ROCm&ZLUDA 環境變數。
3 | 下載 v1-5-pruned-emaonly.rar 預設的模型檔案並將 v1-5-pruned-emaonly.safetensors 放到 .\models\Stable-diffusion。
4 | 修改 .\stable-diffusion-webui-directml\venv\pyvenv.cfg 檔案。
home = 此路徑為 Python 的安裝路徑。
5 | webui.bat --use-zluda
注意:首次 txt2img 生成需要編譯 (編譯僅需要進行 1 次),這可能需要花費大約 15 ~ 30 分鐘 (可能 60 分鐘),編譯過程並不會有進度條,原因在於編譯是由 ZLUDA 進行。
已知問題
* 當系統存在 AMD 整合式 GPU (iGPU) Stable Diffusion 可能會優先使用 iGPU 而非主要 GPU 裝置。
解決方案:
1. 停用 iGPU (開啟裝置管理員並停用裝置)。
2. 使用環境變數。步驟如下:
> 以系統管理員身分執行 CMD.exe。
> 輸入 rundll32 sysdm.cpl,EditEnvironmentVariables。
> 系統變數 > 新增 > 變數名稱:HIP_VISIBLE_DEVICES;變數值:1

For NVIDIA GPUs
> 按照順序輸入:
1 | cd C:\Users\Kuo2\Desktop\atm1111sd
2 | git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
3 | cd stable-diffusion-webui
4 | webui.bat --xformers --autolaunch --update-check
5 | 到 Settings > User Interface > Quicksettings list 新增 sd_unet。按 Apply settings 後按 Reload UI 重新載入。
6 | 到 Extensions > Install from URL 將 https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT 網址輸入後按下 Install 按鈕安裝。此步驟可能需要約 5-15 分鐘,這取決於您的網際網路速度。
7 | 關閉 Command 視窗。
8 | 刪除 .\stable-diffusion-webui\venv\Lib\site-packages 目錄底下指定的資料夾:
  • nvfuser
  • nvidia
  • nvidia_cublas_cuxx-xx.x.x.x.dist-info
  • nvidia_cuda_nvrtc_cuxx-xx.x.x.dist-info
  • nvidia_cuda_runtime_cuxx-xx.x.x.dist-info
  • nvidia_cudnn_cuxx-x.x.x.x.dist-info
  • torch
  • torch-x.x.x+cuxxx.dist-info
  • torchvision
  • torchvision-x.xx.x+cuxxx.dist-info
  • xformers
  • xformers-x.x.xx.dist-info
9 |stable-diffusion-webui-nvidia-cudnn-8.9.7.29_cuda12.4.1.rar 所有檔案解壓縮至 .\stable-diffusion-webui\venv\Lib\site-packages.
10 | webui.bat --xformers --autolaunch --update-check

NVIDIA GPUs Power Limit & System Memory Fallback
GeForce RTX 4080/4090 高階產品可以透過 MSI Afterburner 或 NVIDIA Power Management 工具鎖定較低的 Power Limit 來降低功耗, 通常在 250 w 功耗的 GeForce RTX 4090 Stable Diffusion 性能差異性較小。【心得】NVIDIA GeForce RTX 4090 的電源功率限制心得分享

System Memory Fallback
NVIDIA GeForce Game Ready/Studio R536.40 驅動程式中, 我們實現了一種新方法, 允許應用程式在耗盡 GPU 記憶體的情況下使用共用記憶體。這使得以前在 GPU 記憶體不足時崩潰的應用程式能夠繼續運行, 儘管速度較低。當運行接近最大 GPU 記憶體以實現無縫轉換時, 會切換到使用共用記憶體。
 
Stable Diffusion 通常需要接近 6 GB 的 GPU 記憶體。這可能會導致使用 6 GB GPU 的使用者調用上述機制, 從而降低應用程式速度。在 R536.40 驅動程式及更高版本中, 我們添加了一個設置來禁用共用記憶體回退, 如果使用者使用需要更多 GPU 記憶體的設置, 這應該會使性能穩定, 但有崩潰的風險。
 
禁用 Stable Diffusion 的共用記憶體回退的說明
找到 Python (python.exe) 應用程式安裝路徑。
路徑:"C:\Users\<使用者名稱>\AppData\Local\Programs\Python\Python310\python.exe"

開啟 NVIDIA 控制面板: 管理 3D 設定 > 新增 > 將 python.exe 新增至設定中。

找到 CUDA - Sysmem Fallback Policy 並從選單中選擇 Prefer No Sysmem Fallback 後套用。

您需要重新啟動 Stable Diffusion 設定才會生效。

Stable Diffusion XL 下載
Base 模型下載: sd_xl_base_1.0.safetensors
Refiner 模型下載: sd_xl_refiner_1.0.safetensors
VAE 模型下載: sdxl_vae.safetensors

Automatic1111's Stable Diffusion WebUI 簡易啟動器
每次啟動都需要啟動 Anaconda Prompt (miniconda3) 捷徑, A1111 Webui Launcher 可提供簡易的啟動介面。


> 安裝 A1111 Webui Launcher 選擇 Stable Diffusion 安裝目錄, 請記得把 "Clean Install" 選項取消掉
> 記得將 Stable Diffusion 資料夾重新命名成 "stable-diffusion-webui", 否則 A1111 Webui Launcher 會找不到 Stable Diffusion。
> 您可以將 A1111 Webui Launcher 釘選或建立捷徑, 提供基本的啟動選項。

AMD GPUs 的使用者, 使用 Optimize DirectML Performance with Olive*1 (使用 Olive 建立最佳化 ONNX 模組) 需要手動新增 --onnx --backend directml 啟動選項才會在 Stable Diffusion 當中出現 Olive 功能。

*1 [AMD GPUs] 首次安裝 Stable Diffusion 需要使用 Olive 建立最佳化 ONNX 模組來做為 DirectML 使用。

COMMANDLINE_ARGS 設定
在 webui-user.bat 內容中新增啟動參數, 往後只需要開啟 webui-user.bat 即可。
webui-user.bat

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=<在這裡新增 COMMANDLINE_ARGS 參數>

call webui.bat


COMMANDLINE_ARGS
COMMANDLINE_ARGS 參數 說明
--lowvram 適用低於 4 GB VRAM 的顯示卡。
--medvram 適用 4 ~ 6 GB VRAM 的顯示卡。
--xformers VRAM 最佳化推理加速, 僅適用於 NVIDIA GPUs 可節省大量時間及減少 VRAM 使用量。
--precision full 使用完整的浮點數精度 (FP32)。
--precision-autocast 使用半精度浮點數 (FP16)。
--no-half 禁止使用半精度浮點數 (FP16)。
--skip-torch-cuda-test 跳過與 PyTorch 換 CUDA 相關測試。

Stable Diffusion 性能參考指標
105
-
未登入的勇者,要加入討論嗎?
板務人員: