Ubuntu22.04 安装 stable-diffusion-webui

一、前言

在将日程上的NVIDIA驱动以及CUDA、cuDNN安装完毕后,接下来终于可以安装 stable-diffusion-webui,进行我的跑图实验了,如果对NVIDIA驱动安装感兴趣的,不妨可以看看我的这两篇文章《Ubuntu22.04 安装NVIDIA驱动》、《Ubuntu22.04 安装CUDA 和cuDNN》。

二、前置条件

stable-diffusion-webui 适用于Windows、Linux和Mac,不过对Mac而言适用性较差,只能利用CPU计算,出图速度回比较慢。官方文档上第一推荐的就是使用NVIDIA显卡,其次是AMD显卡,或者Intel的CPU或显卡。

安装 stable-diffusion-webui 前需要保证你的电脑上装了Python和Git,且Python的版本最好是 3.10.6。

三、Ubuntu安装

这是官方文档上的安装说明,核心就是 webui.sh 脚本文件,让我们先对其进行拆解下,避免安装得不明不白

第一部分是Python和Git执行器的选择

# 如果没有指定 python_cmd 环境变量,就默认使用 python3 命令
# python3 executable
if [[ -z "${python_cmd}" ]]
then
    python_cmd="python3"
fi
# git executable
if [[ -z "${GIT}" ]]
then
    export GIT="git"
else
    export GIT_PYTHON_GIT_EXECUTABLE="${GIT}"
fi

第二部分是项目目录的选择,如果当前目录下没有 .git 文件夹就创造一个 "stable-diffusion-webui" 文件夹,如果有了就使用当前目录

# Name of the subdirectory (defaults to stable-diffusion-webui)
if [[ -z "${clone_dir}" ]]
then
    clone_dir="stable-diffusion-webui"
fi
if [[ -d .git ]]
then
    printf "n%sn" "${delimiter}"
    printf "Repo already cloned, using it as install directory"
    printf "n%sn" "${delimiter}"
    install_dir="${PWD}/../"
    clone_dir="${PWD##*/}"
fi

第三部分是依赖的安装,默认情况下是通过 "${python_cmd}" -m venv "${venv_dir}” 命令创建一个虚拟环境,然后再通过 "${python_cmd}" -u "${LAUNCH_SCRIPT}" "$@” 执行launch.py 文件安装依赖。

if [[ $use_venv -eq 1 ]] && [[ -z "${VIRTUAL_ENV}" ]];
then
    printf "n%sn" "${delimiter}"
    printf "Create and activate python venv"
    printf "n%sn" "${delimiter}"
    cd "${install_dir}"/"${clone_dir}"/ || { printf "e[1me[31mERROR: Can't cd to %s/%s/, aborting...e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
    if [[ ! -d "${venv_dir}" ]]
    then
        "${python_cmd}" -m venv "${venv_dir}"
        first_launch=1
    fi
# shellcheck source=/dev/null
    if [[ -f "${venv_dir}"/bin/activate ]]
    then
        source "${venv_dir}"/bin/activate
    else
        printf "n%sn" "${delimiter}"
        printf "e[1me[31mERROR: Cannot activate python venv, aborting...e[0m"
        printf "n%sn" "${delimiter}"
        exit 1
    fi
else
    printf "n%sn" "${delimiter}"
    printf "python venv already activate or run without venv: ${VIRTUAL_ENV}"
    printf "n%sn" "${delimiter}"
fi

对于一些朋友,它的默认Python3解释器可能不是3.10.x,这时候可以利用 conda 先预装一个虚拟环境,这样 webui.sh 识别到的就是3.10.x 版本

$ conda create -n sd_webui_env
$ conda activate sd_webui_env
$ conda install python=3.10
$ python3 --version
Python 3.10.13
# 最好使用国内镜像源
$ pip config list
global.index-url='https://mirrors.aliyun.com/pypi/simple/'

有朋友可能还会疑惑,我如果用 conda 创建了一个虚拟环境,那么后续依赖的安装是不是在这个 conda 环境下?其实不是,因为在 webui.sh 脚本,默认会通过 python3 -m venv venv 再创建一个虚拟环境,并且通过 source "${venv_dir}"/bin/activate 进入虚拟环境,所以后续依赖的安装其实在 venv 目录下。如果你想安装在 conda 上,就得修改 webui.sh 脚本。

提前拷贝项目,因为 webui.sh 脚本会自动识别是否有 .git 目录,这主要是为后面Github加速准备

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

stable-diffusion-webui 执行 webui.sh 的时候,还会从Github下载其他项目,提前clone项目,可以修改项目地址,用这个进行加速[1] (针对网速不好的朋友)

代码位置在launch_utils.py 的 prepare_environment 函数

看网上说v1-5-pruned-emaonly.safetensors模型下载挺慢(看了有4G),如果担心的朋友可以提前下载后放到 stable-diffusion-webui/models/Stable-diffusion/ 目录下,下载地址 https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors

$ wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
$ mv v1-5-pruned-emaonly.safetensors ./models/Stable-diffusion/

上面都准备好后,就可以使用 webui.sh 安装了

$ bash webui.sh

这是我遇到的一个报错,原因是因为 httpx[socks] 在zsh的识别错误问题:

错误信息如下:

raise ImportError(
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.

解决办法如下:

$ source venv/bin/activate
$ pip install httpx[socks]           
zsh: no matches found: httpx[socks]
# 要加上单引号
$ pip install 'httpx[socks]'

终于可以跑图了,整体安装下来还是比较简单的

参考教程

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

Linux上如何使用Stable Diffusion WebUI – 掘金[2]

参考资料

[1]用这个进行加速: https://mirror.ghproxy.com/

[2]Linux上如何使用Stable Diffusion WebUI – 掘金: https://juejin.cn/post/7208946311886372924

0