这是一个用于在 RunPod Serverless 平台上部署 Stable Diffusion WebUI (AUTOMATIC1111) 的 Docker 镜像项目。
它将 WebUI 封装为一个 Serverless Worker,通过 RunPod API 处理图像生成请求,非常适合构建按需付费的 AI 绘图应用。
txt2img (文生图)img2img (图生图)ControlNet (姿态/边缘控制等)LoRA如果你想快速调试而不构建 Docker 镜像,可以直接在 RunPod Pod 上运行:
pytorch/pytorch:2.1.2-cuda12.1-cudnn8-runtime (Python 3.10)将项目代码上传到 Pod,然后运行:
cd /workspace/你的项目目录
chmod +x setup_dev.sh
./setup_dev.sh
setup_dev.sh 会自动完成:
cd /workspace/webui
./start.sh
看到 Model loaded in ...s 和 WebUI API Service is ready 即表示成功!
在 Pod 终端创建测试脚本:
cat > test_txt2img.py << 'EOF'
import requests
url = "http://127.0.0.1:3000/sdapi/v1/txt2img"
payload = {
"prompt": "a cute cat, high quality, 8k",
"steps": 20,
"width": 512,
"height": 512
}
response = requests.post(url, json=payload, timeout=120)
if response.status_code == 200:
print("Success! Image generated.")
else:
print(f"Error: {response.status_code}")
EOF
python test_txt2img.py
当你在 Pod 上调试完成后,可以构建镜像用于 Serverless 部署。
在项目根目录下运行以下命令构建镜像:
# 请将 your-username 替换为你的 Docker Hub 用户名
docker build -t your-username/sd-runpod-serverless:v1 .
注意:镜像中不包含模型文件,模型需要通过 Network Volume 挂载。
将镜像推送到 Docker Hub(或其他容器镜像仓库),以便 RunPod 拉取:
docker push your-username/sd-runpod-serverless:v1
models/Stable-diffusion/ 目录推荐模型:
wget -O sd15.safetensors https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
wget -O sd_xl_turbo.safetensors https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors
SD WebUI Serverless v1.10.1your-username/sd-runpod-serverless:v1 (你推送的镜像地址)10 GB (镜像本身不大)/workspace/webui/models/Stable-diffusion部署完成后,你会获得一个 Endpoint ID。使用 RunPod SDK 或 HTTP 请求调用。
Worker 接收的 input 对象包含 api_name 和对应的参数。
{
"input": {
"api_name": "txt2img",
"prompt": "masterpiece, best quality, 1girl, looking at viewer, solo, upper body, highres, 8k",
"negative_prompt": "easynegative, low quality, bad anatomy",
"steps": 25,
"width": 512,
"height": 768,
"sampler_name": "Euler a",
"cfg_scale": 7
}
}
{
"input": {
"api_name": "getModels"
}
}
在 rp_handler.py 中定义了所有支持的接口:
txt2img: POST /sdapi/v1/txt2imgimg2img: POST /sdapi/v1/img2imgpng-info: POST /sdapi/v1/png-infogetModels: GET /sdapi/v1/sd-modelsgetOptions: GET /sdapi/v1/optionssetOptions: POST /sdapi/v1/optionsgetControlNetModels: GET /controlnet/model_listgetControlNetModules: GET /controlnet/module_listgetControlNetDetect: POST /controlnet/detectgetLora: GET /sdapi/v1/lorasA: Stable Diffusion 生态(PyTorch, xformers 等)对 Python 3.10 的支持最好,预编译包最全,可以避免编译失败的问题。
no module 'xformers'?A: xformers 是可选的加速库,没有它也能运行,只是速度会慢 20-30%。如果需要安装:pip install xformers。
A:
A: RunPod Pod 的 /workspace 目录默认是持久化的,即使停止 Pod 再启动,数据依然保留。
如果你有 NVIDIA GPU,可以在本地运行测试:
docker run --gpus all -p 3000:3000 \
-v /path/to/your/models:/workspace/webui/models/Stable-diffusion \
your-username/sd-runpod-serverless:v1
容器启动后,访问 http://localhost:3000/docs 查看 API 文档。
nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04MIT License
115 commits
Python
87.3%
Shell
9.8%
Dockerfile
2.9%
这是一个用于在 RunPod Serverless 平台上部署 Stable Diffusion WebUI (AUTOMATIC1111) 的 Docker 镜像项目。
它将 WebUI 封装为一个 Serverless Worker,通过 RunPod API 处理图像生成请求,非常适合构建按需付费的 AI 绘图应用。
txt2img (文生图)img2img (图生图)ControlNet (姿态/边缘控制等)LoRA如果你想快速调试而不构建 Docker 镜像,可以直接在 RunPod Pod 上运行:
pytorch/pytorch:2.1.2-cuda12.1-cudnn8-runtime (Python 3.10)将项目代码上传到 Pod,然后运行:
cd /workspace/你的项目目录
chmod +x setup_dev.sh
./setup_dev.sh
setup_dev.sh 会自动完成:
cd /workspace/webui
./start.sh
看到 Model loaded in ...s 和 WebUI API Service is ready 即表示成功!
在 Pod 终端创建测试脚本:
cat > test_txt2img.py << 'EOF'
import requests
url = "http://127.0.0.1:3000/sdapi/v1/txt2img"
payload = {
"prompt": "a cute cat, high quality, 8k",
"steps": 20,
"width": 512,
"height": 512
}
response = requests.post(url, json=payload, timeout=120)
if response.status_code == 200:
print("Success! Image generated.")
else:
print(f"Error: {response.status_code}")
EOF
python test_txt2img.py
当你在 Pod 上调试完成后,可以构建镜像用于 Serverless 部署。
在项目根目录下运行以下命令构建镜像:
# 请将 your-username 替换为你的 Docker Hub 用户名
docker build -t your-username/sd-runpod-serverless:v1 .
注意:镜像中不包含模型文件,模型需要通过 Network Volume 挂载。
将镜像推送到 Docker Hub(或其他容器镜像仓库),以便 RunPod 拉取:
docker push your-username/sd-runpod-serverless:v1
models/Stable-diffusion/ 目录推荐模型:
wget -O sd15.safetensors https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
wget -O sd_xl_turbo.safetensors https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors
SD WebUI Serverless v1.10.1your-username/sd-runpod-serverless:v1 (你推送的镜像地址)10 GB (镜像本身不大)/workspace/webui/models/Stable-diffusion部署完成后,你会获得一个 Endpoint ID。使用 RunPod SDK 或 HTTP 请求调用。
Worker 接收的 input 对象包含 api_name 和对应的参数。
{
"input": {
"api_name": "txt2img",
"prompt": "masterpiece, best quality, 1girl, looking at viewer, solo, upper body, highres, 8k",
"negative_prompt": "easynegative, low quality, bad anatomy",
"steps": 25,
"width": 512,
"height": 768,
"sampler_name": "Euler a",
"cfg_scale": 7
}
}
{
"input": {
"api_name": "getModels"
}
}
在 rp_handler.py 中定义了所有支持的接口:
txt2img: POST /sdapi/v1/txt2imgimg2img: POST /sdapi/v1/img2imgpng-info: POST /sdapi/v1/png-infogetModels: GET /sdapi/v1/sd-modelsgetOptions: GET /sdapi/v1/optionssetOptions: POST /sdapi/v1/optionsgetControlNetModels: GET /controlnet/model_listgetControlNetModules: GET /controlnet/module_listgetControlNetDetect: POST /controlnet/detectgetLora: GET /sdapi/v1/lorasA: Stable Diffusion 生态(PyTorch, xformers 等)对 Python 3.10 的支持最好,预编译包最全,可以避免编译失败的问题。
no module 'xformers'?A: xformers 是可选的加速库,没有它也能运行,只是速度会慢 20-30%。如果需要安装:pip install xformers。
A:
A: RunPod Pod 的 /workspace 目录默认是持久化的,即使停止 Pod 再启动,数据依然保留。
如果你有 NVIDIA GPU,可以在本地运行测试:
docker run --gpus all -p 3000:3000 \
-v /path/to/your/models:/workspace/webui/models/Stable-diffusion \
your-username/sd-runpod-serverless:v1
容器启动后,访问 http://localhost:3000/docs 查看 API 文档。
nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04MIT License
115 commits
Python
87.3%
Shell
9.8%
Dockerfile
2.9%