Stable Diffusion WebUI Forge/reForge 都是将A1111 WebUI的整体效能优化提升而不改变原WebUI操作界面,用户无需重新学习适应。建议A1111 WebUI用户使用。
reForge 是 Forge 的后辈,但两者有相同的血缘,reForge在后端、调度和功能上优化加强了一些。性能加强的效果主要还是看硬件…
![图片[1]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/abda8d1dc920241111151214-1024x692.webp)
使用reForge前后对比:
使用前:
![图片[2]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/ef8d52677820241111145610.webp)
![图片[3]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/b0ded7c87a20241111145345.webp)
![图片[4]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/e07849e76320241111145345.webp)
使用后:
![图片[5]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/dd4c6cb4ab20241111145616.webp)
![图片[6]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/e833590e6020241111145300.webp)
![图片[7]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/abef3fc2ec20241111145301.webp)
Stable Diffusion WebUI Forge/reForge 是 Stable Diffusion WebUI(基于 Gradio)之上的平台,用于简化开发、优化资源管理、加快推理和研究实验功能。
“Forge”这个名字的灵感来自“Minecraft Forge”。该项目旨在成为 SD WebUI 的 Forge。
重要:分支
- main:具有 A1111 的所有可能的上游更改、新的采样器/调度器/sd 选项等,以及与原始 forge 相比对后端的一些修改(主要是为了同时加载多个检查点)。它可能缺少一些与舒适后端相关的新功能。
- dev_upstream:与 main 分支相同,但使用 Confy 的更新后端。它比 main 快一点。它可能不稳定。它有一些新功能、优化、自定义扩展等。Comfy 扩展可以移植到这里。
- main_new_forge:已弃用。
安装 Forge/reForge
您有 A1111 并且您了解 Git
我在这里建议 2 条路径。似乎经过大量更改后,git reset –hard 引入了一些问题。所以现在,我们将尝试使用 git stash 来代替。 选项 1: 如果您已经拥有 OG A1111 并且您熟悉 git,我强烈建议您在终端中运行以下命令/path/to/stable-diffusion-webui
要返回 OG A1111,只需执行 或 。
git checkout mastergit checkout dev
如果您遇到合并以解决冲突的问题,您可以使用
git merge --abort
选项 2:如果上述说明不起作用,我建议按照下面的说明进行全新安装,然后将文件夹(扩展、模型等)移动到 reForge 文件夹中。
您没有 A111 或进行全新安装。
如果您知道自己在做什么,您可以使用与 SD-WebUI 相同的方法来安装 Forge/reForge。(安装 Git、Python、Git 克隆 reForge 存储库,然后运行 webui-user.bat):
然后运行 webui-user.bat 或 webui-user.sh。
当您想要更新时:
cd stable-diffusion-webui-reForge
git pull
预先完成的包是 WIP。
Forge/reForge 后端
Forge/reForge 后端删除了所有与资源管理相关的 WebUI 代码,并重新设计了所有内容。所有以前的 CMD 标志,如 、 …都已删除。添加这些标志不会导致错误,但它们现在不会执行任何操作。
我们强烈建议 Forge/reForge 用户删除所有 cmd 标志,并让 Forge/reForge 决定如何加载模型。
medvram, lowvram, medvram-sdxl, precision full, no half, no half vae, attention_xxx, upcast unet
在没有任何 cmd 标志的情况下,Forge/reForge 可以运行 4GB vram 的 SDXL 和具有 2GB vram 的 SD1.5。
您可能仍会注意的一些标志:
--always-offload-from-vram
(这个标志会让事情变慢,但风险更小)。此选项将允许 Forge/reForge 始终从 VRAM 中卸载模型。如果您同时使用多个软件并希望 Forge/reForge 使用更少的 VRAM 并将一些 VRAM 提供给其他软件,或者当您使用一些与 Forge/reForge 竞争 vram 的旧扩展时,或者(非常罕见)当您获得 OOM 时,这可能很有用。--cuda-malloc
(这个标志会让事情变得更快,但风险更大)。这将要求 pytorch 将 cudaMallocAsync 用于张量 malloc。在某些分析器上,我可以观察到毫秒级的性能提升,但在我的大多数设备上,真正的加速通常被忽视(每张图像大约或少于 0.1 秒)。这不能设置为默认值,因为许多用户报告了异步 malloc 将使程序崩溃的问题。用户需要自行承担启用此 cmd 标志的风险。--cuda-stream
(这个标志会让事情变得更快,但风险更大)。这将使用 pytorch CUDA 流(GPU 上的一种特殊类型的线程)同时移动模型和计算张量。这几乎可以消除所有模型移动时间,并将具有小 VRAM 的 30XX/40XX 设备(例如,RTX 4050 6GB、RTX 3060 笔记本电脑 6GB 等)上的 SDXL 速度提高约 15% 至 25%。但是,遗憾的是,这不能设置为默认值,因为我观察到在 2060 上出现纯黑色图像(Nan 输出)的可能性更高,而在 1080 和 2060 上出现 OOM 的可能性更高。当分辨率较大时,单个注意力层的计算时间有可能比将整个模型移动到 GPU 的时间长。发生这种情况时,下一个注意力层将 OOM,因为 GPU 充满了整个模型,并且没有剩余空间可用于计算另一个注意力层。大多数开销检测方法都不够强大,在旧设备上不可靠(在我的测试中)。用户需要自行承担启用此 cmd 标志的风险。--pin-shared-memory
(这个标志会让事情变得更快,但风险更大)。仅当与 一起使用时有效。这会在卸载模型时将模块卸载到共享 GPU 内存,而不是系统 RAM。在一些具有小 VRAM 的 30XX/40XX 设备(例如,RTX 4050 6GB、RTX 3060 笔记本电脑 6GB 等)上,我可以观察到 SDXL 的加速显著(至少 20%)。但是,遗憾的是,这不能设置为默认值,因为共享 GPU 内存的 OOM 是一个比普通 GPU 内存 OOM 严重得多的问题。Pytorch 不提供任何强大的方法来卸载或检测共享 GPU 内存。一旦共享 GPU 内存 OOM,整个程序将崩溃(在 GTX 1060/1050/1066 上使用 SDXL 观察到),并且没有动态方法来防止崩溃或从崩溃中恢复。用户需要自行承担启用此 cmd 标志的风险。--cuda-stream
CMD 标志位于 ldm_patches/modules/args_parser.py 和正常 A1111 路径 (modules/cmd_args.py) 上
--disable-xformers
Disables xformers, to use other attentions like SDP.
--attention-split
Use the split cross attention optimization. Ignored when xformers is used.
--attention-quad
Use the sub-quadratic cross attention optimization . Ignored when xformers is used.
--attention-pytorch
Use the new pytorch 2.0 cross attention function.
--disable-attention-upcast
Disable all upcasting of attention. Should be unnecessary except for debugging.
--gpu-device-id
Set the id of the cuda device this instance will use.
(VRAM 相关)
--always-gpu
Store and run everything (text encoders/CLIP models, etc... on the GPU).
--always-high-vram
By default models will be unloaded to CPU memory after being used. This option keeps them in GPU memory.
--always-normal-vram
Used to force normal vram use if lowvram gets automatically enabled.
--always-low-vram
Split the unet in parts to use less vram.
--always-no-vram
When lowvram isn't enough.
--always-cpu
To use the CPU for everything (slow).
(浮点型)
--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/reForge 不建议用户使用任何 cmd 标志,除非你非常确定你真的需要这些标志。
UNet 补丁
支持 FreeU 给有需要的小伙伴:下载UNet 补丁文件,解压后 forge_freeu.py 放在
extensions-builtin/sd_forge_freeu/scripts/ 目录里覆盖(可以先重命名老文件再粘贴)。
![图片[8]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/03224e38b720241111151233.webp)
ControlNet 最终可以由不同的扩展调用。
Stable Video Diffusion 视频补丁
请注意,尽管上述代码看起来像独立的代码,但它们实际上会自动卸载/卸载任何其他模型。例如,下面是我打开 webui,加载 SDXL,生成一个图像,然后转到 SVD,然后生成图像帧。您可以看到 GPU 内存得到了完美管理,SDXL 被移动到 RAM,然后 SVD 被移动到 GPU。
请注意,此管理是完全自动的。这使得编写扩展变得超级简单。
解压后 forge_svd.py 放在
extensions-builtin/sd_forge_freeu/scripts/ 目录里覆盖(可以先重命名老文件再粘贴)。
稳定的视频扩散文件目录:
extensions-builtin/sd_forge_svd/scripts/forge_svd.py
![图片[9]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/69f765422020241111152002-1024x648.webp)
![图片[10]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/51cbbb367320241111152831-1024x974.webp)
![图片[11]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/dda685f35020241111152832.webp)
简单的 ControlNet
下面是一个简单的扩展,它具有完全独立的 ControlNet 传递,永远不会与任何其他扩展冲突:
extensions-builtin/sd_forge_controlnet_example/scripts/sd_forge_controlnet_example.py
请注意,此扩展是隐藏的,因为它仅适用于开发人员。要在 UI 中查看它,请使用 . --show-controlnet-example
此示例中的内存优化是完全自动的。您无需关心内存和推理速度,但如果您愿意,您可能希望缓存对象。
![图片[12]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/c719de483420241111153208-1024x828.webp)
添加预处理器
以下是添加具有完美内存管理的 normalbae 预处理器的完整代码。
您可以使用任意独立的扩展来添加预处理器。
您的预处理器将被所有其他使用 modules_forge.shared.preprocessors
以下文件在 extensions-builtin\forge_preprocessor_normalbae\scripts\preprocessor_normalbae.py
其它新功能(在原始 WebUI 中不可用)
多亏了 Unet Patcher,许多新事物现在成为可能,并在 Forge/reForge 中得到支持,包括 SVD、Z123、掩码 IP 适配器、掩码 controlnet、photomaker 等。
Masked Ip-Adapter
![图片[13]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/4df8dd514b20241111154051.webp)
![图片[14]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/2df999f03a20241111154052.webp)
![图片[15]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/e3c9b4f73320241111154052.webp)
Masked ControlNet
![图片[16]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/6af6b86cca20241111154237.webp)
![图片[17]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/052876ccab20241111154238.webp)
![图片[18]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/dc88abd9ab20241111154238.webp)
Marigold Depth
![图片[19]_reForge:将 a1111 WebUI 整体效能优化提升](https://scdn.qpipi.com/2024/11/63a2306ddc20241111154337.webp)
New Sampler
DDPM
其他采样器可能可用,但在调度器合并后,应该不需要它们。
关于扩展
ControlNet 和 TiledVAE 已集成,您应该卸载这两个扩展:
sd-webui-controlnet
multidiffusion-upscaler-for-automatic1111
请注意,AnimateDiff 正在由 sd-webui-animatediff forge/master 分支和 sd-forge-animatediff 的 continue-revolution 构建(它们是同步的)。(继续原词:Prompt Travel、Inf T2V、ControlNet V2V 已被证明运行良好;Motion Lora、I2I 批次仍在建设中,可能在近期完成)
其他扩展应该可以正常工作,例如:
canvas-zoom
translations/localizations
Dynamic Prompts
Adetailer
Ultimate SD Upscale
Reactor
但是,如果较新的扩展使用 Forge/reForge,则它们的代码可能会短得多。
通常,如果使用 Forge/reForge 的 unet 补丁程序对旧扩展进行返工,则可以删除 80% 的代码,尤其是当它们需要调用 controlnet 时。
💡如有问题或建议,🥳请在社区或评论告诉我们。🎨享受精彩的AI绘画乐趣!| 使用Qpipi读图提示功能,获取图片TAG Prompt提示 | Stable Diffusion AI绘图软件常见问题解答 | AI绘画新人必备工具指南
⭕ 看官老爷觉得本文有用,请点赞、收藏、关注作者。
- 最新
- 最热
只看作者