【StableDiffusion容器化部署】分步指南
使用Docker部署和管理Stable Diffusion环境可以有效解决依赖冲突、环境隔离和可移植性问题。以下是分步指南和相关技术细节:
1. 基础环境准备
1.1 安装Docker和GPU支持
- 安装Docker Engine:参考官方文档
- 配置NVIDIA Container Toolkit:
验证GPU支持:# 安装NVIDIA驱动和CUDA sudo apt-get install nvidia-driver-535 nvidia-container-toolkit sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi
1.2 获取Stable Diffusion资源
- 模型权重(如
v1-5-pruned-emaonly.safetensors
)需从Hugging Face下载 - 创建本地目录存储模型:
mkdir -p ~/stable-diffusion/models/ ~/stable-diffusion/outputs
2. Docker化部署方案
2.1 使用预构建镜像(快速方案)
- 运行AUTOMATIC1111 WebUI官方镜像:
访问docker run -d --gpus all \ -p 7860:7860 \ -v ~/stable-diffusion/models:/app/models \ -v ~/stable-diffusion/outputs:/app/outputs \ --name sd-webui \ ghcr.io/automatic1111-webui/stable-diffusion-webui:latest
http://localhost:7860
2.2 自定义Dockerfile(推荐生产环境)
# 基于PyTorch官方镜像
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
# 安装依赖
RUN apt-get update && \
apt-get install -y git libgl1 libglib2.0-0
# 克隆WebUI仓库
RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui /app
WORKDIR /app
# 配置模型目录
ENV CLI_ARGS="--listen --no-half-vae --skip-torch-cuda-test"
VOLUME /app/models
VOLUME /app/outputs
# 安装Python依赖
RUN pip install -r requirements_versions.txt
# 启动命令
CMD ["python", "launch.py", "--xformers"]
构建镜像:
docker build -t sd-webui:custom .
3. 容器管理实践
3.1 启动容器(支持GPU)
docker run -d --gpus all \
-p 7860:7860 \
-v ~/stable-diffusion/models:/app/models \
-v ~/stable-diffusion/outputs:/app/outputs \
--name sd-webui \
sd-webui:custom
3.2 使用Docker Compose(多服务编排)
docker-compose.yml
示例:
version: '3.8'
services:
sd-webui:
image: sd-webui:custom
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ports:
- "7860:7860"
volumes:
- ~/stable-diffusion/models:/app/models
- ~/stable-diffusion/outputs:/app/outputs
restart: unless-stopped
启动服务:
docker compose up -d
4. 高级管理技巧
4.1 模型热更新
- 将模型放入挂载目录后,通过WebUI界面直接刷新即可识别新模型
- 或通过API触发重载:
docker exec sd-webui curl -X POST http://localhost:7860/sdapi/v1/refresh-checkpoints
4.2 性能优化
- 启用xFormers加速:
ENV COMMANDLINE_ARGS="--xformers"
- 限制GPU内存使用:
docker run ... --env NVIDIA_VISIBLE_DEVICES=0 --env NVIDIA_DRIVER_CAPABILITIES=compute,utility
4.3 版本控制
- 使用多阶段构建管理不同SD版本:
FROM sd-base:1.5 AS v1.5 COPY models/v1.5 /app/models FROM sd-base:2.1 AS v2.1 COPY models/v2.1 /app/models
5. 监控与维护
- 查看日志:
docker logs -f sd-webui --tail 100
- 资源监控:
docker stats sd-webui
- 定期清理旧镜像:
docker image prune -a --filter "until=240h"
常见问题解决
-
CUDA内存不足错误:
- 添加
--medvram
或--lowvram
启动参数 - 减少批量生成数量
- 添加
-
模型加载失败:
- 验证模型文件哈希值
- 检查挂载目录权限:
chmod -R 755 ~/stable-diffusion/models
-
WebUI无法访问:
- 确保启动参数包含
--listen
- 检查防火墙设置:
sudo ufw allow 7860/tcp
- 确保启动参数包含
通过这种容器化方案,可以实现:
- 快速部署多版本SD环境
- 独立隔离的GPU资源分配
- 模型与配置的版本控制
- 便捷的水平扩展能力(结合Kubernetes)
建议定期备份模型目录,并使用监控工具(如Prometheus+Grafana)进行资源使用分析。