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

希望能帮到有需要的人~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS学习

1.ROS工作空间 存放项目开发相关文件的文件夹&#xff1b; src:代码空间&#xff08;Source Space&#xff09;install:安装空间&#xff08;Install Space&#xff09;build:编译空间&#xff08;Build Space&#xff09;log:日志空间&#xff08;Log Space&#xff09; 2.c…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …

非线性动力学笔C5.2线性系统的分类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言C5 线性系统C5.2 线性系统的分类例5.2.1例5.2.2例5.2.3例5.2.4例5.2.5不动点的分类例5.2.6例5.2.7 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&a…

某生产制造企业积分制考核信息化项目成功案例纪实

某生产制造企业积分制考核信息化项目成功案例纪实 ——打破“大锅饭”“平均主义”问题&#xff0c;持续激励员工&#xff0c;调动员工积极性 【客户行业】生产制造行业 【问题类型】薪酬体系优化 【客户背景】 某大型钢铁集团公司是一个集科工贸、产供销于一体的国有生产…

github用户名密码登陆失效了

问题&#xff1a; git push突然推代码需要登陆&#xff0c;但是用户名和密码正确输入后&#xff0c;却提示403 git push# Username for https://github.com: **** #Password for https://gyp-programmergithub.com: #remote: Permission to gyp-programmer/my-app.git denie…

网上购物|基于SprinBoot+vue的网上购物系统(源码+数据库+文档)

网上购物系统目录 基于SprinBootvue的网上购物 一、前言 二、系统设计 三、系统功能设计 5.1 管理员功能实现 5.1.1 论坛管理 5.1.2 商品管理 5.1.3 商品评价管理 5.1.4 商品订单管理 5.2 用户功能实现 5.2.1 商品信息 5.2.2 确认下单 5.2.3 商品订单 5.2.4 购物…

python语言进阶之函数

目录 前言 函数的创建和调用 函数创建 调用函数 参数传递 形式参数和实际参数 位置参数 数量必须与定义时一致 位置必须与定义时一致 关键字参数 为参数设置默认值 可变参数 **parameter 返回值 变量的作用域 局部变量 全局变量 匿名函数 前言 提到函数&…

STM32 如何使用DMA和获取ADC

目录 背景 ‌摇杆的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一种计算机技术&#xff0c;允许某些硬件子系统直接访问系统内存&#xff0c;而不需要中央处理器&#xff08;CPU&#xff09;的介入&#xff0c;从而减轻CPU的负担。我们可以通过DMA来从外设&#xf…

在linux系统中安装Anaconda,并使用conda

系统 : ubuntu20.04 显卡&#xff1a;NVIDIA GTX1650 目录 安装Anaconda第一步&#xff1a;下载合适版本的Anconda1. 查看自己Linux的操作系统及架构命令&#xff1a;uname -a2. 下载合适版本的Anconda 第二步&#xff1a;安装Aanconda1. 为.sh文件设置权限2. 执行.sh文件2.1 .…

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…

计网-数据链路层

3.1数据链路层的概述 概念 链路就是从一个结点到相邻结点的一段物理线路&#xff0c;而中间没有任何其他的交换结点。 数据链路是指把实现通信协议的硬件和软件加到链路上&#xff0c;就构成了数据链路。 数据链路层以帧为单位传输和处理数据。 网络中的主机、路由器等都必须实…

Versal - 基础5(裸机开发 AIE-ML+Vitis2024.2界面aie report介绍)

目录 1. 简介 2. 申请 License 2.1 申请网址 2.2 填写 Host 2.3 导入 License 3. 示例 3.1 vivado_platform 3.1.1 由模板创建 3.1.2 模板参数 3.1.3 修改BD参数 3.1.4 配置CIPS和MC 3.1.5 导出PFM 3.2 vitis_platform 3.2.1 创建组件 3.2.2 导入XSA并配置 3.2…

Python 字典思维导图

在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制&#xff0c;因此我们会演示如何遍 历字典中的数据。另外&#xff0c;你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…

用pytorch实现一个简单的图片预测类别

前言&#xff1a; 在阅读本文之前&#xff0c;你需要了解Python&#xff0c;Pytorch&#xff0c;神经网络的一些基础知识&#xff0c;比如什么是数据集&#xff0c;什么是张量&#xff0c;什么是神经网络&#xff0c;如何简单使用tensorboard,DataLoader。 本次模型训练使用的是…

计算机视觉:卷积神经网络(CNN)基本概念(一)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 一、引言 卷积神经网络&…

PowerBI 矩阵 列标题分组显示(两行列标题)

先看效果 数据表如下&#xff1a; 我们在powerbi里新建一个矩阵&#xff0c;然后如图加入字段&#xff1a; 我们就会得到这样的矩阵&#xff1a; 我们在“可视化”->“列”&#xff0c;上双击&#xff0c;输入空格&#xff0c;就能消除左上角的"类别"两字 同理修…

报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant

与 TEN 相聚在「LET’S VISION 2025」大会&#xff0c;欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊&#xff0c;功能新鲜上线&#xff0c;线下首波体验&#xff01; &#x1f4c5; TEN 展位&#xff1a;2025年3月1日-2日 TEN workshop&#x…

python opencv基础使用总结

1.安装opencv库&#xff1a;pip install opencv-python 2.基础使用范例 import cv2 #图片的基本操作#1.读取一张图片 参数 1&#xff1a;图片的文件名如果图片放在当前文件夹下&#xff0c;直接写文件名就行&#xff0c;如lena.jpg否则需要给出绝对路径&#xff0c;如D:\Ope…

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…

OpenEuler学习笔记(三十三):在 OpenEuler 上搭建 OpenGauss 数据库环境

在 OpenEuler 上搭建 OpenGauss 数据库环境需要按照以下步骤进行。OpenGauss 是华为开源的一款高性能关系型数据库&#xff0c;支持高并发、高可用性和分布式部署。 1. 环境准备 确保你的 OpenEuler 系统满足以下要求&#xff1a; 操作系统&#xff1a;OpenEuler 20.03 LTS 或…