Stable Diffusion WebUI Forge

Forge一个基于 Stable Diffusion WebUI(基于 Gradio)之上的平台,旨在让开发更加便捷,优化资源管理,加速推理过程,并探索实验性功能。

“Forge”这个名字的灵感来自《Minecraft Forge》。该项目的目标是成为 SD WebUI 的 Forge。

Forge 当前基于 SD-WebUI 1.10.1 版本的这个提交(commit)。由于原版 SD-WebUI 目前更新较少,Forge 每 90 天或在有重要修复时与原版 WebUI 同步。

项目原地址:

#Stable Diffusion WebUI Forge - Github


一、项目环境:

在以下环境中搭建该项目:

项目环境具体信息
操作系统Ubuntu 20.04.6 LTS
Docker 环境已集成的 Conda
CPUAMD EPYC 7542 32-Core Processor
核心数64 Core / 32MB L3 Cache
内存 (RAM)482G
显卡8 x A800 (80G)
Python 默认版本3.11

二、用户与权限设立

我们将创建一个名为 epors 的用户账户,并为其创建一个名为 sdgroup 的用户组。同时,我们将把该用户和用户组添加到 sudo 权限中,以便能够执行需要管理员权限的操作。

创建用户组

首先,使用以下命令创建一个名为 sdgroup 的用户组:

sudo groupadd sdgroup

创建用户

接下来,使用以下命令创建名为 epors 的用户,并将其添加到 sdgroup 用户组中:

sudo useradd -m -G sdgroup epors
  • -m 选项用于创建用户的主目录。
  • -G 选项用于将用户添加到指定的用户组。

设置用户密码

sudo passwd epors

根据提示输入并确认新密码。

添加用户sudo权限

最后,将 epors 用户添加到 sudo 权限中,以便能够执行具有管理员权限的命令:

sudo usermod -aG sudo epors

三、获取 Stable Diffusion Forge

在本章节中,我们将从 GitHub 上克隆 Stable Diffusion Forge 项目到本地,并设置开发环境。

切换用户和进入个人文件夹

首先,切换到 epors 用户并进入该用户的个人文件夹:

su - epors
cd ~/

克隆项目

接下来,使用以下命令克隆 Stable Diffusion Forge 项目:

git clone https://github.com/lllyasviel/stable-diffusion-webui-forge.git

进入项目目录

克隆完成后,进入项目目录:

cd stable-diffusion-webui-forge

四、创建虚拟环境

Conda:

如果你和我一样使用的是 Conda 环境,请使用以下命令创建名为 forge 的虚拟环境,并激活它:

conda create -n forge python=3.11
conda activate forge

Python:

如果你不是使用 Conda,可以使用以下命令创建虚拟环境:
确保你的Python为3.11版本

python -m venv venv
source venv/bin/activate

安装依赖

然后,通过以下命令安装项目所需的依赖:

pip install -r requirements_versions.txt

五、启动项目

如果你有基础大模型.checkpoint文件,启动项目之前强烈建议将基础模型放入指定文件夹内,避免启动时下载模型花费时间。

models目录详解作用

models/
├── Codeformer               # 用于图像修复的 Codeformer 模型
├── ControlNetPreprocessor    # 用于控制网络的预处理器
├── GFPGAN                   # 用于图像修复的 GFPGAN 模型
├── Stable-diffusion         # 存放稳定扩散模型文件
├── VAE-approx               # 近似变分自编码器(VAE)模型
├── deepbooru                # Deepbooru 标签生成器相关文件
├── hypernetworks            # 存放超网络模型
├── svd                      # 奇异值分解(SVD)相关文件
├── z123                     # 其他未分类文件或模型
├── ControlNet               # 存放控制网络模型
├── ESRGAN                   # 超分辨率图像生成的 ESRGAN 模型
├── Lora                     # 存放 Lora 网络文件
└── VAE                      # 存放变分自编码器(VAE)模型
  • 大模型一般放在 Stable-diffusion
  • LORA项目文件放在 Lora
  • VAE文件放在 VAE

最后,使用以下命令启动项目,并等待 Forge 自动配置:

一般来说可以直接尝试启动

