Ubuntu20.04部署stable-diffusion-webui环境小记

Ubuntu20.04部署stable-diffusion-webui环境小记

文章目录

Stable Diffusion web UI

A web interface for Stable Diffusion, implemented using Gradio library.

前言

今天这篇算是工作学习笔记吧,主要记录下stable-diffusion-webui开源项目安装过程中遇到的问题,Stable Diffusion 是一种基于深度学习的文本到图像生成模型,能够根据给定的文本描述生成高质量的图像。它属于一种称为扩散模型(Diffusion Models)的生成模型,扩散模型在图像生成领域取得了显著的成果。

stable-diffusion-webui 是一个开源项目,旨在为 Stable Diffusion 模型提供一个简洁、用户友好的 Web 界面。这个界面使得用户能够更方便地使用 Stable Diffusion 生成图像,进行各种设置调整,甚至利用 GPU 加速来提高生成效率。它本质上是一个基于 Python 的 Web 应用程序,通常使用 Flask 或 FastAPI 作为后端框架,前端则是基于 HTML/CSS/JavaScript 实现的。

stable-diffusion-webui 作为一个开源项目的,它的安装过程已经被无数先行者实践过了,可是人们总会因为这样那样的原因遇到新的问题,可能是版本不对应,平台不熟悉、项目不熟悉、环境有问题等等,在我熬到半夜成功安装完一次以后,回过头来再看项目的 README 文件发现是那样的清晰,可是为什么在成功安装前踩了那么多坑呢?总结我遇到的坎坷有几点:英语不熟、Ubuntu恐惧、python混乱、操之过急。

所以我觉得把我安装的经历记录下来还是很有必要的,这样可以让我以后在类似的问题上少踩一些坑,安装背景是这样的,之前团队小伙伴也是用这个项目生成图,但是用的Windows版本,从 README 文件来看Windows版本在显卡驱动正常的情况下只需要 git clone 克隆库之后,运行 webui-user.bat 脚本即可,但是那台Windows配置不高,所以准备用新电脑再搭一次环境。

新入伍的电脑配置配置贼优秀:i9CPU32核、128G内存、Geforce RTX 4070Ti显卡、4TSSD硬盘,还有Windows10家庭版和Ubuntu20.04双系统,考虑到家庭版系统的限制和分配给它的小硬盘空间,我们还是决定在Ubuntu上重新部署一套环境,首先在我的认知里高配显卡和Ubuntu就不搭,所以当我遇到找不到显卡需要安装驱动时就头大,当然现在来看这只是偏见,但当时安装时并不知道,加上搜到的一些Ubuntu安装显卡驱动的繁琐教程,我走了一些弯路。

再有就是对英语的陌生感,导致查看README文件时有些急躁,有点胡乱一锅端的操作,还有就是要再安装一个新版本的Python解释器的恐惧,这也是导致我开始安装总遇到问题的主要原因,当我梳理了python3-venv功能之后,基本理解了虚拟环境的隔离概念和好处,也就理解了这些安装命令的作用。

后视镜视角查看安装文档

首先说明我的电脑系统是Ubuntu20.04,这就决定我电脑默认的Python不符合要求,下面是具体步骤:

复制代码
Automatic Installation on Linux

1.Install the dependencies:

# Debian-based:
sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0
# Red Hat-based:
sudo dnf install wget git python3 gperftools-libs libglvnd-glx
# openSUSE-based:
sudo zypper install wget git python3 libtcmalloc4 libglvnd
# Arch-based:
sudo pacman -S wget git python3

先看这一段,一开始我准备一股脑全执行一遍,后来发现只需要执行 sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0 这一句即可,python3 是 Python 编程语言的第三版的执行文件, python3-venv 是一个用于创建 Python 3 虚拟环境的工具包, libgl1 是用于支持 OpenGL 的库,它提供了对图形硬件的低级接口,允许程序使用硬件加速进行 2D 和 3D 图形的渲染,libglib2.0-0 是 GLib 库的核心部分,它是许多 Linux 应用程序和工具的基础库之一,提供数据结构、内存管理、线程管理、文件 I/O、网络操作、正则表达式等功能,被广泛用于 GNOME 桌面环境和许多其他 C 应用程序中。

稍微新一点的Ubuntu系统执行这个命令就安装好了,比如Ubuntu22.04系统,自带的Python版本就是Python3.10,而我当前的电脑系统Ubuntu20.04自带的Python版本是Python2.7和Python3.8,所以Python相关的软件默认安装的不符合条件,接着往下看。

复制代码
If your system is very new, you need to install python3.11 or python3.10:

# Ubuntu 24.04
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11

