最近几天在 2 台 Mac、2 台 PC、一台云无 GPU 的 Linux 装置了 Stable Diffusion WebUI,这儿记录下如何装置,以及一些留意点和坑。

以下内容针对 Windows(N 卡)、MacOS(m 系列芯片)、Linux(Ubuntu、无 GPU)。

Windows 装置

Windows 装置算是比较简单的,首先直接到 www.python.org/downloads/r… 最下方下载 Windows Installer(留意官方主张版别是 3.10.6,不要运用太新的或太旧的版别,存在部分包不兼容的问题),然后点击装置,主张选择默许装置方式并勾选上 PATH,这样后边就不用自己设置 PATH 环境变量了:

Stable Diffusion WebUI 各操作系统安装教程

最终的 PATH 最大长度约束的免除可选可不选。然后就能够 clone WebUI 库房了,假如没有装置过 git 的记住先装置一下:

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

clone 完成后进入 WebUI 目录双击 webui-user.bat 即可打开 WebUI,WebUI 会主动装置需求的依靠并发动,初次运转需求下载的依靠较多或许需求等候比较久的时刻。

MacOS 装置

MacOS 装置相同需求先装置依靠,留意先装置好 homebrew,由于 m 系列芯片支撑两个版别的 homebrew,所以一定要留意,需求运用 x86 版别的 homebrew,能够运用 which brew 查看,假如是 /usr/local/bin/brew 则是 x86,假如不是最好卸载重装后再继续下面的操作。

确认 homebrew 无误后,运用 homebrew 装置需求的依靠,并 clone Stable Diffusion WebUI:

brew install cmake protobuf rust python@3.10 git wget
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

上述操作都就绪后,就能够进入 WebUI 目录,然后运用 ./webui.sh 发动,WebUI 会主动装置需求的依靠并发动,初次运转需求下载的依靠较多或许需求等候比较久的时刻。

Linux 装置

我的云主机操作系统是 Ubuntu 22,并且由于是白嫖的甲骨文的免费云,没有 GPU,所以只能用纯 CPU 跑。

在 Linux 上跑也是相同的路子,先装置依靠,再 clone WebUI:

sudo apt install wget git python3 python3-venv
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

然后进入 WebUI 目录履行 ./webui.sh 发动即可,相同的,WebUI 会主动装置需求的依靠并发动,初次运转需求下载的依靠较多或许需求等候比较久的时刻。

不过需求留意的是由于机器没有 GPU,在发动时分需求增加参数来运用 GPU:

./webui.sh --skip-torch-cuda-test --precision full --no-half --use-cpu all

还需求留意,有一些 model 的参数需求 GPU 的支撑,所以运用 CPU 跑图很或许会发现跑半响出现不支撑 CPU 的过错,所以假如不是没办法强烈不主张运用 CPU 来跑

发动

在 Windows 发动时增加参数

由于 Windows 上发动时运用的是 bat 文件,而不是命令行,所以需求增加参数时和其它系统不同,需求编辑 webui-user.bat 文件,然后将在其间的 set COMMANDLINE_ARGS= 后边加上需求增加的参数来运转。

Serve 给其它机器运用

默许情况下 WebUI 只会监听本机的 host,假如需求从其他机器拜访,比方在局域网通过另一台机器拜访服务器上的 WebUI 则需求增加 --listen 参数。增加参数后假如需求运用插件要增加 --enable-insecure-extension-access 参数,否则会出现最下方的问题。

当然其实也能够直接用 Nginx 反代就不会触发 WebUI 的安全问题。

Nginx 反代

假如想用 Nginx 反代 WebUI,需求留意:WebUI 里面用到 websocket,所以反代也需求考虑到,否则 WebUI 中发出的 ws 恳求 /queue/join 会一直报错,下面放一下我的反代的装备:

server {
    listen 80;
    listen [::]:80;
    server_name xxx.xxx.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name xxx.xxx.com;
    ssl_certificate /etc/nginx/cert/xxx.pem;
    ssl_certificate_key /etc/nginx/cert/xxx.key;
    proxy_connect_timeout              60s;
    proxy_send_timeout                 60s;
    proxy_read_timeout                 60s;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        $connection_upgrade;
    proxy_set_header X-Forwarded-Proto $scheme;
    location / {
        proxy_pass http://localhost:7860;
    }
}

运用上述装备还需求在 nginx.conf 中的 http 模块中增加上如下声明,否则会报错:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

速度

从几台机器和结合最近几天在其它平台上的经验来看,速度差异非常大,我两台 Mac 都是 m1-16G,PC 由于显卡太老旧底子跑不起来(GTX660),Linux 是甲骨文的 VM.Standard.A1.Flex-4VCPU-24G,对比后速度如下:

  • Linux 跑一张默许图耗时大约 9 分钟左右
  • m1-16G 跑一张默许图的耗时大约在 50 秒
  • Colab 的 T4 跑一张默许图耗时大约在 4 秒左右
  • 阿里云的 A10 跑一张默许图都是秒出的

假如稍微复杂点的模型我的这台 Linux 一晚上都跑不出几张图,m1 勉强能用,所以哪怕是 Colab 现在的免费时长缩短到一小时,其实也比在其他机器上瞎跑好多了,功率摆在这儿。

FAQ

AssertionError: extension access disabled because of command line flags

当运用 WebUI 装置插件时报错,这个是由于运用了 --listen 参数,WebUI 为了安全(由于此时能够外网通过 IP 拜访 WebUI)会默许禁用插件装置的权限,此时能够通过 --enable-insecure-extension-access 参数封闭插件的安全检测。

参阅链接: github.com/AUTOMATIC11…

WebSocket 连不上,queue/join 报错

正常出现在运用 nginx 反代时,一般由于没有反代 websocket 导致 websocket 无法连接。

没有 GPU 怎么办

没有 GPU 时在发动时需求增加 --skip-torch-cuda-test --no-half --use-cpu all 这几个参数,封闭 CUDA 并强制开启运用 CPU。

Mac 报错: have ‘arm64’, need ‘x86_64’

一般这种情况下是装置了 arm 版的 homebrew,导致装置的其他依靠包也是 arm 版别,而有些依靠包没有 arm 版别就会造成依靠缺失,所以遇到后需求查看自己的 homebrew 版别并切换成 x86 版别并重新装置依靠。

留意

最终一定要留意:在调试时出现问题需求重新装置依靠时,一定、一定、一定要记住先整理洁净 WebUI 目录下的缓存,比方 __pycache__venv 这几个目录,否则会一直运用缓存中的装备。