SimpleTuner 💹
⚠️ 警告:本仓库中的脚本可能会损坏您的训练数据。在继续操作之前,请务必备份。
SimpleTuner 是一个专门用于训练优化的实验性脚本集合。该项目注重简单性,致力于使代码易于阅读和理解。这个代码库作为一个共享的学术练习,欢迎贡献。
目录
设计理念
- 简单性:旨在为大多数用例提供良好的默认设置,减少调整需求。
- 多功能性:设计用于处理各种数量的图像 - 从小型数据集到大型集合。
- 前沿特性:仅包含已证实有效的功能,避免添加未经测试的选项。
教程
在开始教程之前,请充分阅读本README,因为它包含了您可能需要首先了解的重要信息。
如果想快速开始而不阅读完整文档,可以使用快速入门指南。
对于内存受限的系统,请参阅DeepSpeed文档,其中解释了如何使用🤗Accelerate配置Microsoft的DeepSpeed以实现优化器状态卸载。
特性
- 多GPU训练
- 图像和标题特征(嵌入)预先缓存到硬盘,使训练运行更快、内存消耗更少
- 纵横比分组:支持各种图像尺寸和纵横比,实现宽屏和竖屏训练。
- SDXL的微调器LoRA或完整u-net训练
- 大多数模型可在24G GPU上训练,甚至在较低基本分辨率下可在16G上训练。
- PixArt、SDXL、SD3和SD 2.x的LoRA训练使用不到16G VRAM
- DeepSpeed集成,允许在12G VRAM上训练SDXL的完整u-net,尽管速度很慢。
- 量化LoRA训练,使用低精度基础模型或文本编码器权重来减少VRAM消耗,同时仍允许DreamBooth。
- 可选的EMA(指数移动平均)权重网络,以抵消模型过拟合并提高训练稳定性。**注意:**这不适用于LoRA。
- 直接从S3兼容存储提供商训练,无需昂贵的本地存储。(已在Cloudflare R2和Wasabi S3上测试)
- 仅适用于SDXL和SD 1.x/2.x,完整的ControlNet模型训练(非ControlLoRA或ControlLite)
- 训练专家混合以实现轻量级、高质量的扩散模型
- Webhook支持,用于更新例如Discord频道的训练进度、验证和错误
- 与Hugging Face Hub集成,实现无缝模型上传和自动生成精美的模型卡片。
Flux.1
包含Flux.1的初步训练支持:
- 使用优化方法进行低损失训练
- 保留开发模型的蒸馏质量
- 或者,重新引入CFG到模型中并提高其创造力,但以推理速度为代价。
- 通过DeepSpeed ZeRO进行LoRA或完整调优
- 尚不支持ControlNet训练
- 可训练Schnell或Dev模型
- 使用
--base_model_precision
将基础模型量化为int8-quanto
或fp8-quanto
以大幅节省内存
PixArt Sigma
SimpleTuner与PixArt Sigma有广泛的训练集成 - 600M和900M模型都可以无缝加载。
- 不支持文本编码器训练,因为T5非常庞大。
- LoRA和完整调优都按预期工作
- 尚不支持ControlNet训练
- 两阶段PixArt训练支持(参见:MIXTURE_OF_EXPERTS)
请参阅PixArt快速入门指南开始训练。
Stable Diffusion 2.0 & 2.1
Stable Diffusion 2.1在微调过程中以难度著称,但事实并非如此。SimpleTuner中相关的功能包括:
- 仅训练文本编码器的后期层
- 在终端时间步强制执行零SNR而不是偏移噪声,以获得更清晰的图像。
- 在训练过程中使用EMA(指数移动平均)以确保我们不会"过度训练"模型。
- 能够同时在具有不同基本分辨率的多个数据集上进行训练,例如512px和768px的图像
Stable Diffusion 3
- 像往常一样支持LoRA和完整微调。
- 尚未实现ControlNet。
- 某些功能,如分段时间步选择和Compel长提示加权尚不支持。
- 参数已经过优化以获得最佳结果,通过从头开始训练SD3模型进行验证
请参阅Stable Diffusion 3快速入门开始使用。
Kwai Kolors
一个基于SDXL的模型,使用ChatGLM(通用语言模型)6B作为其文本编码器,将隐藏维度大小翻倍,大幅增加了提示嵌入中包含的局部细节水平。
Kolors支持几乎与SDXL一样深入,除了不支持ControlNet训练。
硬件要求
EMA(指数移动平均)权重是一种内存密集型操作,但在训练结束时提供出色的结果。像--ema_cpu_only
这样的选项可以通过将EMA权重加载到CPU并保持在那里来改善这种情况。
没有EMA,必须更加小心,不要通过使用正则化数据来大幅改变模型,导致"灾难性遗忘"。
GPU供应商
- NVIDIA - 3090及以上的几乎任何型号都是安全的选择。您的体验可能会有所不同。
- AMD - 已验证SDXL LoRA和UNet在7900 XTX 24GB上可以工作。由于缺少
xformers
,它可能比Nvidia同等产品使用更多内存 - Apple - LoRA和完整u-net调优经测试可在具有128G内存的M3 Max上工作,SDXL大约使用12G的"有线"内存和4G的系统内存。
- 由于缺乏内存高效的注意力机制,您可能需要24G或更大的机器来进行M系列硬件的机器学习。
Flux.1 [dev, schnell]
- A100-40G(LoRA,rank-16或更低)
- A100-80G(LoRA,最高rank-256)
- 3x A100-80G(完整调优,DeepSpeed ZeRO 1)
- 1x A100-80G(完整调优,DeepSpeed ZeRO 3)
Flux更适合使用多个GPU进行训练。
SDXL,1024px
- A100-80G(EMA,大批量,LoRA @ 疯狂批量大小)
- A6000-48G(EMA@768px,无EMA@1024px,LoRA @ 高批量大小)
- A100-40G(无EMA@1024px,无EMA@768px,EMA@512px,LoRA @ 高批量大小)
- 4090-24G(无EMA@1024px,批量大小1-4,LoRA @ 中高批量大小)
- 4080-12G(LoRA @ 低中批量大小)
Stable Diffusion 2.x,768px
- A100-40、A40、A6000或更好(EMA,1024px训练)
- NVIDIA RTX 4090或更好(24G,无EMA)
- NVIDIA RTX 4080或更好(仅LoRA)
脚本
ubuntu.sh
- 这是一个基本的"安装程序",可在Vast.ai实例上快速部署。它可能不适用于每个容器镜像。train.sh
- SDXL的主要训练脚本。config/config.env.example
- 这些是训练参数,您应该复制到config/config.env
工具包
有关SimpleTuner附带的相关工具包的更多信息,请参阅工具包文档。
设置
详细的设置信息可在安装文档中找到。
故障排除
通过在环境文件中添加export SIMPLETUNER_LOG_LEVEL=DEBUG
来启用调试日志,以获得更详细的洞察。
对于训练循环的性能分析,设置SIMPLETUNER_TRAINING_LOOP_LOG_LEVEL=DEBUG
将显示时间戳,突出显示配置中的任何问题。
有关可用选项的完整列表,请参阅此文档。
Discord
如需更多帮助或与志同道合的人讨论训练,请加入我们的Discord服务器