# Manjaro/Arch
sudo pacman -S yay
yay -S python311 # do not confuse with python3.11 package

# Only for 3.11
# Then set up env variable in launch script
export python_cmd="python3.11"
# or in webui-user.sh
python_cmd="python3.11"

原来这个项目需要的版本是Python3.11 或者 Python3.10,所以系统自带的Python3.8是不行的,这里开头有句提示,如果系统太新(比如Ubuntu24.04)就使用这些命令安装,而我们是因为系统太老所以要使用这些命令

py 复制代码
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11
sudo apt install python3.11-venv # 这句原文档没有,我觉得安装对应版本的好一些

这里补充关键的一点,对照上面所需的命令,应该额外安装一下 sudo apt install python3.11-venv 这个虚拟环境的软件,另外的重中之重是要执行 export python_cmd="python3.11",或者在 webui-user.sh 文件中添加 python_cmd="python3.11"信息,我就是没看到这一步,导致Python安装混乱,耽误了几个小时,推荐将配置放到文件中,一会告诉你这个文件在哪,接着往下看

复制代码
2.Navigate to the directory you would like the webui to be installed and execute the following command:

wget -q https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh

Or just clone the repo wherever you want:

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

这第二步给了两种方式,一种是直接下载脚本执行,另一种是直接clone一个库,我就是为了省事选了第一种,但又没设置python_cmd变量,导致下载过程中这种缺python库,所以这里推荐第二种,直接在自定义位置克隆一个库,然后进入stable-diffusion-webui目录,打开文件webui-user.sh,添加python_cmd="python3.11"信息,继续往后看:

复制代码
3.Run webui.sh.
4.Check webui-user.sh for options.

第三步是执行 webui.sh 脚本,可以直接运行下载的脚本 ./webui.sh,也可以进入克隆的项目目录stable-diffusion-webui运行命令 ./webui.sh

第四步就是检查用户参数了,我们手动添加了一个python_cmd="python3.11",其实在 webui.sh 文件中用这样一段描述:

复制代码
#################################################
# Please do not make any changes to this file,  #
# change the variables in webui-user.sh instead #
#################################################

而在webui-user.sh也有一些被注释的默认变量供我们修改:

复制代码
#!/bin/bash
#########################################################
# Uncomment and change the variables below to your need:#
#########################################################

# Install directory without trailing slash
#install_dir="/home/$(whoami)"

# Name of the subdirectory
#clone_dir="stable-diffusion-webui"

# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
#export COMMANDLINE_ARGS=""

# python3 executable
#python_cmd="python3"

# git executable
#export GIT="git"

# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
#venv_dir="venv"

# script to launch to start the app
#export LAUNCH_SCRIPT="launch.py"

# install command for torch
#export TORCH_COMMAND="pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113"

# Requirements file to use for stable-diffusion-webui
#export REQS_FILE="requirements_versions.txt"

# Fixed git repos
#export K_DIFFUSION_PACKAGE=""
#export GFPGAN_PACKAGE=""

# Fixed git commits
#export STABLE_DIFFUSION_COMMIT_HASH=""
#export CODEFORMER_COMMIT_HASH=""
#export BLIP_COMMIT_HASH=""

# Uncomment to enable accelerated launch
#export ACCELERATE="True"

# Uncomment to disable TCMalloc
#export NO_TCMALLOC="True"

###########################################
python_cmd="python3.11"

至此总结一下在Ubuntu20.04上配置环境的精简步骤

  1. 安装依赖
bash 复制代码
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv libgl1 libglib2.0-0
  1. 在自定义位置克隆项目
bash 复制代码
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
  1. 进入stable-diffusion-webui目录,在文件 webui-user.sh 中添加 python_cmd="python3.11" 信息

  2. 运行stable-diffusion-webui目录下的脚本文件 ./webui.sh

聊聊我踩的那些坑

前面描述了怎样正确搭建环境,最后总结下来就寥寥几步,但是我却兜兜转转花了几个小时,下面聊聊我都踩了哪些坑,以及用到了哪些东西?

python3.11的安装

因为自己的偏见,认为Python环境的混乱,所以在这里吃了亏,使用默认命令安装完发现是Python3.8版本,于是执行 sudo apt install python3.11 命令安装,但是因为没有导入环境变量 export python_cmd="python3.11",导致执行脚本时各种报 "No module named pip" 错误,我甚至想删掉自带的Python2.7版本和Python3.8版本,还好是Deepseek劝住了我,不然我就全给它卸载了,但是因为找不到pip,指定安装也不好使,我又搞起来骚操作,将 /usr/bin/ 目录下的 python 和 python3都指向了 Python3.11,勉强解决了这个问题,但却引入了更大的麻。

