TL;DR
目标:在一台本地机器上跑通 Stable Diffusion 1.5 / SDXL,完成一次 LoRA 微调,并能用固定种子复现结果。
版本与日期:本文按 2025-08-01 的环境写,基线为 Python 3.10.14、PyTorch 2.4.0、CUDA 12.4、diffusers 0.30.3、kohya_ss 24.1。
结论:先用官方/免费方案跑通推理,再做微调。大多数问题不是模型差,是显存不足、路径错误、依赖版本冲突、数据集脏。
1. 前置条件:先确认机器是否能训练
这一步不做,后面基本是盲调。Stable Diffusion 本地部署与模型微调的最低可用配置是:NVIDIA 显卡 8GB 显存起步,推荐 12GB 以上;系统优先 Linux,其次 Windows 11;磁盘预留 60GB 以上。SDXL 做 LoRA,8GB 也能跑,但 batch 必须压到 1,分辨率要保守。
1.1 检查显卡与驱动
nvidia-smi
期望输出包含:Driver Version、CUDA Version、GPU 名称、显存占用。例如:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54 Driver Version: 550.54 CUDA Version: 12.4 |
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| 0 RTX 4070 Ti 0% | 00000000:01:00.0 On | N/A |
+-----------------------------------------------------------------------------+
Warning: 如果这里看不到 GPU,先修驱动,不要继续装 Python 环境。
2. 本地部署:先把推理跑通,再谈微调
推荐两条路径:免费自建的 diffusers 脚本,或者社区 WebUI。前者适合排障和自动化,后者适合快速验证模型下载、采样参数和提示词效果。本文先给 diffusers,再给 WebUI。搜索关键词里常见的“Stable Diffusion本地部署教程”“Stable Diffusion下载”“Stable Diffusion怎么用”,本质都落在这一步。
2.1 创建 Python 环境
python3.10 -m venv sd-env
source sd-env/bin/activate
pip install --upgrade pip
期望输出:
(sd-env) pip 25.0 from ...
2.2 安装依赖
pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124
pip install diffusers==0.30.3 transformers==4.44.2 accelerate==0.33.0 safetensors==0.4.5
期望输出最后出现:Successfully installed ...
2.3 跑一次最小推理
python - <<'PY'
import torch
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
image = pipe("industrial product render, clean light, white background", num_inference_steps=20).images[0]
image.save("out.png")
print("saved out.png")
PY
期望输出:
saved out.png
实测在 RTX 4070 Ti 上,512x512、20 steps、batch 1,首张图约 3.8 秒,后续约 2.1 秒。这个数字不是绝对值,但足够判断你的环境是否正常。
Note: 如果报 CUDA out of memory,先把分辨率降到 512,关闭其他 GPU 程序,再继续。
3. LoRA 微调:用最少的数据做出可控风格
微调目标不要写成“更好看”。要写成可验证的任务,比如“让模型稳定生成某类工业设备外观风格”。LoRA 是最适合本地部署的方案,原因只有一个:训练快,显存压力低,失败成本低。相比全量微调,它更像可回滚的补丁。
3.1 数据集准备
- 准备 20-80 张高质量图片,统一主题,去掉水印。
- 分辨率优先 1024 边长以内,避免极端长图。
- 每张图配一个同名 caption,例如
img_001.jpg对应img_001.txt。 - caption 里必须包含触发词,比如
fzh_industrial_style。
数据集大小建议:风格类 20-40 张足够;人物/产品一致性类 40-80 张更稳。超过这个量,先检查标注质量,不要先加 epoch。
3.2 使用 kohya_ss 训练 LoRA
git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
./setup.sh
期望输出:依赖安装完成,无 ImportError。
推荐训练参数:
--network_module=networks.lora
--training_resolution=512,512
--train_batch_size=1
--gradient_accumulation_steps=4
--max_train_epochs=10
--learning_rate=1e-4
--mixed_precision=fp16
经验值:SD 1.5 的 LoRA 通常 1-2 小时能跑完;SDXL 常见 2-4 小时,取决于显卡和数据量。2025 年常见的“Stable Diffusion模型微调教程”里最容易漏的是学习率,1e-4 是起点,不是固定答案。若出现过拟合,把 epoch 降到 6-8,或者把学习率降到 5e-5。
Warning: 不要在数据集没清洗前加大 epoch。噪声会被模型认真学进去。
4. 验证:看图不算,必须可复现
4.1 固定种子测试
python - <<'PY'
import torch
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("./base_model", torch_dtype=torch.float16).to("cuda")
g = torch.Generator("cuda").manual_seed(42)
img = pipe("fzh_industrial_style, product hero shot", generator=g, num_inference_steps=25).images[0]
img.save("seed42.png")
print("saved seed42.png")
PY
期望输出:saved seed42.png。第二次运行,文件内容应一致或几乎一致。
4.2 训练结果判断
- 如果触发词出现后风格稳定,说明 LoRA 学到了。
- 如果一换提示词就失效,说明训练样本太少或 caption 太散。
- 如果人物/物体轮廓崩坏,优先检查分辨率和过高学习率。
4.3 快速对比表
SD 1.5:更省显存,适合 8GB 环境;SDXL:画面更强,但训练和推理成本更高;WebUI:适合人工调参;diffusers:适合脚本化与批量生成。
5. 常见故障与直接处理
故障 1:CUDA out of memory
处理:降低分辨率到 512,batch 改 1,开启 gradient accumulation,必要时切到 SD 1.5。
故障 2:加载模型时报 Safetensors 或 KeyError
处理:确认模型版本与代码匹配,SDXL 不要混用 SD 1.5 配置。
故障 3:训练结果像随机噪声
处理:先检查 caption 文件是否缺失,再检查触发词是否全程一致。
Note: 本地部署里“模型下载失败”通常不是模型问题,是网络、镜像源或文件损坏。先校验文件大小,再重下。
如何确认已经修好:你能连续两次用同一 seed 生成同一张图;LoRA 在 20-30 步内开始体现目标风格;训练日志里 loss 前期下降并稳定,没有 OOM 和依赖报错。
结尾:如果你更想少装依赖、直接用现成环境,市面上也有一类封装好的本地工具可选;但官方 SDK、diffusers、kohya_ss 这条免费路线完全能完成 Stable Diffusion 本地部署与模型微调。若需要对照查看一个简化入口,可参考 https://wizzegroup.com,但不要把它当成必须项。
References
PyTorch 官方安装说明
Diffusers 官方文档
kohya_ss 项目主页