目前使用 Stable Diffusion 进行创作的工具主要有两个:Stable Diffusion WebUI 和 ComfyUI。本文重点介绍ComfyUI的部署使用。
ComfyUI 可定制性很强,可以让创作者搞出各种新奇的玩意,通过工作流的方式,也可以实现更高的自动化水平,创作方法更容易传播复现,支持多任务批量提交到comfyui,支持websocket对接。 但是 ComyUI 的上手门槛有点高,对 Stable Diffusion 以及各种扩展能力的原理需要有一定的理解,动手能力要求也比较高。但作为专业的软件化平台,更适合软件团队集成或二次开发有实际价值的应用。所以我们更推荐使用ComfyUI的方式替代WebUI。
环境准备
插件
- 插件管理器
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
- 翻译
git clone https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation.git
- 中文提示词输入,绘画节点
git clone https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet.git
- 美化辅助,文本补全,吸附网络
https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git
- ControlNet预处理器
https://github.com/Fannovel16/comfyui_controlnet_aux
- 分块采样器插件
https://github.com/BlenderNeko/ComfyUI_TiledKSampler.git
- 放大插件
https://github.com/ssitu/ComfyUI_UltimateSDUpscale.git
- Derfuu插件
https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes.git
模型
准备如下模型:
- stabilityai/stable-diffusion-xl-base-1.0
- stabilityai/stable-diffusion-xl-refiner-1.0
- stabilityai/sdxl-vae
- stabilityai/control-lora
- xinsir/controlnet-canny-sdxl-1.0
- vaeapprox-sdxl
- controlnet-canny-sdxl-1.0
- SargeZT/controlnet-sd-xl-1.0-softedge-dexined
- thibaudcontrolnet-openpose-sdxl-1.0
下载地址:
插件可以提前下载,也可以通过ComfyUI-Manager。我们更推荐采用手动下载的方式,个人控制性更强,后期升级维护更加可控。
#checkpoint
git clone https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
git clone https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0
#vae
git clone https://huggingface.co/stabilityai/sdxl-vae
#vaeapprox
wget https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/download/v1.0.0-pre/vaeapprox-sdxl.pt
#controlnet
git clone https://huggingface.co/stabilityai/control-lora
git clone https://huggingface.co/xinsir/controlnet-canny-sdxl-1.0
###dexined soft edge preprocessing
wget https://huggingface.co/SargeZT/controlnet-sd-xl-1.0-softedge-dexined/resolve/main/controlnet-sd-xl-1.0-softedge-dexined.safetensors
###ZoeDepth repo 中的默认参数将其着色为灰度
wget https://huggingface.co/SargeZT/controlnet-sd-xl-1.0-depth-16bit-zoe/resolve/main/depth-zoe-xl-v1.0-controlnet.safetensors
###OpenPose
wget https://huggingface.co/thibaud/controlnet-openpose-sdxl-1.0/resolve/main/control-lora-openposeXL2-rank256.safetensors
wget https://huggingface.co/thibaud/controlnet-openpose-sdxl-1.0/resolve/main/OpenPoseXL2.safetensors
git clone https://huggingface.co/kohya-ss/controlnet-lllite
base 与 refiner 模型的区别
base 模型是用来做文生图,refiner 模型是用来做图生图的。首先,使用基础模型(Base)模型生成(有噪音的)潜在变量,然后再由专门用于去噪的精修模型(refiner)进一步处理。基础模型stabilityai/stable-diffusion-xl-base-1.0
本身也可以作为独立模块使用,串联起效果更好。
模型分类简介:
Checkpoint
Checkpoint 是 SD 的核心,是最基本的必备模型,体积较大,也被称为大模型。越大的模型代表融合的元素越多,表现的效果细节越丰富。不同的大模型使用不同的图片训练而成,对应不同的风格,相当于最底层的引擎。我们在模型网站筛选 Checkpoint 就是筛选大模型。大模型后缀分两种,ckpt 和 safetensor 。一般 ckpt 融合的数据多一点,safetensor 融合的数据少一点,模型侧重不同,各有优略,不代表好坏。
VAE
VAE(Variable Auto Encoder,变量自动编码器)是一个添加到稳定扩散检查点模型中的文件,以获得更鲜艳的颜色和更清晰的图像。VAE 通常还有改善手部和面部的额外好处。模型可以内置 VAE,也可以使用一些通用的外部VAE,某些外部VAE甚至比内置VAE工作得更好。 如stabilityai/sdxl-vae
可以配合基础模型stabilityai/stable-diffusion-xl-base-1.0
使用。
ControlNet
ControlNet 是一个控制预训练图像扩散模型的神经网络。它允许输入调节图像,然后使用该调节图像来操控图像生成。它调节图像类型众多,例如涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等,这些输入都可以作为条件输入来指导生成图像的内容。
loras
低秩适应模型,在不改变原有模型的情况下去添加一些额外的低秩举证以调整模型权重。提升模型性能以及适应性
可以理解为stable diffusion(SD)模型的一种插件,和hyper-network,controlNet一样,都是在不修改SD模型的前提下,利用少量数据训练出一种画风/IP/人物,实现定制化需求,所需的训练资源比训练SD模要小很多,非常适合社区使用者和个人开发者。
hypernetworks
中文名字叫超网络,功能和embedding,lora类似,都是对生成的图片进行针对性的调整,它是一个附加到稳定扩散模型的小型神经网络,主要用于修改控制图像风格。使用比较少,有逐步被Lora 代替的趋势。
GFPGAN
GFPGAN 是开源的人脸修复算法,它利用预先训练好的面部 GAN(如 StyleGAN2)中封装的丰富和多样的先验因素进行盲脸 (blind face) 修复,旨在开发用于现
Embedding
它是一种用于提高AI绘画效果的技术,可以将一组图片的特征提取出来,保存为一个小文件,然后在生成图片时,通过输入关键词来激活这个文件,从而实现风格的转换或人物的还原。Embedding大小只有几十K或几个M,它可以同时调用多个文件进行混合。它必须基于一款模型来生成和使用
源码下载
1:下载代码仓库
git clone https://github.com/comfyanonymous/ComfyUI.git
2、下载所有插件并存放在:ComfyUI/custom_nodes/
3、根据前面准备的模型,把模型存放在指定宿主机目录,使用时挂载到容器
├── Codeformer
├── controlnet
│?? ├── control-lora
│?? ├── control-lora-openposeXL2-rank256.safetensors
│?? ├── controlnet-canny-sdxl-1.0
│?? ├── controlnet-scribble-sdxl-1.0
│?? ├── controlnet-sd-xl-1.0-softedge-dexined.safetensors
│?? ├── depth-zoe-xl-v1.0-controlnet.safetensors
│?? └── OpenPoseXL2.safetensors
├── deepbooru
│?? └── Put your deepbooru release project folder here.txt
├── GFPGAN
│?? ├── alignment_WFLW_4HG.pth
│?? ├── detection_Resnet50_Final.pth
│?? ├── GFPGANv1.4.pth
│?? └── parsing_parsenet.pth
├── hypernetworks
├── karlo
│?? └── ViT-L-14_stats.th
├── Lora
├── Stable-diffusion
│?? ├── sdxl-turbo
│?? ├── stable-diffusion-2-1
│?? ├── stable-diffusion-xl-base-1.0
│?? └── stable-diffusion-xl-refiner-1.0
├── VAE
│?? └── sdxl-vae
└── VAE-approx
└── vaeapprox-sdxl.pt
18 directories, 11 files
本地环境部署
创建虚拟环境
conda create -n comfyui python=3.10
conda activate comfyui
安装pytorch和相关依赖
#安装pytorch
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simpl
pip3 install torch torchvision torchaudio
安装相关依赖
pip install -r requirements.txt
插件相关依赖,在第一次启动时会自动安装部署
修改配置文件
cp extra_model_paths.yaml.example extra_model_paths.yaml
编辑 extra_model_paths.yaml
修改checkpoints的路径和其他模型路径,请根据你实际放置位置来修改:
vim extra_model_paths.yaml
a111:
base_path: /app/ComfyUI/
checkpoints: models/checkpoints
configs: models/configs
vae: models/VAE
loras: |
models/Lora
models/LyCORIS
upscale_models: |
models/ESRGAN
models/RealESRGAN
models/SwinIR
embeddings: embeddings
hypernetworks: models/hypernetworks
controlnet: models/controlnet
容器化部署ComfyUI
准备Dockerfile文件
FROM pytorch/pytorch:2.2.1-cuda12.1-cudnn8-runtime
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
ENV LANG=zh_CN.UTF-8
WORKDIR /app
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
RUN pip config set install.trusted-host mirrors.aliyun.com
COPY ComfyUI/ /app/ComfyUI/
WORKDIR /app/ComfyUI
RUN pip install --use-pep517 -r requirements.txt
RUN pip install -r custom_nodes/comfyui_controlnet_aux/requirements.txt
RUN pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
RUN pip install -r custom_nodes/ComfyUI_Custom_Nodes_AlekPet/ArgosTranslateNode/requirements.txt
RUN pip install -r custom_nodes/ComfyUI_Custom_Nodes_AlekPet/DeepTranslatorNode/requirements.txt
RUN pip install -r custom_nodes/ComfyUI_Custom_Nodes_AlekPet/GoogleTranslateNode/requirements.txt
RUN pip install -r custom_nodes/efficiency-nodes-comfyui/requirements.txt
EXPOSE 8188
CMD [ "python","main.py ","--port 8188"]
执行构建
docker buile -t qingcloudtech/comfyui:v1.0 .
启动容器
docker run -it --gpus all \
-p 8188:8188 \
-v /u01/workspace/models/stablediffusion:/u01/workspace/models/stablediffusion \
-v /u01/workspace/comfyui/output/:/app/ComfyUI/output \
qingcloudtech/comfyui:v1.0 python main.py
启动容器(docker-compose方式)
准备配置文件
version: '3.8'
services:
comfyui:
image: qingcloudtech/comfyui:v1.0
container_name: comfyui
command: python /app/ComfyUI/main.py
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
- /u01/workspace/models/stablediffusion/:/u01/workspace/models/stablediffusion/
- /u01/workspace/comfyui/output/:/app/ComfyUI/output
#- /u01/workspace/ComfyUI/extra_model_paths.yaml:/app/ComfyUI/extra_model_paths.yaml
network_mode: host
执行启动命令:
docker-compose up -d
演示访问:
http://127.0.0.1:8188
【Qinghub Studio 】更适合开发人员的低代码开源开发平台
【QingHub企业级应用统一部署】
【QingHub企业级应用开发管理】
【QingHub演示】
【https://qingplus.cn】