Skip to main content

fastsdcpu 使用详解

FastSD CPU是一个可以在 CPU 上高速运行的 Stable Diffusion 版本,可部署在多种操作系统(甚至 Android )上,这里以 Linux 为例。

安装

参考 Python 使用详解 安装 Python 3.9 或 3.10 或 3.11 等。

sudo apt install git-lfs

cd /home/foobar/ git clone https://github.com/rupeshs/fastsdcpu cd fastsdcpu chmod +x *.sh TMPDIR=/home/foobar/a-big-tmp/ ./install.sh --disable-gui cd configs mkdir rupeshs cd rupeshs git clone https://hf-mirror.com/rupeshs/hypersd-sd1-5-1-step-lora cd .. mkdir Lykon cd Lykon git clone https://hf-mirror.com/Lykon/dreamshaper-8

fastsdcpu/configs/lcm-lora-models.txt内的rupeshs/hypersd-sd1-5-1-step-lora替换为/home/foobar/fastsdcpu/configs/rupeshs/hypersd-sd1-5-1-step-lora

fastsdcpu/configs/stable-diffusion-models.txt内的Lykon/dreamshaper-8替换为/home/foobar/fastsdcpu/configs/Lykon/dreamshaper-8

本地运行

cd fastsdcpu ./start-webui.sh

本地生成图像

用浏览器打开 http://127.0.0.1:7860/

Mode中选择LCM-LoRA

Models中,将LCM LoRA model设为/home/foobar/fastsdcpu/configs/rupeshs/hypersd-sd1-5-1-step-lora,将LCM LoRA base model设为/home/foobar/fastsdcpu/configs/Lykon/dreamshaper-8

Generation Settings中,勾选Use locally cached model or downloaded model folder(offline)

Text to Image中,填入提示词后点击Generate即可。

API 运行

如果不希望在fastsdcpu/results/中保存图片的,需在fastsdcpu/start-webserver.sh中的src/app.py --api的后面多加个参数--noimagesave

cd fastsdcpu ./start-webserver.sh

API 生成图像

用浏览器打开 http://127.0.0.1:8000/api/config 就可以看到之前本地生成图像一节中的设置,也就是自动生成的fastsdcpu/configs/settings.yaml中的内容。

由于每次调用/api/generate生成图像时都会自动修改fastsdcpu/configs/settings.yaml,而调用/api/generate时我们又不希望传入/home/foobar/fastsdcpu/configs/rupeshs/hypersd-sd1-5-1-step-lora这样的服务器上的绝对路径,所以需要将fastsdcpu/src/backend/models/lcmdiffusion_setting.pyclass LCMLora(BaseModel)内的默认值修改为相应的绝对路径。

这样,将 fastsdcpu 部署到某台服务器后,就可以用类似下面的代码来生成图像

    const res = await axios({
method: 'post',
url: 'http://服务器IP地址:8000/api/generate',
data: {
prompt: 'YOUR AI PROMPT TEXT',
use_offline_model: true,
use_lcm_lora: true,
image_height: 256,
image_width: 256,
},
headers: {
Accept: '*/*',
'Content-Type': 'application/json',
},
});

生成的图像数据以 base64 字符串的形式在res.data.images[0]中体现,将该字符串加上前缀data:image/png;base64,粘帖到浏览器地址栏中,就可以直接查看了。

一些 BUG 的解决方法

ImportError: dlopen: cannot load any more object with static TLS

如果碰到类似如下错误

  File "/home/foobar/fastsdcpu/env/lib/python3.9/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/home/foobar/cpython-3.9.20/install/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: dlopen: cannot load any more object with static TLS

则参考 https://github.com/pytorch/pytorch/issues/2575#issuecomment-2469427242https://www.cnblogs.com/operaculus/p/12500510.html ,在fastsdcpu/src/app.py的第一行增加一句import cv2即可。

参考

使用倚天CPU实例部署Stable Diffusion

更精简的出图项目:fastsdcpu