当前位置: 首页 > news >正文

如何正确安装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选项是更新的意思,但是由于它是查找某些包管理库来看最新版本的,所以它也可以“回退”,就像本文使用的那样。此外,你在强制版本的使用,也可以使用这个选项,否则由于强制版本小于当前版本,导致没有任何操作。

希望能帮到有需要的人~

相关文章:

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

本文是我总结的步骤&#xff0c;验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了&#xff0c;官方和网上的步骤都是残缺和分散的&#xff0c;加上国内网络速度不理想&#xff0c;所以需要一些额外步骤&#xff0c;之前研究出…...

机器学习_14 随机森林知识点总结

随机森林&#xff08;Random Forest&#xff09;是一种强大的集成学习算法&#xff0c;广泛应用于分类和回归任务。它通过构建多棵决策树并综合它们的预测结果&#xff0c;显著提高了模型的稳定性和准确性。今天&#xff0c;我们就来深入探讨随机森林的原理、实现和应用。 一、…...

机器学习基本篇

文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...

vue2.x与vue3.x生命周期的比较

vue2.x 生命周期图示&#xff1a; new Vue() | v Init Events & Lifecycle | v beforeCreate | v created | v beforeMount | v mounted | v beforeUpdate (when data changes) | v updated | v beforeDestroy (when vm.…...

接口测试及常用接口测试工具(Postman/Jmeter)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xf…...

[论文阅读] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目录 一、前言二、主要贡献三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大学 & OPPO研究所的张磊教授&#xff0c;也是图像超分ISR的一个大牛了。 论文如下 SeeSR: Towards Semantics-Aware Rea…...

Python实战进阶 No1: RESTful API - 基于Flask的实例说明

Python实战进阶 No1: RESTful API - 基于Flask的实例说明 RESTful API 是一种基于 REST&#xff08;Representational State Transfer&#xff09; 架构风格的 Web 服务接口设计规范。它使用 HTTP 协议的标准方法&#xff08;如 GET、POST、PUT、DELETE 等&#xff09;来操作资…...

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器&#xff08;示例&#xff09; 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…...

OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression

OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类&#xff0c;用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法&#xff0c;特别适合二分类任务。…...

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...

批处理效率提升技巧

在数据量大的后端应用程序中进行批处理(batch processing)是非常常见的需求,尤其是在需要处理大量数据或进行周期性任务时。批处理的目的是通过将数据分批次处理来提高效率,减少资源消耗,并确保应用程序的可伸缩性。以下是一些在这种场景下进行批处理的方法和实践: 一、…...

Kubernetes知识点总结(十)

什么是 K8s 的 namespace&#xff1f; 在 K8s 中&#xff0c;Namespace&#xff08;名字空间&#xff09;提供了一种机制&#xff0c;将同一集群中的资源划分为相互隔离的组&#xff0c; 是在多个用户之间划分集群资源的一种方法。 名字空间作用域仅针对带有名字空间的对…...

安全防御综合练习2 nat+智能选路

一、拓扑 二、需求 1、在企业出口防火墙上&#xff0c;设置一个“虚拟DNS服务器”&#xff0c;将内网用户的DNS设定为这个虚拟DNS服务器的地址 2、当内网用户发送DNS请求时&#xff0c;虚拟DNS服务器作为中间人&#xff0c;根据预配置算法&#xff0c;将DNS请求报文发送给各个…...

Flutter 中的数据跨层传递方案

在 Flutter 中&#xff0c;数据跨层传递&#xff08;从父组件向子组件传递数据&#xff0c;或从子组件向父组件传递&#xff09;有多种方案&#xff0c;主要包括以下几种&#xff1a; 1. 直接参数传递&#xff08;Constructor 参数&#xff09; 适用场景&#xff1a; 父组件向…...

代码随想录D50-51 图论 Python

理论基础 理论基础部分依然沿用代码随想录教程中的介绍&#xff1a; 图的种类 度 连通性 连通性用于表示图中节点的连通情况。 如果有节点不能到达其他节点&#xff0c;则为非连通图&#xff0c;想象将多个水分子表示为图&#xff0c;不考虑非键作用&#xff0c;这张图就不是…...

MyBatis进阶

日志的使用 我们在使用MyBatis的时候, 其实MyBatis框架会打印一些必要的日志信息, 在开发阶段这些日志信息对我们分析问题,理解代码的执行是特别有帮助的; 包括项目上线之后,我们也可以收集项目的错误日志到文件里面去; 所以我们采用专门的日志系统来处理. 步骤 导入坐标拷贝…...

容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案

一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka&#xff08;注意修改zookeeper&#xff0c;kafka地址&#xff09; docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …...

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…...

LeetCode-633. 平方数之和

1、题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a2 b2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…...

前端面试技巧与实践

在当今快速发展的互联网行业中&#xff0c;前端开发已经成为了一个至关重要的角色。随着技术的不断进步和用户需求的日益复杂&#xff0c;前端工程师的职责不再仅仅是实现页面的布局和交互&#xff0c;而是需要具备全方位的技术能力和工程思维。根据2023年Stack Overflow的开发…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...