Stable Diffusion WebUI 与 ComfyUI 安装
暑假都折腾着玩了一下,还差点把自己的小P104服务器开爆了。稍稍记录一下环境折腾过程。
背景知识
Stable Diffusion WebUI (以下简称sd-webui) 和 ComfyUI 都是调用模型进行AI图片视频生成的前端,并不直接提供具体模型,原则上这两个只需其一即可完成创作。
至于优劣,原始A1111版sd-webui需要插件才能使用诸如LyCORIS之类更多的模型,在视频生产等工作上也没那么方便。ComfyUI 工作流上手则需要更多一点基础知识(我觉得其实还好)。
Stable Diffusion WebUI
系统依赖
作为一个AI任务,基础的CUDA组件自然是必不可少的,不再赘述。
在容器Debian中,可能还需要额外安装一些组件:
1 | sudo apt install bc google-perftools libgl1 libglib2.0-0 --no-install-recommends |
若是还有缺失的组件,莫慌,可以去https://packages.debian.org,在下面的Search the contents of packages中直接搜索缺失的库文件,安装对应的包即可,基本上不需要手动编译额外库文件。
设置网络
在安装过程中,需要加载一些网络资源,需要首先设置网络访问。
最简单的方法是设置一些PROXY,不过需要注意,要将localhost
排除在外,否则webui.sh
执行中会报错。
1 | export NO_PROXY="localhost, 127.0.0.1, ::1" |
Python环境准备
如果没有额外需求,将一切包袱丢给webui.sh
,任其自动创建所需的虚拟环境,倒也是一种懒人方法。
不过,如果期望自定义配置,那额外折腾的部分也不见得麻烦。
默认情况下,sd-webui期望的Python版本是3.10
,对于比较新的系统,请考虑使用Conda等方法创建虚拟环境,并指定Python版本号。
虚拟环境激活后,sd-webui就会使用检测到的Python虚拟环境。
使用uv管理环境
更激进一点,如果使用uv
作为pip
的替代品,情况又略有不同,因为sd-webui直接通过调用pip
模块安装所需组件,但uv
创建的虚拟环境并没有提供pip
模块。
幸好,安装过程也不麻烦,只需要不断重复运行webui.sh
,把报错的pip install
命令复制出来,直接改成uv pip install
并执行即可。
需要注意,uv pip install
没有--prefer-binary
,似乎直接省略也无伤大雅。
克隆环境
1 | git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui |
xformers
如果使用的是uv
,那其实很好办,uv
能自动处理xformers
和torch
的兼容关系,只需要在安装torch
的时候一并安装即可。
1 | uv pip install "numpy<2" torch==2.1.2 torchvision==0.16.2 xformers --extra-index-url https://download.pytorch.org/whl/cu121 |
如果使用的是pip
,在无法自动匹配正确版本,或是pip
动了卸载torch的心时,则需要亲自去Releases ·
facebookresearch/xformers ·
GitHub翻一下时间线,寻找和环境中torch版本匹配的小版本,然后指定版本号手动安装。
模型文件
把模型文件放到对应的models/Stable-diffusion/
,
models/VAE/
,
还有models/Lora/
文件夹下,就可以了。
一些插件
1 | git clone "https://github.com/Physton/sd-webui-prompt-all-in-one.git" extensions/sd-webui-prompt-all-in-one |
启动!
1 | ./webui.sh |
ComfyUI
克隆环境
1 | git clone https://github.com/comfyanonymous/ComfyUI.git |
安装虚拟环境
如果使用的是uv
,那其实很好办,uv
能自动处理xformers
和torch
的兼容关系,只需要在安装torch
的时候一并安装即可。
和 A1111 的 sd-webui
不同,ComfyUI所需的Python依赖项均已提供在requirements.txt
中。
不过,默认的requirements.txt
没有定义torch
的版本,也没有定义xformers
依赖项(xformers
能大幅减少显存消耗)。所以,我们可以稍微修改一下。
ComfyUI对任意新版torch
的兼容性都比较好,所以我们可以去pytorch官网,找到自己适合的torch
版本,将版本信息写到requirements.txt
中。同时,加上xformers
依赖项。
1 | -torch |
其他就都不用管了。直接创建一个虚拟环境,然后开装!
1 | uv venv venv -p 3.12 |
模型文件复用
装完环境后,如果原本安装有sd-webui,还有一大堆模型文件,不想将模型文件再复制一份?可以直接将ComfyUI
目录下的extra_model_paths.yaml.example
复制一份,命名为extra_model_paths.yaml
,然后按照里面的提示进行编辑,就可以指示ComfyUI前往sd-webui的目录搜索加载Stable
Diffusion模型检查点了。
Nginx反向代理
如果在使用Nginx反向代理ComfyUI,并在保存工作流时遇到报错:
Error storing user data file 'workflows/xxx': 405
,请检查Nginx配置文件,看proxy_pass
末尾是否存在斜杠。
如果存在斜杠,请将其删除。
1 | location / { |
参考: [Bug]: Save workflow 405(Method Not Allowed) When using Nginx reverse
提示词插件
手写提示词太痛苦,尤其是习惯了sd-webui的sd-webui-prompt-all-in-one插件后。
幸好,ComfyUI也有类似的插件,叫WeiLin-Comfyui-Tools。只需要git clone
进ComfyUI/custom_nodes
,然后根据该插件的requirements.txt
补齐Python依赖,在ComfyUI中就可以使用类似的Prompt编辑器了。
当然,要是不喜欢,也可以用原来all-in-one
插件的独立版本sd-webui-prompt-all-in-one-app,可以作为一个独立的Web应用运行。