本文是我总结的步骤,验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了,官方和网上的步骤都是残缺和分散的,加上国内网络速度不理想,所以需要一些额外步骤,之前研究出来了,结果没记,重装系统之后又安装不好了,这次成功安装之后,就写下本文记录,这样一个小时绝对能装好了(网络速度快的话不超过十分钟)。
为什么需要xFormers
如果你想让 Stable Diffusion Web UI 生成图的时候需要的显存/内存以及时间少一些,那么需要 xFormers 来实现这点。xFormers 是 Meta(也就是 Facebook)开发的一个优化框架。
比如我使用的 RTX 3060 12GB,开不开 xFormers 的对比如下:
需要注意,尺寸并不是刚刚好够,而是我测试了一下常见分辨率的结果。因为生成内容如果不是常见分辨率,很多时候生成的图很奇怪。
不开 xFormers | 开 xFormers | |
---|---|---|
512x512速度 | 5.1 s | 4.5 s |
512x512时使用的显存 | 7608MiB | 7606MiB |
1024x1024速度 | 18.1 s | 14.6 s |
1024x1024时使用的显存 | 8866MiB | 8094MiB |
但是安装 xFormers 是其中的难点,你可能会看有人已经提到,xFormers 与 Pytorch 和 CUDA 版本需要对应起来。但是此时你可能依旧有两个问题:
- 对于如何找到版本对应关系,很多人给出的答案是找表。
- 按照一些表里的对应关系安装了,但还是有问题。
经过我的研究,这根本不是你需要考虑的。本文的安装步骤也不需要你记住对应的版本。关于 Python 及其包的解释除了“安装详情”中有展开外,最后的“多说点”部分也会说一些,感兴趣可以看看。
如果你只需要知道步骤,那么可以直接看“安装步骤总结”部分。
安装详情
下面我从头安装演示,其中会说明哪些步骤可能会导致的一些问题,所以希望你从头看,Python 的版本控制是一个挺复杂的问题。
首先是把仓库克隆下来:
git clone git@github.com:AUTOMATIC1111/stable-diffusion-webui.git
仓库如果下不动,那么建议你改 GitHub 的 IP 下或者其他方法下,反正这部分必须是个 Git 仓库。zip 解压还需要更麻烦的处理,不推荐。
然后进入仓库,直接按照官方教程里的方法开始安装:
$ cd stable-diffusion-webui/
$ ./webui.sh
到打印下面这样的内容时,你可能会发现很卡,并且到最后会报错:
............
............
Successfully installed pip-25.0.1
################################################################
Launching launch.py...
Launching launch.py...
################################################################
glibc version is 2.35
Check TCMalloc: libtcmalloc_minimal.so.4
libtcmalloc_minimal.so.4 is linked with libc.so,execute LD_PRELOAD=/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4
Python 3.10.12 (main, Jan 17 2025, 14:35:34) [GCC 11.4.0]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Installing torch and torchvision
Looking in indexes: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple, https://download.pytorch.org/whl/cu121
这时候直接Crtl+C
退出运行(为什么这样后面说)。最后一行的Looking in indexes: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple, https://download.pytorch.org/whl/cu121
是在安装 Pytorch 的时候找的库地址,可以看到第一个时清华源的镜像,第二个是官方地址。由于清华源的 Pytorch 是 CPU 版本的,所以这时候会去官方找,找的时候又因为网络问题,这时候就开始卡和报错了。
这时候先解决一个国内网络导致的问题:Stable Diffusion Web UI 每次启动的时候都会检查版本,这时候它必须通过上面两个库看一下版本对不对,但是由于网络原因必定会卡。所以先来设置个镜像解决这个问题。
阿里云的 Pytorch 镜像支持显卡版本,这时先打开仓库中的webui-user.sh
文件,在下面这部分下面添加一句(这里的cu124
是因为我的 CUDA 版本是 12.4,你按照你的来设置),并且在参数部分添加--xformers
,启动 xFormers(这里我加了个--listen
是因为我实在其他设备上访问了,这样弄了个公共链接):
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
export COMMANDLINE_ARGS="--listen --xformers"
# install command for torch
export TORCH_COMMAND="pip install torch -f https://mirrors.aliyun.com/pytorch-wheels/cu124"
然后再次运行安装命令:
$ ./webui.sh
你会发现这时候开始正常的安装流程了,它会把需要的仓库和模型下载下来,这需要一段时间。
仓库如果下不动,那么建议你改 GitHub 的 IP 下,反正它同样需要是个 Git 仓库。
模型如果下不动,可以想办法下载后挪到对应的位置(复制或者链接),这个是可以的。
可以使用HF-Mirror,方法你看看文档就知道了。
等安装好了之后,会启动 Stable Diffusion Web UI,这时候你在网页生成图会出现下面的内容:
终端显示:
....
....
raise NotImplementedError(msg)
NotImplementedError: No operator found for `memory_efficient_attention_forward` with inputs:
query : shape=(2, 4096, 8, 40) (torch.float16)
key : shape=(2, 4096, 8, 40) (torch.float16)
value : shape=(2, 4096, 8, 40) (torch.float16)
attn_bias : <class 'NoneType'>
p : 0.0
`decoderF` is not supported because:
xFormers wasn't build with CUDA support
attn_bias type is <class 'NoneType'>
operator wasn't built - see `python -m xformers.info` for more info
`flshattF@0.0.0` is not supported because:
xFormers wasn't build with CUDA support
operator wasn't built - see `python -m xformers.info` for more info
`tritonflashattF` is not supported because:
xFormers wasn't build with CUDA support
operator wasn't built - see `python -m xformers.info` for more info
triton is not available
Only work on pre-MLIR triton for now
`cutlassF` is not supported because:
xFormers wasn't build with CUDA support
operator wasn't built - see `python -m xformers.info` for more info
`smallkF` is not supported because:
max(query.shape[-1] != value.shape[-1]) > 32
xFormers wasn't build with CUDA support
dtype=torch.float16 (supported: {torch.float32})
operator wasn't built - see `python -m xformers.info` for more info
unsupported embed per head: 40
这段错误的意思就是 xFormers 与 CUDA 版本不对应,现在我们来解决这个问题。
首先使用Crtl+C
退出运行。这时候你别用提示的python -m xformers.info
命令来检查,用./venv/bin/python -m xformers.info
命令(为什么这样我稍后说),它的输出如下:
$ ./venv/bin/python -m xformers.info
WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. xFormers was built for:
PyTorch 2.1.2+cu121 with CUDA 1201 (you have 2.6.0+cu124)
Python 3.10.13 (you have 3.10.12)
Please reinstall xformers (see https://github.com/facebookresearch/xformers#installing-xformers)
Memory-efficient attention, SwiGLU, sparse and more won't be available.
Set XFORMERS_MORE_DETAILS=1 for more details
.....
.....
你会发现它告诉你了你当前的 CUDA、Pytorch 与 xFormers 需要的情况:它需要PyTorch 2.1.2+cu121
(Python 的那个提示不管它),但其实你也不用记这个版本号,这里只是告诉你如何找到它是因为版本出错的。
现在不要使用任何命令安装,这里需要先解释一下上面的两个“稍后”。
众所周知,Python 每个小版本的不同就可能导致一些重大改变,所以很多项目使用的 Python 版本是强制指定的,这时候就有了很多虚拟环境,比如 Miniconda,但是 Python 自己也有个虚拟环境,这里正是用到了这一点。你这时候查看项目目录,会发现多了一个venv
目录,上面查看 xFormers 信息的时候使用的python
也是这个虚拟环境内的。
注意不要直接用这个目录下的
pip
安装,你会发现会报错。
现在我们需要进入这个虚拟环境:
source ./venv/bin/activate
然后在虚拟环境中(你命令行最前面会出现一个(venv)
),再使用下面的命令安装(同样,你需要根据你的 CUDA 版本修改镜像链接):
pip install -U xformers -f https://mirrors.aliyun.com/pytorch-wheels/cu124
你可以看到,你不需要指定 xformers 的版本就可以安装,因为这里使用的-U
是将xformers
更新成cu124
对应的版本了,前面安装torch
的时候也是用的这个版本,不需要你去查找。
此后,不管你是不是在这个虚拟环境内,会发现它都使用的都是正确的 xFormers,也就是可以正常运行。
如果你想了解如何使用 Stable Diffusion Web UI,可以看我的这篇博客:文本生图的提示词prompt和参数如何设置(基于Animagine XL V3.1)
安装步骤总结
第一步,克隆仓库:
git clone git@github.com:AUTOMATIC1111/stable-diffusion-webui.git
第二步,先让他生成虚拟环境,然后卡住的时候使用Crtl+C退出运行:
./webui.sh
第三步,在webui-user.sh
修改参数和镜像:
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
export COMMANDLINE_ARGS="--listen --xformers"
# install command for torch
export TORCH_COMMAND="pip install torch -f https://mirrors.aliyun.com/pytorch-wheels/cu124"
第四步,再次运行,安装需要的仓库和包:
./webui.sh
第五步,进入虚拟环境:
source ./venv/bin/activate
第六步,在虚拟环境中安装正确版本的 xFormers:
pip install -U xformers -f https://mirrors.aliyun.com/pytorch-wheels/cu124
第六步,运行检查:
./webui.sh
多说点
这里多说点,你的设备上大概率存在多个版本的 Python 以及 PIP。在这种多版本的情况下,你需要知道你在用哪个,要用哪个,谁管谁。
第一,你要确定是否有虚拟环境。这点你可以看命令行前面的内容就知道了,比如 conda 的(base)
以及本文的(venv)
。
第二,你要确定当前默认 Python 版本是哪个。这点你可以使用Python --version
查看。
第三,你的默认 PIP 和 Python 不一定是一对的,这就导致你使用pip
安装的包在python
中无法使用(pip
就是默认的 PIP,python
是默认的 Python)。这个使用,需要你使用下面的样式安装:
python -m pip install <包>
这时候安装的包就在默认的python
中。同样的道理,你可以把python
改成某个 Python 版本的路径。
第四,善用 PIP 的-U
选项。虽然-U
选项是更新的意思,但是由于它是查找某些包管理库来看最新版本的,所以它也可以“回退”,就像本文使用的那样。此外,你在强制版本的使用,也可以使用这个选项,否则由于强制版本小于当前版本,导致没有任何操作。
希望能帮到有需要的人~