🧠 项目简介

Stable Diffusion XL (SDXL) 是 Stability AI 推出的图像生成模型,具有更高质量、更强表现力。
全量训练分为两种:

  • 从头训练(random init):需要海量数据和GPU资源,不推荐新手尝试。

  • 基于预训练模型进行全量微调(fine-tune all layers):适合个人开发者,本文重点讲这一种。

🖥️ 硬件与环境要求

类型推荐配置最低可运行配置
CPUi7-12700 或以上任意支持 AVX 的 CPU
GPUNVIDIA RTX 3090 / A100 / H100(24GB 显存以上)RTX 3060(需开启 gradient checkpointing)
RAM32 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 模型仓库:

📦 源代码下载: 

https://github.com/huggingface/diffusers.githttps://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  # 每行形如:

使用自定义数据集方法

  1. 将图片放入文件夹 your_dataset/images/

  2. 将 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路径 

命令解释:

参数含义
1accelerate 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” 设备即可

Logo

更多推荐