部署

1. 安装conda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Conda 是一个强大的命令行工具
文档:
https://docs.conda.io/projects/conda/en/stable/user-guide/install/linux.html
https://docs.anaconda.com/miniconda/

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh

# 初始化新安装的 Miniconda
~/miniconda3/bin/conda init bash

# vim /etc/profile
CONDA_HOME=/root/miniconda3
export PATH=$PATH:/usr/local/nodejs-v20.10.0/bin:$CONDA_HOME/bin
source /etc/profile

2. 使用conda

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 创建虚拟环境
conda create -n env_name(环境名称) python=3.7(对应的python版本号)

# 激活虚拟环境
conda activate env_name(环境名称)

# 退出虚拟环境
deactivate env_name(环境名称)

# 删除虚拟环境
conda remove -n env_name(环境名称) --all

# 查看已创建的虚拟环境
conda env list
或 conda info -e
或 conda info --env

# 修改某个虚拟环境的名字
## 进入旧环境
conda activate old_name
## 克隆旧环境
conda create -n new_name --clone old_name
## 退出旧环境
conda deactivate
## 删除旧环境
conda remove -n old_name --all

# 查看conda的信息
conda info
1
2
3
4
5
6
# conda的环境管理
conda info -e             查看当前已安装的环境
conda create -n py3 python=3.10.6  添加3.10版本的Python环境
activate py3           切换到Python3.10环境
conda deactivate             返回默认的Python环境
conda remove -n py3 --all      删除已安装的Python环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# anaconda的包管理,类似Python的pip
conda list              查看当前环境下已安装的包
conda list -n py3          查看指定环境的已安装的包
conda search selenium        查找package信息
conda install -n py3 selenium 指定环境安装package,不加-n则安装在当前活跃环境
conda update -n py3 selenium 指定环境更新package,不加-n则更新在当前活跃环境
conda remove -n py3 selenium 删除package,不加-n则删除在当前活跃环境
conda clean --all 清理(应该是pkgs文件下的)安装包缓存

# 使用conda管理conda和python的版本
conda update conda   更新conda
conda update anaconda 更新anaconda
conda update python 更新python,假设当前环境是3.6,则更新3.6.x系列版本

# 安装包
conda install package_name

# 安装指定版本的包
## 若环境中有其他版本的,先卸载
conda uninstall h5py
conda install h5py==2.10.0 再安装指定版本的
## 直接安装指定版本的
conda install h5py==2.10.0

# conda更改默认下载源
conda config --show channels
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# http://mirrors.aliyun.com/pypi/simple/
# https://pypi.tuna.tsinghua.edu.cn/simple/
# http://pypi.mirrors.ustc.edu.cn/

/root/stable-diffusion-webui/venv/bin/python -m pip install torch==2.1.2 torchvision==0.16.2
cp -ra * /root/stable-diffusion-webui/venv/lib/python3.10/site-packages/

/root/stable-diffusion-webui/venv/bin/python -m pip install --upgrade transformers
/root/stable-diffusion-webui/venv/bin/python -m pip install llama_cpp_python-0.2.90-cp310-cp310-linux_x86_64.whl

3. CUDA 环境

image-20240903174054891

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
默认 stable-diffusion-webui 运行使用的是 GPU 算力,也就是说需要用到 Nvidia 显卡(配置越高,绘图越快)。这里我们需要安装 CUDA 驱动,先确定一下电脑能安装的 CUDA 版本,桌面右下角->右键 NVIDIA 设置图标->NVIDIA 控制面板:可以看到我的电脑的显示的是 NVIDIA CUDA 11.7.102 driver,所以我的电脑要安装的 CUDA 版本不能超过 11.7。注意:高版本显卡是可以安装低版本的 CUDA 驱动的,比如我也可以安装经典的 10.2 版本,但是安装 11.7 版本可以获得更高的 GPU 运行效率,所以一般来说推荐安装显卡支持的最高 CUDA 版本。

# 在下面的网址中找到对应的 CUDA 版本进行安装:
CUDA 官方归档:https://developer.nvidia.com/cuda-toolkit-archive

# https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-ubuntu2204-11-7-local_11.7.0-515.43.04-1_amd64.deb
dpkg -i cuda-repo-ubuntu2204-11-7-local_11.7.0-515.43.04-1_amd64.deb
cp /var/cuda-repo-ubuntu2204-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
apt-get update
apt-get -y install cuda
nvcc --version