重启之后打不开终端了,一些软件更新和图形界面话的东西也不好使了,经过几个小时的摸索我想起了DeepSeek劝我的话,难道是因为系统的GNOME用到了他们,我赶紧将python和python3的软连接还原了,重启之后发现果然正常了。

当我意识到这个问题后,从头重新安装Python,指定了环境变量 python_cmd, 就没遇到这个麻烦了。

这里在安装Python3.11前有一句 sudo add-apt-repository ppa:deadsnakes/ppa,是一条在 Ubuntu 系统中用于添加 PPA(Personal Package Archive,个人包存档)的命令,让你能够从该源中获取更新的软件包。deadsnakes 是一个非常流行的 PPA,提供了 Ubuntu 官方源中不包含的 Python 版本。例如,它提供了比默认 Ubuntu 存储库中更高版本的 Python(例如 Python 3.11、3.12)供用户安装。

这个项目使用 python3.11-venv 创建虚拟隔离环境,它是通过 文件系统隔离环境变量配置 的方式实现虚拟环境的隔离。具体来说,虚拟环境会创建一个包含独立 Python 解释器和依赖包的目录,这样每个项目可以有自己的依赖和库,不会影响系统的全局环境或其他虚拟环境。

执行sudo apt update报错

每次执行软件检查更新时总是报错以下错误

bash 复制代码
$ sudo apt update
命中:2 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal InRelease
命中:1 https://packages.microsoft.com/repos/code stable InRelease
获取:3 https://dl.google.com/linux/chrome/deb stable InRelease [1,825 B]
错误:3 https://dl.google.com/linux/chrome/deb stable InRelease
  由于没有公钥,无法验证下列签名: NO_PUBKEY 32EE5355A6BC6E42
命中:4 http://security.ubuntu.com/ubuntu focal-security InRelease
命中:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease

从错误信息来看,问题是由于缺少 Google Chrome 存储库的公钥(NO_PUBKEY 32EE5355A6BC6E42),导致无法验证软件包的签名。解决方法如下:

可以手动添加缺失的公钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32EE5355A6BC6E42

如果 keyserver.ubuntu.com 无法连接,可以尝试其他密钥服务器,例如 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 32EE5355A6BC6E42

显卡驱动

运行启动脚本后找不到GPU显卡,报错如下:

bash 复制代码
ailsa@ailsa-Server:~$ ./webui.sh

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################

################################################################
Running on ailsa user
################################################################

################################################################
Create and activate python venv
################################################################

################################################################
Launching launch.py...
################################################################
glibc version is 2.31
Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)
Python 3.8.10 (default, Jan 17 2025, 14:40:23)
[GCC 9.4.0]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Traceback (most recent call last):
  File "launch.py", line 48, in <module>
    main()
  File "launch.py", line 39, in main
    prepare_environment()
  File "/home/ailsa/stable-diffusion-webui/modules/launch_utils.py", line 387, in prepare_environment
    raise RuntimeError(
RuntimeError: Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check

按照程序人的直觉来看是驱动有问题,关于装驱动我还是有点恐惧的,之前折腾各个Ubuntu系统版本的时候没少花费时间,我的水平也就保持在用驱动精灵给Windows安装驱动的阶段,说是给Ubuntu安装显卡驱动实属有点强人所难了,我一直以为Ubuntu不需要太强劲的显卡,好显卡都是给打游戏准备的,不过最近的AI兴起确实给了NVIDIA显卡更广阔的应用空间,然后我就搜索Ubuntu安装NVIDIA显卡驱动的教程,看了大片大片天花乱坠的众多命令之后我真的傻眼了,一个都不想敲。

后来我发现了 ubuntu-drivers,它是 Ubuntu 系统中一个非常实用的命令行工具,主要用于自动检测硬件设备,并推荐、安装合适的驱动程序,特别是针对显卡、无线网卡等设备的驱动。

安装方法如下:

bash 复制代码
sudo apt update
sudo apt install ubuntu-drivers-common

使用方法也极其简单,直接一条命令 sudo ubuntu-drivers autoinstall,会根据系统检测到的硬件情况,自动选择并安装最合适的驱动,无需手动指定。

安装完之后重启,显卡居然好了,丝滑到让人难以置信。

内存优化

显卡问题解决好后,启动时报出一条警告

Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)

这个警告是提示你没有安装 TCMalloc(Thread-Caching Malloc),它是 Google 提供的一种内存分配器,能够提高程序的内存使用效率,尤其在多线程环境下表现较好。虽然它不是必需的,但它可以帮助改善程序的内存使用效率,尤其是在使用 stable-diffusion 这类内存密集型应用时。