python launch.py --listen --port 29090

至此,你可以通过浏览器访问http://localhost:29090 来运行 Stable Diffusion Forge。

个人参数与GPU选择:

假设你和我的环境一样拥有许多GPU,但是只需要用指定的某个GPU运行,可以在运行前输入一段环境变量设置:

选择第0号GPU

export CUDA_VISIBLE_DEVICES=0

这样启动时会以nvidia-smi的第0号GPU运行

个人使用的启动参数:

python launch.py --listen --port 29090 --api --xformers --enable-insecure-extension-access --skip-torch-cuda-test --cuda-stream --opt-sdp-attention --force-enable-xformers --no-half

因为服务器性能很强劲,这里最大化利用资源的参数启动。

参数详解:

  • --listen

    • 启动服务器以监听来自客户端的请求。
  • --port 29090

    • 指定服务器监听的端口号,这里设置为 29090。你可以通过浏览器访问 http://localhost:29090 来访问该服务。
  • --api

    • 启用 API 接口,允许通过 API 进行模型推理和其他操作。
  • --xformers

    • 启用 Xformers 库,这是一个用于优化模型的高效实现,通常可以提高运行性能和降低内存使用。
  • --enable-insecure-extension-access

    • 允许访问不安全的扩展(extensions)。通常,这个选项是在使用一些自定义或未经过认证的扩展时需要启用的。
  • --skip-torch-cuda-test

    • 跳过对 CUDA 的测试,适用于在某些环境中希望避免 CUDA 兼容性检查的情况。这可以加快启动过程,但需要确保 CUDA 安装正确。
  • --cuda-stream

    • 启用 CUDA 流,以实现更高效的计算和资源管理。使用流可以同时执行多个操作,从而提高性能。
  • --opt-sdp-attention

    • 启用优化的 SDP(Scaled Dot Product)注意力机制,通常用于提升模型的性能和计算效率。
  • --force-enable-xformers

    • 强制启用 Xformers,即使在某些情况下它可能未被检测到或支持,这可以确保其始终被使用。
  • --no-half

    • 禁用半精度浮点运算(FP16),通常用于提高数值稳定性和模型的兼容性,但会增加内存使用和计算负担。

六、其它启动参数:

配置类参数:

参数名作用
-h, --help显示帮助信息并退出
--exit安装后立即终止
--data-dir指定存储所有用户数据的基本路径,默认为"./"
--config用于构建模型的配置文件路径,默认为 "configs/stable-diffusion/v1-inference.yaml"
--ckpt稳定扩散模型的检查点路径;如果指定,该检查点将被添加到检查点列表并加载
--ckpt-dir稳定扩散检查点的目录路径
--no-download-sd-model即使没有找到模型,也不下载 SD1.5 模型
--vae-dir变分自编码器模型的路径
--gfpgan-dirGFPGAN 目录
--gfpgan-modelGFPGAN 模型文件名
--codeformer-models-pathCodeformer 模型文件的目录路径
--gfpgan-models-pathGFPGAN 模型文件的目录路径
--esrgan-models-pathESRGAN 模型文件的目录路径
--bsrgan-models-pathBSRGAN 模型文件的目录路径
--realesrgan-models-pathRealESRGAN 模型文件的目录路径
--scunet-models-pathScuNET 模型文件的目录路径
--swinir-models-pathSwinIR 和 SwinIR v2 模型文件的目录路径
--ldsr-models-pathLDSR 模型文件的目录路径
--lora-dirLora 网络的目录路径
--clip-models-pathCLIP 模型文件的目录路径
--embeddings-dir用于文本逆向的嵌入目录,默认为 "embeddings"
--textual-inversion-templates-dir文本逆向模板的目录
--hypernetwork-dir超网络目录
--localizations-dir本地化目录
--styles-file用于样式的文件名,默认为 "styles.csv"
--ui-config-file用于 UI 配置的文件名,默认为 "ui-config.json"
--no-progressbar-hiding不隐藏 Gradio UI 中的进度条(默认隐藏)
--max-batch-countUI 的最大批次计数值,默认为 16
--ui-settings-file用于 UI 设置的文件名,默认为 "config.json"
--allow-code允许从 Web UI 执行自定义脚本
--share使用 Gradio 的 share=True,使 UI 可通过其网站访问
--listen使用 0.0.0.0 作为服务器名称启动 Gradio
--port使用给定的服务器端口启动 Gradio
--hide-ui-dir-config从 Web UI 中隐藏目录配置
--freeze-settings禁用编辑设置
--enable-insecure-extension-access无论其他选项如何,都启用扩展选项卡
--gradio-debug使用 --debug 选项启动 Gradio
--gradio-auth设置 Gradio 身份验证,如 "username:password"
--gradio-auth-path设置 Gradio 身份验证文件路径
--disable-console-progressbars不在控制台输出进度条
--enable-console-prompts在生成时在控制台打印提示
--api使用 API 启动 Web UI
--api-auth设置 API 身份验证,如 "username:password"
--api-log启用所有 API 请求的日志记录
--nowebui仅启动 API,不启动 UI
--ui-debug-mode不加载模型以快速启动 UI
--device-id选择要使用的默认 CUDA 设备
--administrator管理员权限
--cors-allow-origins以逗号分隔的列表形式允许的 CORS 来源
--cors-allow-origins-regex以单个正则表达式的形式允许的 CORS 来源
--tls-keyfile部分启用 TLS,需要 --tls-certfile 才能完全生效
--tls-certfile部分启用 TLS,需要 --tls-keyfile 才能完全生效
--server-name设置服务器主机名
--gradio-queue使用 Gradio 队列;实验性选项
--skip-version-check不检查 torch 和 xformers 的版本
--no-hashing禁用检查点的 sha256 哈希,以提高加载性能

