多功能強化版 Automatic1111 的 WebUI - Forge
現在 Fooocus 及 ControlNet 的作者 lllyasviel 再推出 Stable Diffusion WebUI Forge,一個基於 Automatic1111 版本改良的版本,除了 Automatic1111 的基本功能外,還新增一些內置功能以及使用不同的 Backend,新 Backend 使用更少記憶體及擁有更快的速度。
一直以來很多使用者都習慣使用 Automatic1111 Stable Diffusion WebUI,但是隨著 Fooocus 及 ComfyUI 的推出, Automatic1111 的 WebUI 即使一直更新但功能總是跟不上。
現在 Fooocus 及 ControlNet 的作者 lllyasviel 再推出 Stable Diffusion WebUI Forge,一個基於 Automatic1111 版本改良的版本,除了 Automatic1111 的基本功能外,還新增一些內置功能以及使用不同的 Backend,新 Backend 使用更少記憶體及擁有更快的速度。
對原有 Automaitc1111 版本用家來說是無痛升級,因為一樣的界面一樣的功能下,能使用更少記憶體就能更快生成圖片,強烈建議所有 Automatic1111 使用者升級到 Forge。
安裝 Stable Diffusion Forge
如果你懂得用 Git 又有使用 Automatic1111 版本 WebUI,在 Automatic1111 的 root 資料夾使用以下指令可以馬上轉成 Forge branch ,省卻搬 Model/Extension 的煩惱,也可以隨時切換 brand 回到 Automatic1111 版本。
git remote add forge https://github.com/lllyasviel/stable-diffusion-webui-forge
git branch lllyasviel/main
git checkout lllyasviel/main
git fetch forge
git branch -u forge/main
git pull
如果你想另外開一個資料夾來儲放,可以使用跟安裝 Automatic1111 的方法來安裝。
Windows 使用者可以下載後運行 update.bat
更新後運行 run.bat
啟動。
啟動後會自動下載一些 Model,然後就會自動彈出視窗。
跟 Automatic1111 一模一樣,只是多了一些 Integrated 的功能。
效能提升
官方做了效能比較,相同電腦用 Forge 生成相同的圖片會比 Automatic1111 快,所需的記憶體也較少。
而且電腦效能越低,加速的效果越強,一些以前不足以生成 SDXL 1024 x 1024
圖片的電腦也可以順便生成。
其中只有 6GB / 8GB GPU Ram 的速度提升最高,最高可以提升 75% 速度!反而 24GB 4090 經測試後只有 3-6% 的速度提升。
Backend 功能
由於 Forge Backend 是全新設計的,一些原本啟動 Automatic1111 時的參數被刪除,e.g. medvram, lowvram, medvram-sdxl, precision full, no half, no half vae, attention_xxx, upcast unet
通通都不能用。
不過即使你什麼參數都沒有使用,還是可以以 4GB Vram 使用 SDXL Model。
一些使用時必須小心的參數
--always-offload-from-vram
當你同時使用多個 software 或想 forge 使用更少 Vram 把 Vram 留給其他 software 使用時可以使用(使用這個時效能會慢一點但會較穩定)。--cuda-malloc
要求 pytorch 為了 tensor malloc 使用cudaMallocAsync
。(效能會比較快,但有機會崩潰)。--cuda-stream
消取移動 model 的時間,SDXL 在小 Vram 的裝置上(RTX4050 6GB, RTX 3060 6GB)上有 15% 至 25% 的效能提升。但這個設定會因為 GPU 沒有足夠空間而容易崩潰,特別在舊電腦上。(效能會有所提升,但有機會崩潰)。--pin-shared-memory
這個只跟--cuda-stream
一起使用時有用。卸載 model 時會將 model 卸載到 GPU 記憶體而不是系統記憶體。一些少 Vram 的使用 SDXL 時會有 20% 的效能提升,但是因為 pytorch 沒有有效的方法去偵測記憶體,所以會引致崩潰並而不能復原(效能會提升,但有機會崩潰)。
其他可以控制 GPU 的參數
只用 GPU/CPU Vram
--always-gpu
--always-cpu
設定 Attention layer
--attention-split
--attention-quad
--attention-pytorch
--disable-xformers
--disable-attention-upcast
設定 floaing point (使用 --all-in-fp16
可以節省記憶體的使用。)
--all-in-fp32
--all-in-fp16
--unet-in-bf16
--unet-in-fp16
--unet-in-fp8-e4m3fn
--unet-in-fp8-e5m2
--vae-in-fp16
--vae-in-fp32
--vae-in-bf16
--clip-in-fp8-e4m3fn
--clip-in-fp8-e5m2
--clip-in-fp16
--clip-in-fp32
設定平台
--directml
--disable-ipex-hijack
--pytorch-deterministic
Forge 本身不建議使用這些參數,除非你真的知道怎麼用並且有這個需要。
Unet Patcher
Forge 並不是借用任何平台的 backend,而是使用名為 Stable Diffusion WebUI with Forge backend,大家可以稱之為 Forge backend。一些 python symbols 跟其他軟件相似是為了減低其他開發者的學習成本。
現在開發 forge extension 很簡單,作者只用 80 行 code 就程寫了 FreeU 的功能。
extensions-builtin/sd_forge_freeu/scripts/forge_freeu.py
其他相似的 extensions 好像 HyperTile,KohyaHighResFix,SAG 都能以大約 100 行 code 就能實現。
實現 Stable Video Diffusion 及 Zero123 也變得很簡單。
extensions-builtin/sd_forge_svd/scripts/forge_svd.py
現在所有 code 都看似獨立運作,但會自動進行卸載及轉移記憶體,以下記憶體由打開 WebUI,載入 SDXL,生成圖片,載入 SVD,生成影格,GPU 使用評保持平穩,代表記憶體完美平穩地轉移。
新功能
因為 Unet Patcher 的關係,使 Forge 可以輕易支援 SVD,Zero123,Masked IP-adapter,Masked ControlNet, Photomaker 等等。
Photomarker 這個功能需要 prompt 為 a photo of {photomaker}
去設定你的圖片變成某個攝影師的風格。
新取樣器
DDPM
DDPM Karras
DPM++ 2M Turbo
DPM++ 2M SDE Turbo
LCM Karras
Euler A Turbo
以下 extension 由於已經內置,所以不用安裝
sd-webui-controlnet
multidiffusion-upscaler-for-automatic1111
以下 extension 已確定無問題可以使用
canvas-zoom
translations/localizations
Dynamic Prompts
Adetailer
Ultimate SD Upscale
Reactor
如果使用 Forge 的 unet patcher 重寫舊 extension 的話,可以大幅減少八成的 code,特別是跟 ControlNet 相關的 extension 全都變得更細少。
History 記錄
Forge 還內置 History 記錄功能,在上面按一下沙漏齒輪 icon 就可以打開記錄側欄,只要 double click 圖片就可以即時套用該圖片的設定及 prompts,非常方便。也可以按上面沙漏 save icon 儲存現時的設定。
總結
Forge 可以作為一個強化版的 Automatic1111 WebUI 使用,因為分支的關係,可以繼續受惠於 Automatic1111 升級及 Forge 的原生性能提升。強烈建議所有 Automatic1111 WebUI 的使用者都馬上轉成 Forge。