解决办法如下:

  1. 安装 google-perftools(其中包括 TCMalloc)

    bash 复制代码
    sudo apt update
    sudo apt install google-perftools
  2. 设置环境变量

    安装完成后,可能需要设置环境变量,以便 Python 和其他程序能够找到 TCMalloc 库。你可以通过设置 LD_PRELOAD 来加载 TCMalloc 库。

    bash 复制代码
    export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"

    也可以将此命令添加到你的 .bashrc.bash_profile 文件中,以便每次启动终端时自动加载。

    bash 复制代码
    echo 'export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"' >> ~/.bashrc
    source ~/.bashrc
  3. 验证安装

    确保 TCMalloc 已正确安装,可以通过运行以下命令来验证:

    bash 复制代码
    ldd $(which python3) | grep tcmalloc

    如果看到类似以下输出,说明 TCMalloc 已加载:

    bash 复制代码
    libtcmalloc_minimal.so.4 => /usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4 (0x00007ff0e879e000)
  4. 重启程序

    完成以上步骤后,你可以重新运行 webui.sh 脚本,就不会再看到关于 TCMalloc 的警告。

网络问题

解决完了内存又遭遇了网络问题,因为下载的库和资源多是 google.com 域名下的,为了更好的下载所以配置了代理访问,但是遭遇了以下错误

bash 复制代码
################################################################
Launching launch.py...
################################################################
Python 3.11.11 (main, Dec  4 2024, 08:55:08) [GCC 9.4.0]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Launching Web UI with arguments:
Traceback (most recent call last):
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/launch.py", line 48, in <module>
    main()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/launch.py", line 44, in main
    start()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/modules/launch_utils.py", line 465, in start
    import webui
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/webui.py", line 13, in <module>
    initialize.imports()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/modules/initialize.py", line 23, in imports
    import gradio  # noqa: F401
    ^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/__init__.py", line 3, in <module>
    import gradio.components as components
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/components/__init__.py", line 1, in <module>
    from gradio.components.annotated_image import AnnotatedImage
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/components/annotated_image.py", line 12, in <module>
    from gradio import utils
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/utils.py", line 353, in <module>
    class AsyncRequest:
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/utils.py", line 372, in AsyncRequest
    client = httpx.AsyncClient()
             ^^^^^^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 1395, in __init__
    proxy_map = self._get_proxy_map(proxies, allow_env_proxies)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 216, in _get_proxy_map
    return {
           ^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 217, in <dictcomp>
    key: None if url is None else Proxy(url=url)
                                  ^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_config.py", line 336, in __init__
    raise ValueError(f"Unknown scheme for proxy URL {url!r}")
ValueError: Unknown scheme for proxy URL URL('socks://127.0.0.1:7891/')

我安装了pip install httpx==0.22.0不好使,后来在这个官方的issue里找到了答案 unset ALL_PROXY

无法打开系统设置和网络设置

因为安装项目前完整的更新了一遍系统,发现缺了一些东西,这里提到的便是其中两项,重新安装GNOME控制中心就好了

bash 复制代码
sudo apt update
sudo apt install --reinstall gnome-control-center

查询GPU使用情况

系统自带的性能查看器中没有GPU信息,所以按照下面步骤,将系统信息显示到顶部的状态条上,先安装必要软件和扩展

bash 复制代码
sudo apt update
sudo apt install gnome-tweaks
sudo apt install gnome-shell-extension-system-monitor

接着按下 Alt + F2,输入 r,然后按回车,检查扩展是否已启用,需重新打开 GNOME Tweaks,方法如下:

方法 1:通过应用菜单搜索, 按下 Super 键(Windows 键),在搜索栏中输入 Tweaks 或 优化,然后点击打开。

方法 2:通过终端启动 gnome-tweaks

总结

  • Ubuntu20.04添加Python3.11软件源的方法是 sudo add-apt-repository ppa:deadsnakes/ppa
  • 安装Python环境和依赖使用命令 sudo apt install python3.11 python3.11-venv libgl1 libglib2.0-0
  • 安装NVIDIA显卡驱动的命令 sudo ubuntu-drivers autoinstall
  • 取消代理的方法 unset HTTP_PROXYunset HTTPS_PROXYunset ALL_PROXY

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==


记录自己做决定时的想法,哪些是经过了仔细的谋划,哪些是因为运气降临,诚然,运气确实也是一种实力,但是不可依赖,只有那些经过谋划后的成功才经得起历史的推敲和未来的检验~

相关推荐
思则变1 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络2 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find3 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取4 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector6 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习6 小时前
Python入门Day2
开发语言·python
Vertira6 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉6 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗6 小时前
黑马python(二十四)
开发语言·python
晓13137 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr