如何正确安装Stable Diffusion Web UI以及对应的xFormers

本文是我总结的步骤,验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了,官方和网上的步骤都是残缺和分散的,加上国内网络速度不理想,所以需要一些额外步骤,之前研究出来了,结果没记,重装系统之后又安装不好了,这次成功安装之后,就写下本文记录,这样一个小时绝对能装好了(网络速度快的话不超过十分钟)。

为什么需要xFormers

如果你想让 Stable Diffusion Web UI 生成图的时候需要的显存/内存以及时间少一些,那么需要 xFormers 来实现这点。xFormers 是 Meta(也就是 Facebook)开发的一个优化框架。

比如我使用的 RTX 3060 12GB,开不开 xFormers 的对比如下:

需要注意,尺寸并不是刚刚好够,而是我测试了一下常见分辨率的结果。因为生成内容如果不是常见分辨率,很多时候生成的图很奇怪。

不开 xFormers开 xFormers
512x512速度5.1 s4.5 s
512x512时使用的显存7608MiB7606MiB
1024x1024速度18.1 s14.6 s
1024x1024时使用的显存8866MiB8094MiB

但是安装 xFormers 是其中的难点,你可能会看有人已经提到,xFormers 与 Pytorch 和 CUDA 版本需要对应起来。但是此时你可能依旧有两个问题:

  1. 对于如何找到版本对应关系,很多人给出的答案是找表。
  2. 按照一些表里的对应关系安装了,但还是有问题。

经过我的研究,这根本不是你需要考虑的。本文的安装步骤也不需要你记住对应的版本。关于 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 supportattn_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 supportoperator wasn't built - see `python -m xformers.info` for more info`tritonflashattF` is not supported because:xFormers wasn't build with CUDA supportoperator wasn't built - see `python -m xformers.info` for more infotriton is not availableOnly work on pre-MLIR triton for now`cutlassF` is not supported because:xFormers wasn't build with CUDA supportoperator wasn't built - see `python -m xformers.info` for more info`smallkF` is not supported because:max(query.shape[-1] != value.shape[-1]) > 32xFormers wasn't build with CUDA supportdtype=torch.float16 (supported: {torch.float32})operator wasn't built - see `python -m xformers.info` for more infounsupported 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选项是更新的意思,但是由于它是查找某些包管理库来看最新版本的,所以它也可以“回退”,就像本文使用的那样。此外,你在强制版本的使用,也可以使用这个选项,否则由于强制版本小于当前版本,导致没有任何操作。

希望能帮到有需要的人~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17614.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型WebUI:Gradio全解12——使用Agents和Tools智能代理工具构建UI(1)

大模型WebUI&#xff1a;Gradio全解12——使用Agents和Tools智能代理工具构建UI&#xff08;1&#xff09; 前言本篇摘要12. 使用Agents和Tools智能代理工具构建UI12.1 transformers.agents原理及示例12.1.1 代理概念、类型和构建1. 代理概念2. 代理类型3. 如何构建代理&#x…

图像变换:了解透视变换原理及OpenCV实现

图像透视变换是一种将图像从一个视角转换到另一个视角的技术&#xff0c;通常用于校正拍摄角度引起的变形&#xff0c;或者模拟不同视角下的场景。 一、图像透视变换的原理 定义 透视变换&#xff08;Perspective Transformation&#xff09;是将一个平面内的点映射到另一个平…

超纯水设备的智能化控制系统为用户带来安全简便的操作体验

随着信息技术的发展&#xff0c;智能化已经成为工业装备的重要发展方向之一。超纯水设备在这方面也走在了前列&#xff0c;配备了高性能的PLC控制系统及人机交互界面&#xff0c;实现了全方位的智能监控和自动化操作。本文将重点介绍该设备的智能化控制系统&#xff0c;探讨它如…

Cursor AI开发微信小程序教程

1. 准备工作 在开始开发之前&#xff0c;需要完成以下准备工作&#xff1a; 1.1 安装微信开发者工具 前往微信开发者工具官网下载并安装适合操作系统的开发者工具。注册微信小程序账号&#xff0c;登录微信公众平台&#xff08;https://mp.weixin.qq.com&#xff09;&#…

数仓:核心概念,数仓系统(ETL,数仓分层,数仓建模),数仓建模方法(星型模型,雪花模型,星座模型)和步骤

数仓建模的核心概念 事实表&#xff08;Fact Table&#xff09;&#xff1a; 存储业务过程的度量值&#xff08;如销售额、订单数量等&#xff09;。 通常包含外键&#xff0c;用于关联维度表。 维度表&#xff08;Dimension Table&#xff09;&#xff1a; 存储描述性信息&…

jsp页面跳转失败

今天解决一下jsp页面跳转失败的问题 在JavaWeb的学习过程中&#xff0c;编写了这样一段代码&#xff1a; <html> <body> <h2>Hello World!</h2><%--这里提交的路径&#xff0c;需要寻找到项目的路径--%> <%--${pageContext.request.context…

