Stable Diffusion web UI 安装、启动脚本、常见问题、插件(linux)

2023-10-30

Stable Diffusion本身是一个模型,对于大多数想试试的人来说,使用这个web ui版本最合适
建议先看完再动手,虽然不难但是有门槛(主要要解决网络问题),如果深入需要会python
如果只是想试试的,建议直接下载别人打好的包,自己搭建确实很麻烦
2023.8.13更新教程 1.5.1版本

github页面:Stable Diffusion web UI

一、可能的误区

1.误区1:必须用linux或者windows

mac os也可以,但是同样在于其它的坑多,不建议在mac os上使用,当然我也没试过。

2.误区2:必须用N卡

N卡坑少,出问题容易找到答案,并不是只能N卡。A卡、i卡、cpu也可以,不过可能使用难度较大。
Nvidia显卡(Cuda)或AMD显卡(ROCm)

3.误区3:必须用conda

用conda的原因在于很多开发者通常需要多个python环境,个人部署直接装在系统就行

为了方便后期深度使用和应用,还是建议linux+N卡+conda
本人试过在windows下的部署,包括用别人打好包的,但是windows下不稳定,特别是加上很多插件或者需要深度使用的时候

二、安装所需

为了坑最少,建议按照我的方法来:

(一)操作系统

这个webui作者写的是在debian11下开发的,所以建议也用deb系,在下面三个版本系统中我都测试过
debain11/debian12/ubuntu2204

(二)硬件

1.gpu

gtx10系以上,建议rtx之后的显卡,8G以上显存,建议16G以上。
我用的是rtx4090,性价比比较高的有rtx4060ti 16g,rtx2060 12g,rtx3060 12g,rtx3090 24g

2.内存

建议32g起,我实测加载几十个模型后,可以吃掉上百G的内存,建议使用霄龙或者至强平台
内存很便宜,要给够

3.硬盘

必须有固态,否则加载非常慢

(三)其它注意事项

pip命令或python命令,有时候你会是用pip3或者python3来操作
默认是用root来操作的,如果权限不够,自行加sudo或者切换root账户


由于版本更新过快,不同版本可能差别很大(还没迭代到稳定期)
很多问题搜不到答案,只能去看源码然后修改,有时候你看到的教程在那个版本可以用,但是后面的版本就会出bug,请按照我的版本去安装,我的是全部测试过的。

二、具体安装方法-conda集成环境(debian11、12/ubuntu2204+N卡)

1.安装anaconda和cuda

anaconda使用最新版的就行
cuda不必要安装,因为conda环境里面也有,不过建议还是装一下,方便其它应用使用,顺带也装了N卡驱动
建议用cuda11.8,高版本的cuda也可以用,我实际使用12.2是没问题的

参考:cuda安装
参考:anaconda安装

2.使用conda安装环境(非必须)

官方指定3.10.6版本python(名字是sdwu)
实际这个1.5.1版本运行的是3.11.2版本的python(也可以安装3.11.2版本的)

conda create -n sdwu python=3.10.6

激活环境

conda activate sdwu 

3.安装git或直接把东西下载下来

实际上git也是把文件下载下来,如果不习惯,直接下载文件也行,不用装git(我这里下载下来了)
进入目录

cd /usr/local

或用git拉取(git通常已经安装,如果没有则apt-get install git)

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

如果git没有安装,则使用

apt-get install git

附:直接下载方法,在项目目录把zip下载下来,解压即可,和git效果一样。或者在发行版里下载上传,内容是一样的。不过后面还是需要用到git,所以还安装git吧。
在这里插入图片描述在这里插入图片描述

4.使用脚本

就是各种依赖的安装,如果卡住了可以看下一步的操作
下面的操作需要在conda环境中(上面的conda的sdwu)

cd /usr/local/stable-diffusion-webui
./webui.sh

脚本webui.sh默认不允许root,我这里直接修改脚本解决
那就把脚本改了,不过以后升级的时候别忘了也要改

vi /usr/local/stable-diffusion-webui/webui.sh

找到

can_run_as_root=0

修改为(或者删掉下面的判断语句)

can_run_as_root=1

保存退出后运行

./webui.sh

如果出现python环境出错,使用

python3 -m venv venv/

5.如果出现卡住下载不了的问题(主要是依赖)

