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 |
CPU | AMD EPYC 7542 32-Core Processor |
核心数 | 64 Core / 32MB L3 Cache |
内存 (RAM) | 2048G |
显卡 | 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
来访问该服务。
- 指定服务器监听的端口号,这里设置为 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-dir | GFPGAN 目录 |
--gfpgan-model | GFPGAN 模型文件名 |
--codeformer-models-path | Codeformer 模型文件的目录路径 |
--gfpgan-models-path | GFPGAN 模型文件的目录路径 |
--esrgan-models-path | ESRGAN 模型文件的目录路径 |
--bsrgan-models-path | BSRGAN 模型文件的目录路径 |
--realesrgan-models-path | RealESRGAN 模型文件的目录路径 |
--scunet-models-path | ScuNET 模型文件的目录路径 |
--swinir-models-path | SwinIR 和 SwinIR v2 模型文件的目录路径 |
--ldsr-models-path | LDSR 模型文件的目录路径 |
--lora-dir | Lora 网络的目录路径 |
--clip-models-path | CLIP 模型文件的目录路径 |
--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-count | UI 的最大批次计数值,默认为 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-region | ngrok 应该在其中启动的区域 |