# 最新
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-6
1
注:如果你没有 Nvidia 显卡,也可以通过给 stable-diffusion-webui 指定运行参数 --use-cpu sd,让其使用 CPU 算力运行,但是非常不建议你这么做,CPU 算力跟 GPU 算力相比简直天差地别,可能 GPU 只需要 10 秒就能绘制完成,而 CPU 却要 10 分钟,这不是开玩笑的。另外,如果你的显卡内存不多,建议 4G 的显卡加上 --medvram 启动参数,2G 的显卡加上 --lowvram 启动参数。怎么配置启动参数我们后面说。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 遇到问题1:
dpkg: error processing package cuda (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
nvidia-dkms-515
cuda-drivers-515
cuda-drivers
nvidia-driver-515
cuda-runtime-11-7
cuda-demo-suite-11-7
cuda-11-7
cuda
E: Sub-process /usr/bin/dpkg returned an error code (1)

解决方法:
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt update

# 遇到问题2:
The following packages have unmet dependencies:
libcuinj64-11.5 : Depends: libnvidia-compute-495 (>= 495) but it is not going to be installed or
libnvidia-compute-495-server (>= 495) but it is not installable or
libcuda.so.1 (>= 495) or
libcuda-11.5-1
libnvidia-ml-dev : Depends: libnvidia-compute-495 (>= 495) but it is not going to be installed or
libnvidia-compute-495-server (>= 495) but it is not installable or
libnvidia-ml.so.1 (>= 495)
nvidia-cuda-dev : Depends: libnvidia-compute-495 (>= 495) but it is not going to be installed or
libnvidia-compute-495-server (>= 495) but it is not installable or
libcuda.so.1 (>= 495) or
libcuda-11.5-1
Recommends: libnvcuvid1 but it is not installable
E: Unable to correct problems, you have held broken packages.

解决方法:
apt install libnvidia-compute-495
apt install nvidia-cuda-toolkit
nvcc --version

# 遇到问题3
RuntimeError: Couldn't install open_clip
解决方法:
python -m pip install git+https://gitee.com/ufhy/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b --prefer-binary

4. SD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 克隆stable-diffusion的代码库
cd
git clone https://github.com/CompVis/stable-diffusion.git

vim ~/stable-diffusion/environment.yaml
修改:name: jwgod

# 创建并激活名为jwgod的conda环境:
conda env create -f environment.yaml
conda activate jwgod

# 安装stable-diffusion所需的其他依赖
# pip install git+https://github.com/huggingface/transformers.git
pip install git+https://github.com/CompVis/taming-transformers.git

# 配置环境变量
export DATA_DIR=/root/sd_conf/sd_data
export TORCH_EXTENSIONS_DIR=/root/sd_conf/torch_extensions

# 步骤6: 运行stable-diffusion
cd stable-diffusion
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --jwgod

5. webui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# https://github.com/AUTOMATIC1111/stable-diffusion-webui
# https://github.com/Sygil-Dev/sygil-webui
# AUTOMATIC1111 的 stable-diffusion-webui 是目前功能最多最好用的

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

# 启动项目
# 在安装配置好运行环境之后,直接运行工程下的 webui-user.bat 文件即可(如果是类 Unix 系统,则运行 webui-user.sh)。首次启动会自动下载一些 Python 依赖库(具体哪些库请看工程下的 requirements.txt) ,以及项目需要用到的配置和模型文件(比如:v1-5-pruned-emaonly.safetensors,将近 4 个 G~),初始化一次之后,下次启动就快了
安装WebUI:bash webui.sh
---
Launching Web UI with arguments:
...
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
---
看到这个提示就说明成功运行起来了,打开网址就可以看到程序的运行界面了
1
2
3
4
5
6
7
8
9
10
11
12
# 如果是root用户执行,不出意外,将出现如下异常:ERROR: This script must not be launched as root, aborting...

注释掉webui.sh中关于root权限的判断
# can_run_as_root=0 默认是0,修改为1
can_run_as_root=1

# 运行时报错:RuntimeError: Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check
vim webui-user.sh
export COMMANDLINE_ARGS="--skip-torch-cuda-test"

# 访问WebUI
启动成功后,访问http://127.0.0.1:7860

使用

1
2
3
# stable-diffusion-webui 的功能很多,主要有如下2个:
文生图(text2img):根据提示词(Prompt)的描述生成相应的图片
图生图(img2img):将一张图片根据提示词(Prompt)描述的特点生成另一张新的图片

1. 文生图

参数 说明
Prompt 提示词(正向)
Negative prompt 消极的提示词(反向)
Width & Height 要生成的图片尺寸。尺寸越大,越耗性能,耗时越久。
CFG scale AI 对描述参数(Prompt)的倾向程度。值越小生成的图片越偏离你的描述,但越符合逻辑;值越大则生成的图片越符合你的描述,但可能不符合逻辑。
Sampling method 采样方法。有很多种,但只是采样算法上有差别,没有好坏之分,选用适合的即可
Sampling steps 采样步长。太小的话采样的随机性会很高,太大的话采样的效率会很低,拒绝概率高(可以理解为没有采样到,采样的结果被舍弃了)。
Seed 随机数种子。生成每张图片时的随机种子,这个种子是用来作为确定扩散初始状态的基础。不懂的话,用随机的即可。
1
2
3
4
5
6
7
8
9
10
# 接下来我们来生成一张赛博朋克风格的猫咪图片,配置以下参数后,点击 "Generate" 即可:
Prompt:a cute cat, cyberpunk art, by Adam Marczyński, cyber steampunk 8 k 3 d, kerem beyit, very cute robot zen, beeple |
Negative prompt:(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, flowers, human, man, woman

CFG scale:6.5
Sampling method:Euler a
Sampling steps:26
Seed:1791574510

注:提示词(Prompt)越多,AI 绘图结果会更加精准,另外,目前中文提示词的效果不好,还得使用英文提示词。

2. 模型文件

1
2
3
4
5
6
7
8
9
10
11
12
13
# 左上角 Stable Diffusion checkpoint 的值怎么跟之前截图里的不一样?这是因为我换了一个模型文件,还记得前面提到那个将近 4 个 G 大小的模型文件(v1-5-pruned-emaonly.safetensors)吗?那是 stable-diffusion-webui 的默认模型文件,用这个模型文件生成出来的图片比较丑,因此我换了另一个模型文件。模型文件下载的网站几个,比较出名的就是 civitai,这上面共享的都是别人训练好的模型。

# 模型文件下载地址:
civitai:https://civitai.com/
默认的 v1-5-pruned-emaonly

# 根据你要生成的图片风格(比如:动漫、风景),挑选合适的模型查看,前面那个文生图的例子,使用的就是这个 Deliberate 模型,直接点击 "Download Latest" 即可下载该模型文件
将下载好的模型文件放到 stable-diffusion-webui\models\Stable-diffusion 目录下:
放置好模型文件之后,需要重启一下 stable-diffusion-webui(执行 webui-user.bat)才能识别到
这些模型文件一般会附带一组效果图,点击任意一张,就可以看到生成该效果图的一些参数配置
把这些参数配置到 stable-diffusion-webui 中,点击 "Generate" 就可以生成类似效果的图片了

注:模型文件有 2 种格式,分别是 .ckpt(Model PickleTensor) 和 .safetensors(Model SafeTensor),据说 .safetensors 更安全,这两种格式 stable-diffusion-webui 都支持,随意下载一种即可。
1
2
3
4
5
6
7
注:因为 AI 绘图带有随机性质,所以生成出来的图片跟效果图不一定完全一样。

# 文生图功能有很多东西可以发掘,你可以用它来生成世界上独一无二的图片,而要用好文生图功能,提示词(Prompt)是必须掌握的重中之重,它是有语法规则的,在此推荐两篇对 Prompt 详细说明的文章:
全网 Stable Diffusion Prompt 运用技巧:https://www.bilibili.com/read/cv19903784
Prompt 工具網站:https://www.accucrazy.com/prompt-tools-ai/

Downloading: "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors" to /root/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors

3. 工程配置

1
2
# stable-diffusion-webui 是可以配置启动参数的,这是官方的 wiki:
配置参数文档:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Command-Line-Arguments-and-Settings
参数 说明
–listen 默认启动绑定的 ip 是 127.0.0.1,只能是你自己电脑可以访问 webui,如果你想让同个局域网的人都可以访问的话,可以配置该参数(会自动绑定 0.0.0.0 ip)
–port xxx 默认端口是 7860,如果想换个端口,可以配置该参数,例如:–port 8888
–gradio-auth username:password 如果你希望给 webui 设置登录密码,可以配置该参数,例如:–gradio-auth GitLqr:123456
–use-cpu 默认使用 GPU 算力(需要 Nvidia 显卡),如果没显卡,可以配置该参数,改用 CPU 算力。
–medvram 为低显存(比如:4G)启用模型优化,会牺牲一点速度。
–lowvram 为极低显存(比如:2G)启用模型优化,会牺牲很多速度。
–autolaunch 启动时自动打开浏览器访问 webui

常用参数

1
2
3
4
# 要配置这些参数很简单,打开 webui-user.sh,把你需要配置的参数添加到 COMMANDLINE_ARGS 后面即可:
export COMMANDLINE_ARGS="--listen --port 8888 --gradio-auth jwgod:123456 --autolaunch"

bash webui.sh
1
2
3
4
5
6
7
# API 接口服务
参数 --api,可以在启动 stable-diffusion-webui 的同时,启动一个接口服务,在 COMMANDLINE_ARGS 后面追加上 --api
export COMMANDLINE_ARGS="--listen --port 8888 --gradio-auth jwgod:123456 --autolaunch --api"
访问:http://0.0.0.0:8888/docs

# 可以通过编写程序的方式,使用文生图、图生图等功能了,关于接口传参格式等要求,参见官方 wiki:
官方 api 说明文档:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/API#api-guide-by-kilvoctu
1
2
# 允许不安全的扩展访问
export COMMANDLINE_ARGS="--listen --port 8888 --gradio-auth jwgod:123456 --autolaunch --api --enable-insecure-extension-access"

安装插件

1
2
3
# 在stable-diffusion-webui中,安装插件有2种方式
1.进入Extensions选项卡,点击Install from URL,输入框以下Git仓库地,然后点击黄色按钮Install完成安装
2.进入Extensions选项卡,点击Available,搜索插件名称,然后点击按钮Install完成安装
1
2
3
4
# 中文汉化插件
进入Extensions选项卡,点击Install from URL,输入框以下Git仓库地,然后点击黄色按钮Install完成安装
https://github.com/VinsonLaro/stable-diffusion-webui-chinese.git
点击Settings,左侧点击User interface界面,在Localization,选择Chinese-All或者Chinese-English。然后点击黄色按钮Apply settings,再点击右侧的Reload UI完成汉化
1
2
3
4
5
6
7
8
# civitai插件
https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper.git

# 玩AI绘图,https://civitai.com/这个网站应该不用多说,在Account settings中创建一个API KEY
在设置项中,右侧选择Civitai Helper,配置上面申请的API Key,至于Proxy地址看自己网络情况

# 输入Civitai中的模型地址,然后执行1、2、3步骤进行模型下载
https://civitai.com/models/36520/ghostmix
1
2
3
4
5
6
7
8
# 提示词插件 oldsix-prompt
https://github.com/thisjam/sd-webui-oldsix-prompt.git

# sd-webui-prompt-all-in-one是一个基于 stable-diffusion-webui 的扩展,旨在提高提示词/反向提示词输入框的使用体验。它拥有更直观、强大的输入界面功能,它提供了自动翻译、历史记录和收藏等功能,它支持多种语言,满足不同用户的需求
https://github.com/Physton/sd-webui-prompt-all-in-one.git

# 提示词反推插件
# https://github.com/toriato/stable-diffusion-webui-wd14-tagger.git
1
2
3
4
5
6
7
8
# 图像浏览器
https://github.com/AlUlkesh/stable-diffusion-webui-images-browser.git

# 图像分辨率调整
https://github.com/thomasasfk/sd-webui-aspect-ratio-helper.git

# 提示词的补全/翻译
https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git
1
2
# ControlNet插件
Controlnet插件是玩转Stable Diffusion一个必不可少插件,而且功能繁多,诸如文字嵌入图片、花式二维码、图中图,指定人物姿势都是通过这一插件来实现的
1
2
3
4
5
# Roop插件
这个插件主要用于图片换脸,安装难度较高

bb15a17d0ca1154cf440a16d522ca533
05387915bb8ff5540306d6303cdff037