源下载过慢,可以切换pip源或者从单个下载,然后继续运行上面的脚本
如果报错,多半是网络不畅通导致下载组件到一半失败,同时使用国内的源会出现更新不及时导致无法正常安装。(比如这个版本已经更新了,但是国内源没更新,用pip经常会遇到这个问题)
建议多次尝试或者解决网络问题

这里后面还有几个插件,都是常用的,如果不是网络受限,安装是很容易的,如果实在无法解决网络问题,可以找别人下载好的conda环境复制过来重建环境即可

6.启动后

注意,如果linux设置了代理,是会报错的,这时候需要关闭linux代理(在/etc/profile中修改,你都改了)
在这里插入图片描述提示:To create a public link, set share=True in launch().
此时只能本地访问,web访问127.0.0.1:7860端口
这个环境可以保存下来了,用conda导出环境,然后迁移到别的设备。
允许外网访问等写在下面第三章


上面的操作可以手动进行,如果需要变成脚本一键运行,还需要调整

7.一键启动bash脚本

由于使用了conda环境,bash脚本也需要加载conda环境才能运行,我这里不修改webui.sh了,再套一个脚本
创建目录

mkdir /etc/sh && vi /etc/sh/sdwu.sh

内容如下(注意:这种conda调用方法是根据我的conda教程来的,如果你装到别的地方需要修改)
一定要按照我这个写,最后两句不要合并命令,因为官方的脚本存在一些逻辑性bug。(估计后面的版本会修改吧)

#!/bin/bash

source ~/anaconda3/etc/profile.d/conda.sh

conda activate sdwu

cd  /usr/local/stable-diffusion-webui

./webui.sh

保存退出后,授予权限

chmod +777 /etc/sh/sdwu.sh

使用下面的即可一键启动

/etc/sh/sdwu.sh

有了sh脚本,可以后台运行

nohup /etc/sh/sdwu.sh &>/dev/null &

8.systemctl 管理

必须要上一步的脚本配合才行

vi /usr/lib/systemd/system/sdwu.service

内容如下:

[Unit]
Description=sdwu
After=network.target

[Service]
Type=simple
User = root
Group = root
ExecStart=/bin/bash /etc/sh/sdwu.sh start

[Install]
WantedBy=multi-user.target

启动并开机启动

systemctl start sdwu && systemctl enable sdwu

如果需要关闭

systemctl stop sdwu

9.安装完后的使用

使用浏览器,打开ip:端口进入到界面,例如下面的
在这里插入图片描述主要配件的版本如下
在这里插入图片描述

三、优化

修改配置后需要重启才能生效

1.非本地127.0.0.1访问

不同版本的配置位置可能不同,按照1.5.1的版本来进行设置

vi /usr/local/stable-diffusion-webui/modules/paths_internal.py

找到如下

commandline_args = os.environ.get('COMMANDLINE_ARGS', "")

在后面的那个""中加入–listen,如果有别的参数,记得空格分开

commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen")

设置完成后,可以使用内网穿透映射到公网上,注意不要使用默认端口,容易被扫描

2.设置访问密码

注意:密码登录可能有bug,如果开启后出现问题,则关闭
不要使用默认的7860端口,放到公网上的会被别人扫描和蹭着用(我就遇到过)

vi /usr/local/stable-diffusion-webui/modules/paths_internal.py

如果有别的参数,记得空格分开

commandline_args = os.environ.get('COMMANDLINE_ARGS', "--gradio-auth 用户名:密码")

配置完成后,再次登录就要输入密码了
在这里插入图片描述

3.安装xformers

默认是不安装xformers的,如果安装了,可以优化gpu显存使用,效果比较明显,如果你用了32G以上显卡,这一步可以省了,24g显卡实测也会爆显存。

torch: 2.0.1+cu118 适配 0.0.20版本的xformers

pip install xformers==0.0.20

修改启动脚本

vi /usr/local/stable-diffusion-webui/modules/paths_internal.py

在下面添加–xformers,如果有别的参数,记得空格

commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen --xformers")

4.汉化

如果点不开下面的链接,复制链接到浏览器地址栏再打开
里面有具体的操作步骤,我这就不再写了

github汉化项目链接

github汉化项目链接2

5.新模型的导入

