SDXL全量微调教程(win11)
🧠 项目简介
Stable Diffusion XL (SDXL) 是 Stability AI 推出的图像生成模型,具有更高质量、更强表现力。
全量训练分为两种:
-
从头训练(random init):需要海量数据和GPU资源,不推荐新手尝试。
-
基于预训练模型进行全量微调(fine-tune all layers):适合个人开发者,本文重点讲这一种。
🖥️ 硬件与环境要求
| 类型 | 推荐配置 | 最低可运行配置 |
|---|---|---|
| CPU | i7-12700 或以上 | 任意支持 AVX 的 CPU |
| GPU | NVIDIA RTX 3090 / A100 / H100(24GB 显存以上) | RTX 3060(需开启 gradient checkpointing) |
| RAM | 32 GB | 最低 16 GB |
🔧 环境搭建
1. 安装 Anaconda
下载链接:
-
Anaconda 官网
-
Miniconda 官网
安装完后,打开终端(Anaconda PowerShell Prompt):
conda create -n sdxl python=3.10 -y
conda activate sdxl
2. 安装 PyTorch(根据你的设备选择)
CPU 版本(适合没显卡的用户):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
GPU 版本(CUDA 11.8):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
你可以在 https://pytorch.org/get-started/locally/ 选择你的环境生成对应安装命令。
3. 安装 Diffusers 训练相关依赖
pip install diffusers transformers accelerate safetensors
pip install ftfy tensorboard datasets peft
pip install xformers # 如果用 GPU,建议安装
📦 预训练模型下载
推荐使用 Hugging Face 模型仓库:
-
SDXL Base 模型(1.0)
下载链接:sd_xl_base_1.0.safetensors 软件 ·stabilityai/stable-diffusion-xl-base-1.0 在 main
https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors
📦 源代码下载:
https://github.com/huggingface/diffusers.git
https://github.com/huggingface/diffusers.git
解压后进入 examples/text_to_image/ 文件夹。
✅ 本地源码安装 diffusers
假设你已经把它解压在如下目录:
D:\diffusers-main-latest\
那么,请在你的虚拟环境中运行以下命令:
pip install -e D:\diffusers-main-latest
或者进入该目录再安装:
cd D:\diffusers-main-latest
pip install -e .
-e表示“editable mode”,意思是你可以修改源码直接生效(可选,但推荐开发者使用)。
⚠️ 检查确认
安装完成后,你可以用以下命令确认安装的版本:
pip show diffusers
🧾 准备数据集
SDXL 需要图像 + 描述文本格式的数据。推荐格式如下:
your_dataset/
├── 0001.jpg
├── 0002.jpg
├── ...
├── captions.jsonl # 每行形如:
使用自定义数据集方法
-
将图片放入文件夹
your_dataset/images/ -
将 jsonl 放入
your_dataset/captions.jsonl
HuggingFace 的训练脚本支持从 jsonl 加载数据集。
🚀 启动训练命令
1. CPU 训练命令(非常慢,仅用于测试)
进入 examples/text_to_image/ 文件夹。必须进入包含 train_text_to_image_sdxl.py 脚本的文件夹运行!
accelerate launch train_text_to_image_sdxl.py --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" --train_data_dir="./your_dataset" --caption_column="text" --resolution=512 --train_batch_size=1 --gradient_accumulation_steps=4 --max_train_steps=1000 --learning_rate=1e-5 --checkpointing_steps=100 --output_dir="./sdxl-output" --report_to="tensorboard" --mixed_precision="no" --gradient_checkpointing
记得更改为正确的dataset路径
2. GPU 训练命令(推荐)
进入 examples/text_to_image/ 文件夹。必须进入包含 train_text_to_image_sdxl.py 脚本的文件夹运行!
accelerate launch train_text_to_image_sdxl.py --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" --train_data_dir="./your_dataset" --caption_column="text" --resolution=1024 --train_batch_size=2 --gradient_accumulation_steps=1 --max_train_steps=1000 --learning_rate=1e-5 --checkpointing_steps=100 --output_dir="./sdxl-output" --report_to="tensorboard" --mixed_precision="fp16" --gradient_checkpointing
记得更改为正确的dataset路径
命令解释:
| 行 | 参数 | 含义 |
|---|---|---|
| 1 | accelerate launch train_text_to_image_sdxl.py | 启动训练脚本,这是 Hugging Face 的标准训练方式 |
| 2 | --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" | 指定使用 SDXL Base 1.0 作为预训练模型(更改为本地路径,也可以不改使用自动下载) |
| 3 | --train_data_dir="./your_dataset" | 指定你自己的训练数据文件夹,里面应有图像和 jsonl 文本 |
| 4 | --caption_column="text" | 指定 jsonl 中的文本字段名称(比如每行是 {file_name: xxx, text: "描述"}) |
| 5 | --resolution=1024 | 设置训练图像尺寸,SDXL 官方建议为 1024x1024 |
| 6 | --train_batch_size=2 | 每张 GPU 上一次训练的样本数,太大了会爆显存 |
| 7 | --gradient_accumulation_steps=2 | 梯度累加次数,等效于 batch size × 2;例如这里等于 2×2=4 |
| 8 | --max_train_steps=10000 | 最大训练步数,越大越久,但通常 2k~10k 已能出结果 |
| 9 | --learning_rate=5e-6 | 学习率,影响训练速度和稳定性 |
| 10 | --enable_xformers_memory_efficient_attention | 启用 xformers 节省显存,推荐 GPU 用户开启 |
| 11 | --mixed_precision="fp16" | 使用混合精度(半精度浮点数),加速训练并节省显存 |
| 12 | --gradient_checkpointing | 启用梯度检查点,进一步节省内存(会稍微降低速度) |
| 13 | --output_dir="./sdxl-output" | 模型保存路径,会保存每一步的 checkpoint |
| 14 | --report_to="tensorboard" | 开启 TensorBoard 日志,方便可视化 loss 曲线等 |
📊 训练监控与模型保存
查看 TensorBoard 日志:
tensorboard --logdir ./sdxl-output
浏览器访问 http://localhost:6006 查看损失曲线。
检查点保存位置:
模型每 --checkpointing_steps 步会自动保存到 ./sdxl-output 中。
🖼️ 推理生成图像
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained(
"./sdxl-output",
torch_dtype=torch.float16
).to("cuda") # 如果你使用的是 CPU 请换成 "cpu"
prompt = "一个身穿太空服的猫在火星上散步"
image = pipe(prompt).images[0]
image.save("result.png")
🧩 常见问题与技巧
Q1:训练太慢了怎么办?
-
使用小分辨率(如 512)
-
降低 batch size
-
只训练 100 ~ 500 步作为测试
-
尽量使用 GPU
Q2:模型质量差、生成不了好图?
-
检查数据集描述是否准确
-
训练步数太少
-
没有用预训练模型(random init 很难训)
Q3:如何切换到 GPU?
-
安装 PyTorch 的 CUDA 版本(参见上文)
-
配置
accelerate config,选择 “GPU” 设备即可
更多推荐
所有评论(0)