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

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

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

文章目录

  • 前言
  • 后视镜视角查看安装文档
  • 聊聊我踩的那些坑
    • python3.11的安装
    • 执行sudo apt update报错
    • 显卡驱动
    • 内存优化
    • 网络问题
    • 无法打开系统设置和网络设置
    • 查询GPU使用情况
  • 总结

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)就使用这些命令安装,而我们是因为系统太老所以要使用这些命令

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. 安装依赖
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv libgl1 libglib2.0-0
  1. 在自定义位置克隆项目
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报错

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

$ 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显卡,报错如下:

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 系统中一个非常实用的命令行工具,主要用于自动检测硬件设备,并推荐、安装合适的驱动程序,特别是针对显卡、无线网卡等设备的驱动。

安装方法如下:

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)

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

    export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
    

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

    echo 'export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"' >> ~/.bashrc
    source ~/.bashrc
    
  3. 验证安装
    确保 TCMalloc 已正确安装,可以通过运行以下命令来验证:

    ldd $(which python3) | grep tcmalloc
    

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

    libtcmalloc_minimal.so.4 => /usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4 (0x00007ff0e879e000)
    
  4. 重启程序
    完成以上步骤后,你可以重新运行 webui.sh 脚本,就不会再看到关于 TCMalloc 的警告。

网络问题

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

################################################################
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控制中心就好了

sudo apt update
sudo apt install --reinstall gnome-control-center

查询GPU使用情况

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

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

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

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


http://www.kler.cn/a/548713.html

相关文章:

  • Leetcode100-春招-矩阵题类
  • 【06】泛型
  • Httprint 指纹识别技术:网络安全的关键洞察
  • [高等数学] 分部积分法
  • 大模型开发实战篇5:多模态--文生图模型API
  • Flask中获取请求参数的一些方式总结
  • DeepSeek在linux下的安装部署与应用测试
  • 基于Python的Flask微博话题舆情分析可视化系统
  • Dify+Ollama+DeepSeek部署本地大模型+知识库搭建
  • Typescript class中的方法和函数类型的属性有何不同?
  • 每日一题——47. 全排列 II
  • Linux系统Centos安装部署nginx代理
  • 数字内容体验未来趋势:五大平台横向对比与深度解析
  • 惠普HP Color LaserJet CP1215/1210彩色打印机打印校准方法
  • . Unable to find a @SpringBootConfiguration(默认软件包中的 Spring Boot 应用程序)
  • AI大模型学习(二): LangChain(一)
  • SpringBoot+数据可视化的奶茶点单购物平台(程序+论文+讲解+安装+调试+售后)
  • GMSL 实例1:当 MAX96717 遇上 MAX96724,打通 Camera 视频数据传输
  • 运维脚本——2.备份与恢复
  • YOLO11环境搭建CUDA12.6