上面安装的只是一个模型,后面比如更新了高的版本,可以下载 .safetensors的文件,放到指定目录下即可

找到存放位置

find / -name "*.safetensors"

我的是在

/usr/local/stable-diffusion-webui/models/Stable-diffusion

可以将其它的模型导入使用,比如自己训练的

6.使用暗黑主题

在url后面添加

?__theme=dark

比如:

127.0.0.1:7860/?__theme=dark

四、常见问题解决

1.Try adding --no-half-vae commandline argument to fix this

半精度问题,不用即可

vi /usr/local/stable-diffusion-webui/modules/paths_internal.py

在后面的""后面添加–no-half-vae,如果有别的参数,记得空格分开

commandline_args = os.environ.get('COMMANDLINE_ARGS', "--no-half-vae")

2.Error: Connection errored out

websocket问题

vi /usr/local/stable-diffusion-webui/modules/paths_internal.py

在后面的""后面添加–no-gradio-queue,如果有别的参数,记得空格分开

commandline_args = os.environ.get('COMMANDLINE_ARGS', "--no-gradio-queue")

3.Cannot locate TCMalloc (improves CPU memory usage)

这个可以忽略,主要是优化cpu和内存的使用
安装下面的依赖解决(debian和ubuntu都是这个命令)

apt-get install libgoogle-perftools4 libtcmalloc-minimal4

五、其它相关

由于比较多,专门写链接

(一)插件

等链接

(二)模型

等链接

六、升级版本

由于更新很快,如果每次重新安装会非常麻烦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stable Diffusion web UI 安装、启动脚本、常见问题、插件(linux) 的相关文章

  • 安装后找不到pip命令

    我被一个问题困住了 我有一个 Python 脚本 我想在我的 OSX 上运行 但似乎我在很多问题上都遇到了问题 要运行该脚本 我应该安装 Python 和 Moviepy 为了安装 Moviepy 我使用了这个命令 sudo pip ins
  • 创建一个支持 json 序列化的类以与 Celery 一起使用

    我正在使用 Celery 来运行一些后台任务 其中一项任务返回我创建的 python 类 考虑到有关使用 pickle 的警告 我想使用 json 来序列化和反序列化此类 有没有一种简单的内置方法可以实现这一目标 该类非常简单 它包含 3
  • 使用 selenium 和 python 在网页网格中抓取 javascript 数据

    我的问题是我需要包含网站子域的网格中的所有数据https applipedia paloaltonetworks com https applipedia paloaltonetworks com 包含名称 类别 子类别 风险 技术的数据
  • 使用不带引号的块样式的 Python YAML 转储

    如何使用 PyYAML 加载和转储 YAML 以便它尽可能地使用原始样式 我有 Python 来加载和转储 YAML 数据 例如 import sys import yaml def represent dictorder self dat
  • 在 PyCharm 中启用终端模拟

    很多人告诉过我和PyCharm 2 7 的 PyCharm 发行说明 https www jetbrains com pycharm whatsnew whatsnew 27 html吹捧那个PyCharm包括完整的终端仿真 我认为这是关于
  • 使用 cx_oracle 返回 MERGE 中受影响的行数

    如何在 CX Oracle 中执行 MERGE INTO sql 命令来获取受影响的行数 当我在cx oracle 上执行MERGE SQL 时 我得到的cursor rowcount 为 1 有没有办法获取受合并影响的行数 由于 cx o
  • python 函数 *args 和 **kwargs 以及其他指定的关键字参数

    我有一个 Python 类 它的方法应该以这种方式接受参数和关键字参数 class plot def init self x y self x x self y y def set axis self args xlabel x ylabe
  • 并行执行按位运算的代码

    我有这段代码 通过将该 AU 矩阵的每个字节 8 个元素打包到 A 中来减少内存消耗 从而使 100k 200k 矩阵占用更少的空间 正如您所期望的 这段代码需要永远运行 我也计划将行数增加到 200k 我正在一个非常强大的实例 CPU 和
  • 为什么 scikit-learn SVM.SVC() 非常慢?

    我尝试使用SVM分类器来训练大约10万个样本的数据 但我发现它非常慢 甚至两个小时后也没有任何反应 当数据集有大约 1k 个样本时 我可以立即得到结果 我还尝试了 SGDClassifier 和朴素贝叶斯 速度相当快 几分钟内就得到了结果
  • Plotly:如何在堆叠条形图顶部显示值的总和以及各个条形值?

    我正在尝试在 Python 中的 Plotly Express 中添加每个堆叠条形顶部的总计以及各个条形值 import plotly express as px df px data medals long fig px bar df x
  • Python 中没有名称属性的表单提交

    背景 在Python中使用urllib和urllib2 您可以进行表单提交 您首先创建一个字典 formdictionary search stackoverflow 然后使用 urllib 的 urlencode 方法来转换这个字典 pa
  • 如何在 Google App Engine (Python) 中定义配置变量/常量?

    我是 python GAE 的新手 想知道如何快速定义和使用全局设置变量 所以说你 git 克隆我的 GAE 应用程序 然后打开config yaml 添加更改设置 应用程序就全部连接起来 如下所示 config yaml or whate
  • 使用 SQLAlchemy 查询 Pandas DataFrame 时重命名列

    当您将数据查询到 pandas 数据帧时 有没有办法保留 SqlAlchemy 属性名称 这是我的数据库的简单映射 对于 school 表 我将数据库名称 SchoolDistrict 重命名为较短的 district 我从 DBA 中删除
  • Python父类访问子私有变量

    以下代码会生成错误 class A object def say something self print self foo print self bar class B A def init self self foo hello sel
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • numpy.polyval() 的反函数

    我想知道 np polyval 是否有一个方便的反函数 我在其中给出 y 值并求解 x 我知道我可以做到这一点的一种方法是 import numpy as np Set up the question p np array 1 1 10 y
  • 从Python列表中挑选出具有特定索引的项目

    我确信在 Python 中有一种很好的方法可以做到这一点 但我对这门语言还很陌生 所以如果这是一个简单的方法 请原谅我 我有一个列表 我想从该列表中挑选某些值 我想要挑选的值是列表中索引在另一个列表中指定的值 例如 indexes 2 4
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • matplotlib 后端 - 我关心吗?

    gt gt gt import matplotlib gt gt gt print matplotlib rcsetup all backends u GTK u GTKAgg u GTKCairo u MacOSX u Qt4Agg u
  • ValueError:序列太大;不能大于 32

    我写了这段代码 from Crypto Cipher import AES import numpy as np import cv2 base64 BLOCK SIZE 16 PADDING pad lambda s s BLOCK SI