Linux Mem -- Where the mte store and check in the real hardware platform

目录 1 前言 2 MTE tag分类 3 Address tag 4 Memory tag 5 Tag Check 6 Cortex-A710 和 CI-700 系统示例&#xff1a; 1 前言 ARM的MTE允许分配、设置、比较一个 4bit的allocation tag 为16字节粒度的物理地址。当对MTE有一定了解后&#xff0c;应该会产生如下疑问&#…

Day1 25/2/14 FRI

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p3&v…

Windows环境管理多个node版本

前言 在实际工作中&#xff0c;如果我们基于Windows系统开发&#xff0c;同时需要维护老项目&#xff0c;又要开发新项目&#xff0c;且不同项目依赖的node版本又不同时&#xff0c;那么就需要根据项目切换不同的版本。本文使用Node Version Manager&#xff08;nvm&#xff0…

前端包管理器的发展以及Npm、Yarn和Pnpm对比

在现代前端开发中&#xff0c;包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展&#xff0c;开发者经历了从 npm 一统天下到 Yarn 挑战格局&#xff0c;再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器&#xff08;npm/Yarn/pnpm&#xff09;进行全方位…

leetcode 2915. 和为目标值的最长子序列的长度

题目如下 数据范围 本题就是典型的背包问题target就是容量&#xff0c;nums[i]就是第i个物品的重量。其实就是选最多的物品使得背包刚好装满。 令f(i,j)为当考虑到i - 1物品时刚好装到j重量的物品数。 当j > nums[j]时 有f(i,j) max(f(i - 1,j - nums[i - 1]) 1,f(i -…

ASP.NET Core 面试宝典【刷题系列】

文章目录 引言1、什么是 dot net core 的 startup class?2、什么是中间件?3、application builder 的 use 和 run 方法有什么区别?4、dot net core 管道里面的map拓展有什么作用?5、dot net core 里面的路径是如何处理的?6、如何在 dot net core 中激活 session 功能?7、…

BFS 走迷宫

#include<bits/stdc.h> using namespace std; int a[100][100],v[100][100];//访问数组 n,m<100 struct point {int x;int y;int step; }; queue<point> r;//申请队列 int dx[4]{0,1,0,-1};//四个方向 右下左上 int dy[4]{1,0,-1,0}; int main() { /* 5 4 1 …

给压缩文件加密码的5种方法(win/mac/手机/网页端)

把文件加密压缩&#xff0c;一方面能有效保护个人隐私与敏感信息&#xff0c;防止数据在传输或存储过程中被窃取、篡改。另一方面&#xff0c;压缩文件可减少存储空间占用&#xff0c;提升传输速度&#xff0c;方便数据的存储与分享。以下为你介绍5种常见的加密压缩方法。 一、…

IoTDB 导入数据时提示内存不足如何处理

问题现象 IoTDB 导入数据时提示内存不足&#xff0c;该如何处理&#xff1f; 解决方案 数据导入脚本会在触发内存不足的时候主动进行重试。当遇到此问题时&#xff0c;用户不用做任何操作&#xff0c;脚本也可以正确进行处理。如果想从根源减少此类提示&#xff0c;可以按照下…

自有证书的rancher集群使用rke部署k8s集群异常

rancher使用自签域名&#xff0c;或者商业证书容易踩到的坑。 最开始的报错&#xff1a; docker logs kubelet‘s id E0214 13:04:14.590268 9614 pod_workers.go:1300] "Error syncing pod, skipping" err"failed to \"StartContainer\" for …

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网&#xff0c;当时花了几天时间查阅相关博客总算是做出来了&#xff0c;在验收后一直没管&#xff0c;在寒假想起来了简单分享一下&#xff0c;希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…

【漫话机器学习系列】091.置信区间(Confidence Intervals)

置信区间&#xff08;Confidence Intervals&#xff09;详解 1. 引言 在统计学和数据分析中&#xff0c;我们通常希望通过样本数据来估计总体参数。然而&#xff0c;由于抽样的随机性&#xff0c;我们不可能得到精确的总体参数&#xff0c;而只能通过估计值&#xff08;如均值…

朝天椒USB服务器:解决加密狗远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决加密狗在虚拟机、云主机甚至异地的远程连接问题。 在企业数字化转型的浪潮中&#xff0c;加密狗作为防止软件盗版的重要手段&#xff0c;广泛应用于各类软件授权场景。然而&#xff0c;随着企业超融合进程不断加…

Linux 配置 MySQL 定时自动备份到另一台服务器

Linux 配置 MySQL 定时自动备份到另一台服务器 前言1、配置服务器通信1.1&#xff1a;配置过程 2、编写自动备份sh脚本文件3&#xff1a;设置定时自动执行 前言 此方案可使一台服务器上的 MySQL 中的所有数据库每天 0 点自动转储为 .sql 文件&#xff0c;然后将文件同步到另一…