性能类参数:

参数名作用
--xformers启用 xformers 以加速跨注意层
--reinstall-xformers强制重新安装 xformers,升级后使用,但升级后请移除,否则将一直重装 xformers
--force-enable-xformers强制启用 xformers 的跨注意层;如果运行失败,请勿提交错误报告
--opt-split-attention强制启用 Doggettx 的跨注意层优化
--opt-split-attention-invokeai强制启用 InvokeAI 的跨注意层优化
--opt-split-attention-v1启用旧版本的分割注意力优化,该版本不会消耗所有可用的显存
--opt-sub-quad-attention启用内存高效的子二次交叉注意力层优化
--sub-quad-q-chunk-size子二次交叉注意力层优化使用的查询块大小
--sub-quad-kv-chunk-size子二次交叉注意力层优化使用的 kv 块大小
--sub-quad-chunk-threshold子二次交叉注意力层优化使用的显存使用率阈值
--opt-channelslast为 4D 张量启用备选布局,仅在具有 Tensor 核心的 Nvidia 显卡(16xx 及更高版本)上可能导致更快的推理
--disable-opt-split-attention强制禁用跨注意层优化
--disable-nan-check不检查生成的图像/潜在空间是否包含 nan 值
--use-cpu对指定模块使用 CPU 作为 torch 设备
--no-half不将模型切换为 16 位浮点数
--precision以此精度进行评估
--no-half-vae不将 VAE 模型切换为 16 位浮点数
--upcast-sampling向上采样。与 --no-half 无效
--medvram启用稳定扩散模型优化,牺牲一点速度以减少显存使用
--lowvram启用稳定扩散模型优化,牺牲大量速度以极低的显存使用
--lowram将稳定扩散检查点权重加载到显存而非 RAM
--always-batch-cond-uncond禁用使用 --medvram 或 --lowvram 时为节省内存而启用的条件/无条件批处理

通用类参数

参数名作用
--autolaunch在启动时使用系统的默认浏览器打开 WebUI URL
--theme在 WebUI 中使用指定的主题(“light”或“dark”)
--use-textbox-seed在 UI 中使用文本框输入种子(没有上/下箭头,但可以输入长种子)
--disable-safe-unpickle禁用对 PyTorch 模型的恶意代码检查
--ngrok用于 ngrok 的自动令牌,是 gradio --share 的替代方案
--ngrok-regionngrok 应该在其中启动的区域
最后修改:2024 年 09 月 26 日
喜欢就请我喝一杯奶茶吧~