随机推荐

  • 基于百度飞桨PaddlePaddle和PARL复现PPO强化学习算法

    文章目录 一 PPO训练效果展示 Mujoco HalfCheetah v2 二 策略优化算法发展回顾 三 PPO 算法论文阅读 1 Introduction 2 Background Policy Optimization 2 1 Pol
  • R语言使用RMySQL连接及读写Mysql数据库

    简单说下安装过程 一般不会有问题 重点是RMySQL的使用方式 系统环境说明 Redhat系统 Linux 460 42 6 32 431 29 2 el6 x86 64 系统编码 LANG zh CN UTF 8 中文UTF 8格式 my
  • Access Token是做什么的

    我们在访问很多大公司的开放 api 的时候 都会发现这些 api 要求传递一个 access token 参数 这个参数是什么呢 需要去哪里获取这个 access token 呢 access token 是在 Oauth2 0 协议中 客
  • ag-Grid的基本用法一(表格列的定义)

    最近在研究基于angular2 的表格的用法 发现一种非常好用的表格 就是ag grid ag grid不仅对angular1 x有支持 还支持react vue等目前主流的前端框架 这里我们只是对angular2 中的ag grid进行讲
  • 朴素贝叶斯分类器:R语言实现

    span style font family none background color rgb 255 255 255 span span style font family none background color rgb 255 2
  • flask中request.args和request.form区别

    app route ajaxget1 def ajax test get server name request args get server name server ip request args get server ip print
  • 前端的反单引号语法之`${}`

    es6中新增的字符串方法 可以配合反单引号完成拼接字符串的功能 1 反单引号怎么打出来 将输入法调整为英文输入法 单击键盘上数字键1左边的按键 2 用法 step1 定义需要拼接进去的字符串变量 step2 将字符串变量用 包起来 再写到需
  • c语言打开文本有什么作用,c语言文件打开方式有哪些

    c语言文件打开方式有哪些 ANSI C规定文件打开用函数fopen 关闭为fclose 1 调用方式通常为 FILE fp fp fopen 文件名 打开方式 2 参数说明 文件名 形如 myfile dat F data myfile d
  • 数据序列相关性-ACF,PACF和CCF

    引言 最近写论文关于预测的特征选择遇到一些问题 想把自己查询学习到的东西整理记录一下 理一理头绪 希望能加深自己对这些东西的理解 首先介绍引入几个概念 自相关函数 autocorrelation function ACF 偏自相关函数 pa
  • OLED透明屏全贴合技术:未来显示技术的突破性创新

    在现代科技发展的浪潮中 OLED透明屏全贴合技术以其独特的优势和无限的应用前景引起了广泛的关注 在这篇文章中 尼伽将深入探索OLED透明屏全贴合技术 介绍其优势和特点 并展望其在不同领域的应用前景 一 OLED透明屏全贴合技术 OLED透明
  • pytorch:批训练(batch_training)

    一 什么是批训练 批训练 意思是把整套训练数据分成数个批次进行训练 每个批次从数据中选取 n num 总数据 n batch 批次 个数据 直到把整套数据训练完成 举个例子 有10个输入训练数据 每个批次训练3个数据 这训练完成需要4个批次
  • 手机摄像头组成结构和工作原理

    手机摄像头的组成结构和工作原理 手机摄像头的组成结构和工作原理 手机摄像头由 PCB板 镜头 固定器和滤色片 DSP CCD用 传感器等部件组成 工作原理为 拍摄景物通过镜头 将生成的光学图像投射到传感器上 然后光学图像被转换成电信号 电信
  • html 分割线_html基础必备-分隔标记,前端小白一看就会

    分节 分区和分割线 这些标记用于将页面分成多个部分 熟练地掌握这些标记将意味着构建出具有良好的结构和布局的页面 使其更加友好和易于阅读 分区 div标记定义了HTML文件中的一个部分或分区 它通常包含需要组合在一起的标题 段落 表格或其他元
  • python写excel文件不覆盖_python向已存在的excel中新增表,不覆盖原数据的实例

    每月需更新某个excel表格 进行两项操作 且不覆盖原有的sheet 1 在原来的excel表中新增sheet 2 往原有的excel表中的某张sheet新增内容 基于python3 使用xlrd xlwt 具体代码如下 亲测有效 希望对大
  • 软件测试分级理论

    软件测试是软件工程当中不可或缺的一个过程 在软件工程中 测试者充当 虚拟用户 对软件产品进行检验 只有经过严格测试的软件产品 才能发布给用户使用 只要有软件的地方 就有软件测试 软件测试是一个包罗万象的话题 这种 包罗万象 的具体表现之一就
  • 工控安全PLC固件逆向一

    在工控领域 我们会遇到许多协议 为了进行安全研究 经常需要对协议的具体内容进行探索 今天我们就来聊聊关于工控协议逆向的问题 接下来会简单介绍一下常用的协议逆向方法并配合一些实战 当然 从未知到已知的探索过程不仅仅需要代码上的实践 还需要数学
  • React - getSnapshotBeforeUpdate() 的使用

    getSnapshotBeforeUpdate 方法 1 在render之前调用 state已更新 2 典型场景 获取render之前的dom状态 我们来看一个例子 每一秒钟都会加入一个新的 div msg number div 假如我们使
  • 一次网络不通“争吵”引发的思考

    为啥争吵 吵什么 你到底在说什么啊 我K8s的ecs节点要访问clb的地址不通和本地网卡有什么关系 气愤语气都从电话那头传了过来 这时电话两端都沉默了 过了好一会传来地铁小姐姐甜美的播报声打断了刚刚的沉寂 乘坐地铁必须全程佩戴口罩 下一站西
  • 终止代码driver_irql_not_less_or_equal

    终止代码driver irql not less or equal McAfee和Zone Alarm是导致问题的原因 因此 我们建议卸载它们
  • Stable Diffusion web UI 安装、启动脚本、常见问题、插件(linux)

    Stable Diffusion本身是一个模型 对于大多数想试试的人来说 使用这个web ui版本最合适 建议先看完再动手 虽然不难但是有门槛 主要要解决网络问题 如果深入需要会python 如果只是想试试的 建议直接下载别人打好的包 自己