Featured image of post 在CPU上跑Stable Diffusion AI绘画

在CPU上跑Stable Diffusion AI绘画

没有GPU怎么办?尽情压榨CPU!在Ubuntu系统上部署Stable Diffusion Webui

前言

有一天,我从家里后院挖出来一台双路E5服务器,洗干净发现还可以用,但不知道应该跑些啥,索性就跑一个之前没怎么尝试过的内容——AI绘画

相对来说,AI绘画并不需要特别强的时效性,不会像LLM模型那样需要即时回复的算力,所以对于我来说,一边做着自己的事,另一边让服务器自己默默的去跑,并不是很在乎它到底需要多长的时间

服务器部分配置:E5-2680v4 X2,64G DDR4,500G SSD,NO GPU

本文将以Ubuntu 24.04,Stable Diffusion WebUI v1.10.1,AnythingXL Beta5模型为例,由于服务器并不在我身边,我无法提供在满负载下服务器的噪音和温度,当然应该不会有人把服务器放在需要安静的地方吧

起步

1.安装必要环境

连接上你的服务器,并取得ROOT用户权限,更新部分软件包

sudo apt update
sudo apt install -y python3 python3-venv python3-dev git wget
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
sudo apt install -y libgl1 libglib2.0-0 libsm6 libxrender1 libxext6

Stable Diffusion WebUI的推荐Python版本为3.10,而Ubuntu 24.04系统默认安装了Python 3.12,所以我们需要 pyenv 来安装其他版本的Python

首先创建一个名为 webui 的用户来运行WebUI,默认不允许以ROOT用户运行,通过以下指令创建并切换到一个无密码的用户

sudo useradd -m -s /usr/sbin/nologin webui
sudo usermod -s /bin/bash webui
sudo -u webui -i

webui 用户下安装 pyenv

curl https://pyenv.run | bash
#安装完成后,通过以下命令将pyenv添加到环境变量,逐条运行
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"

运行 pyenv --version 检验安装成功,创建一个Python版本为3.10.6的虚拟环境并激活

pyenv install 3.10.6
pyenv virtualenv 3.10.6 webui
pyenv activate webui

2.拉取Stable Diffusion WebUI项目和模型

webui 用户下,拉取项目

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

修改适用于 CPU-Only 环境的参数和库,编辑项目目录中的 webui-user.sh 文件,添加以下内容

export COMMANDLINE_ARGS="--skip-torch-cuda-test --use-cpu all --no-half --opt-sdp-attention --precision full"
export TORCH_COMMAND="pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu"

注意:如果你的服务器网络受限,请注意替换pip,gitclone等下载源的镜像链接以加快下载

保存后运行目录中的 webui.sh 启动WebUI,第一次启动成功后会拉取一个默认模型,稍后可以删除

拉取模型,Civitai并不提供拉取功能,我们需要手动获取直链

打开 万象熔炉 | Anything XL - XL | Stable Diffusion XL Checkpoint | Civitai 并注册一个账户,然后点击模型页面的 Download ,等待浏览器拉起下载,我们将下载链接复制下来,不需要让浏览器下载,直接取消即可,通常是一个 CloudFlare R2存储桶的链接

在命令行中下载模型,注意替换你的下载直链

cd models/Stable-diffusion
wget "your-direct-url" -O AnythingXL_xl.safetensors

3.优化与启动

双路E5 2680v4总线程数为56,需要设置环境变量来使Stable Diffusion调用全部线程以发挥CPU最大性能,编辑项目文件夹下的 webui-user.sh

在底部追加以下内容

export OMP_NUM_THREADS=56
export MKL_NUM_THREADS=56
export OPENBLAS_NUM_THREADS=56
export NUMEXPR_NUM_THREADS=56
export VECLIB_MAXIMUM_THREADS=56

提示:一些其他文章中建议不要设置为所有线程,各线程调度之间会有性能损失,经过我的实际测试下来,在应用32线程和56线程时分别生成同一个768x1280的图片时,所需的时间分别为9min20sec和7min46sec,如果你的服务器还有其他服务正在运行,请注意保留一定的性能

不需要使用 xformers 或 --medvram 等优化功能,因为这些只对 GPU 有效,注意经常监测你的服务器的温度和负载等运行状态,以防高负载对硬件造成伤害

设置好后就可以启动了,运行 webui.sh 等待加载完成后,打开本地链接 http://127.0.0.1:7860 即可,运行时你可以在ROOT用户下使用 htop 命令来监测各个线程的负载情况 (如未安装 htop 使用 apt install htop 来安装)

成品欣赏

Seed:3665112698

Seed:3269296543

Prompt来源 万象熔炉 | Anything XL - XL | Stable Diffusion XL Checkpoint | Civitai

常见问题

1.Tokenizers报错

AnythingXL模型需要 openai/clip-vit-large-patch14 模型依赖,不过在新版本的WebUI似乎不会自动下载这个模型,请在启动前加入以下环境变量以开启下载

export force_download=True

如果你的服务器网络受限,注意替换 Huggingface 等平台的镜像链接,例如 export HF_ENDPOINT=https://hf-mirror.com

结语

没有GPU也没有关系,用CPU也是能跑的,本文可能没有涵盖到所有可能的错误,如果你有什么解决不了的问题欢迎讨论

版权

本文章隶属于 DDverse ,遵循 © CC BY-NC-SA 4.0 协议,如需转载请保留来源并在必要的时候告知我