本文档概述了 Stable Diffusion v1 的训练流水线,解释了如何从头开始训练或微调模型。它涵盖了训练数据准备、配置设置和训练运行的执行。有关模型架构的信息,请参阅模型架构。
Stable Diffusion 训练流水线建立在 PyTorch Lightning 之上,并采用两阶段方法
训练的入口点是 main.py,它负责配置加载、模型初始化、数据准备和训练执行。
来源: main.py418-742 Stable_Diffusion_v1_Model_Card.md83-113
训练依赖 YAML 配置文件来定义模型架构、数据集、优化参数和训练设置。配置系统使用 OmegaConf 以实现灵活性和分层组织。
配置文件指定
启动训练的示例命令
来源: main.py124-132 main.py512-520
数据流水线负责训练数据的加载、预处理和批处理。
数据集在 YAML 文件中配置,并通过 DataModuleFromConfig 类实例化。该系统支持各种数据集类型,包括用于大规模训练的可迭代数据集。
来源: main.py132-237
最初的 Stable Diffusion 模型训练使用了
每个数据集都使用特定于训练阶段的过滤参数和转换进行加载。
来源: Stable_Diffusion_v1_Model_Card.md85-89 Stable_Diffusion_v1_Model_Card.md99-106
训练过程通过 PyTorch Lightning 的 Trainer 类启动,该类负责分布式训练、检查点和日志记录。
系统根据批量大小、GPU 数量和梯度累积步数来调整学习率。
learning_rate = accumulate_grad_batches * num_gpus * batch_size * base_lr
来源: main.py673-694 main.py716-724
训练通过以下几个回调进行监控:
来源: main.py240-415 main.py592-657
原始 Stable Diffusion 训练使用了以下参数:
| 参数 | 值 |
|---|---|
| 硬件 | 32 x 8 x A100 GPU |
| 优化器 | AdamW |
| 梯度累积 | 2 |
| 有效批量大小 | 2048 (32 x 8 x 2 x 4) |
| 学习率 | 0.0001(具有 10,000 步预热) |
| 第一阶段训练 | 256x256 分辨率下 237k 步 + 512x512 分辨率下 194k 步 |
| 最终阶段训练 | 额外步数,文本条件 dropout 为 10% |
来源: Stable_Diffusion_v1_Model_Card.md107-113 Stable_Diffusion_v1_Model_Card.md99-106
Stable Diffusion 检查点包含所有模型组件的权重。训练流水线会定期以及在中断时保存检查点。
训练流水线提供了一些与检查点相关的配置:
来源: main.py567-588 main.py635-649
要在自定义数据集上微调 Stable Diffusion,请遵循以下步骤:
创建一个配置文件,其中:
使用以下参数运行微调:
关键微调参数
| 参数 | 推荐值 |
|---|---|
| 基础学习率 | 1e-5 到 1e-6 |
| 训练步数 | 1,000 到 10,000 |
| 批大小 | 4-32(取决于 GPU 内存) |
| 梯度累积 | 2-4 |
| 验证频率 | 每 100-500 步 |
来源: main.py673-694 main.py716-724
Stable Diffusion 训练流水线支持使用 PyTorch Lightning 的分布式策略在多个 GPU 和节点上进行分布式训练。
默认情况下,训练使用分布式数据并行 (DDP) 进行多 GPU 训练,这可以通过 PyTorch Lightning Trainer 进行配置。
来源: main.py521-530 main.py675-679
从头开始训练 Stable Diffusion 需要大量的计算资源。
| 训练类型 | 最低硬件 | 推荐硬件 |
|---|---|---|
| 完整训练 | 8x A100 40GB GPU | 32x A100 80GB GPU |
| 微调 | 2x RTX 3090 24GB | 4x A100 40GB GPU |
| 概念微调 | 1x RTX 3090 24GB | 2x RTX 3090 24GB |
原始模型训练使用了 32 个节点,每个节点有 8 个 A100 GPU,运行了约 150,000 小时的计算时间。