✨ 享受 Stable Diffusion 训练! ✨
LoRA-scripts(又名 SD-Trainer)
LoRA & Dreambooth 训练图形界面 & 脚本预设 & 一键训练环境,用于 kohya-ss/sd-scripts
Stable Diffusion 训练工作台。一切集成于一个 WebUI 中。
按照下面的安装指南安装 GUI,然后运行 run_gui.ps1
(Windows) 或 run_gui.sh
(Linux) 来启动 GUI。
Tensorboard | WD 1.4 标签器 | 标签编辑器 |
---|---|---|
cd lora-scripts
python gui.py
目前内置了SDXL和Flux的模型,以及gelato数据集用于测试。
如上图所示,配置好训练种类、底模文件路径、vae模型文件路径和训练数据集路径,另外,要将resolution调整为1024、1024。
如上图所示,填好 Flux模型路径、AE模型文件路径、clip_l模型路径和t5xxl模型文件路径。
这些参数控制预训练模型的加载、权重初始化和模型架构。
–vae: 指定VAE模型。
–v2: 指定是否加载 Stable Diffusion v2.0 模型。
–v_parameterization: 启用 v-parameterization 模式,用于不同的训练方法。
–pretrained_model_name_or_path: 指定预训练模型的路径,支持 Hugging Face Diffusers 格式或 Stable Diffusion 检查点文件。
–tokenizer_cache_dir: 指定 Tokenizer 的缓存目录,支持离线训练时避免重复下载。
–network_module: 用于指定使用的网络模块(如 LoRA)。
这些参数用于配置训练过程中使用的优化算法和优化器相关的超参数。
–optimizer_type: 优化器的类型,支持的优化器包括 AdamW、Lion、DAdaptation 等。
–use_8bit_adam: 启用 8 位 Adam 优化器,节省显存(需要 bitsandbytes 支持)。
–use_lion_optimizer: 启用 Lion 优化器(需要 lion-pytorch 支持)。
–learning_rate: 设置学习率,默认值为 2e-6。
–text_encoder_lr: 用于设置文本编码器的学习率。
–unet_lr: 用于设置文本编码器的学习率。
–max_grad_norm: 最大梯度范数,用于梯度裁剪,避免梯度爆炸。
–optimizer_args: 传递给优化器的额外参数,如 weight_decay=0.01 betas=0.9,0.999。
控制学习率的动态变化,常用于提高训练效果。
–lr_scheduler_type: 指定自定义的学习率调度器模块。
–lr_scheduler: 常见的学习率调度器类型,包括 linear、cosine、constant 等。
–lr_scheduler_args: 传递给学习率调度器的附加参数(如 T_max=100)。
–lr_warmup_steps: 学习率调度器的预热步数,通常在训练初期使用。
–lr_scheduler_num_cycles: 对于 cosine_with_restarts 调度器,指定重启次数。
–lr_scheduler_power: 对于 polynomial 调度器,指定多项式幂值。
这些参数用于控制训练的核心过程,如批量大小、步数、训练轮数等。
–output_dir: 训练后模型权重的输出目录。
–output_name: 训练模型的文件名,不包括扩展名。
–train_batch_size: 设置训练批次大小。
–max_train_steps: 最大训练步数,达到该步数时终止训练。
–max_train_epochs: 最大训练轮次,若设置将覆盖 max_train_steps。
–max_token_length: 设置文本编码器的最大 token 长度,默认值为 75,您可以通过指定“150”或“225”来扩展。
–network_train_unet_only: 用于只微调 U-Net 模块。
–gradient_accumulation_steps: 梯度累积步数,以模拟更大的批次。
–mixed_precision: 启用混合精度训练,支持 fp16 和 bf16。
–full_fp16: 启用完全的 FP16 训练,包括梯度计算。
–gradient_checkpointing: 启用梯度检查点,以减少显存使用。
–seed: 设置训练过程的随机数种子,保证可复现性。
–torch_compile: 使用 torch.compile 优化,需 PyTorch 2.0。
这些参数专门用于配置 LoRA 微调的细节,包括 rank 和缩放系数等。
–lora_rank: LoRA 权重的秩,控制权重矩阵的维度,较低的值可减少参数量。
–lora_alpha: LoRA 的缩放系数,影响微调权重的影响力。
–lora_dropout: LoRA 中的 Dropout 比例,防止过拟合。
以上三个参数sdxl_train_network.py
不支持
–lora_target_modules: 指定 LoRA 微调的目标模块,如注意力层等。
这些参数控制如何保存训练的中间结果和最后的模型权重,以及如何从中间状态恢复训练。
–save_every_n_epochs: 每经过指定的轮数保存模型检查点。
–save_every_n_steps: 每经过指定步数保存检查点。
–save_model_as: 指定保存模型的格式(如 safetensors)。
–save_last_n_epochs: 保存最近的 N 个检查点,并删除旧的。
–save_state: 保存包括优化器状态在内的训练状态。
–resume: 从指定的检查点文件中恢复训练状态。
–save_precision: 保存模型时使用的精度类型,如 float、fp16、bf16。
控制如何加载训练数据集、分辨率等。
–caption_extension: 指定描述文件的扩展名,一般采用 .txt。
–enable_bucket: Aspect Ratio Bucketing,处理不同宽高比的图像数据。
–min_bucket_reso: 指定最小分辨率大小。
–max_bucket_reso: 指定最大分辨率大小。
–flip_aug: 对数据进行左右翻转。
如果数据不是左右对称的(例如角色外观、发型等),则可能会导致训练不成功。
–color_aug: 改变数据色调。
–train_data_dir: 指定训练数据的路径。
–resolution: 输入图像的分辨率,典型值为 512 或 1024。
–max_data_loader_n_workers: DataLoader 使用的最大工作进程数。
–persistent_data_loader_workers: 持久化 DataLoader 的工作进程,减少 epoch 之间的时间间隔。
用于监控和记录训练过程,支持 TensorBoard 和 WandB 等工具。
–logging_dir: 用于 TensorBoard 日志的输出目录。
–log_with: 指定使用的日志工具,如 tensorboard、wandb 或同时使用两者。
–log_tracker_name: 日志记录使用的 tracker 名称。
–wandb_run_name: WandB 运行会话的名称。
控制在训练过程中如何生成样本图像以评估模型的效果。
–sample_every_n_steps: 每隔 N 步生成样本图像。
–sample_every_n_epochs: 每隔 N 轮生成样本图像。
–sample_prompts: 指定包含采样提示词的文件。
–sample_sampler: 生成样本图像时使用的采样方法(如 ddim、euler 等)。
这些参数用于优化训练过程中的显存或计算资源利用,适合不同硬件配置。
–lowram: 启用低内存优化,适合 VRAM 大于 RAM 的环境。
–highvram: 禁用低 VRAM 优化,适用于 VRAM 充足的情况。
–xformers: 启用 Xformers 加速 CrossAttention。
–sdpa: 启用 SDPA(需要 PyTorch 2.0 以上版本)。
–no_half_vae: 禁用的一半精度(混合精度)VAE,SDXL中的VAE似乎会产生一些Nan的情况,开启后可有效避免。
用于控制训练中的正则化或增强鲁棒性。
–noise_offset: 噪声偏移值,用于生成时的正则化,推荐值约为 0.1。
–multires_noise_iterations: 启用多分辨率噪声,推荐的迭代次数为 6-10。
–ip_noise_gamma: 输入扰动噪声的强度, 推荐值约为 0.1。
在使用 sd-scripts
训练模型(如 LoRA 或 Textual Inversion)时,正确地构建数据集是至关重要的一步。以下是数据集构建的关键部分:
你需要将用于训练的图像数据整理到一个文件夹中。这个文件夹可以包含任意数量的图像,通常是 JPG 或 PNG 格式的文件。确保图像的内容与训练目标相关,例如用于人物图像生成的任务应该包含与该任务一致的素材。
sd-scripts
支持两种方式的 Caption(描述)准备:
make_captions.py
来自动生成描述文件。可以通过预先训练的 BLIP 模型生成图像的描述,命令如下:python finetune/make_captions.py --batch_size 8 /path/to/images
生成的 Caption 文件会和图像文件存放在同一目录下,文件名与图像相同,但扩展名为 .caption
。这一步允许模型在训练时学习到图像的描述信息。
.caption
或者其他自定义的扩展名(通过 -caption_extension
参数指定)。如果需要对图像进行自动标签化,可以使用 DeepDanbooru 或 WD14Tagger:
.txt
文件,放在与图像同目录下。命令示例:
bash deepdanbooru evaluate /path/to/images --project-path deepdanbooru_model --allow-folder --save-txt
可以通过 --max_token_length
参数来控制 Caption 的长度。如果使用较长的描述(如 225 个 Token),建议相应地调整模型的 Token 长度,以更好地捕捉到图像的丰富细节。
在数据处理过程中,你可以使用数据增强方法来提高模型的泛化能力:
--flip_aug
参数,随机对图像进行左右翻转。--color_aug
改变图像的色调和亮度。如果训练集中包含不同尺寸和宽高比的图像,可以启用 Aspect Ratio Bucketing,该功能将图像分配到适合其宽高比的桶中,以提高训练效率。可以通过 --enable_bucket
, --min_bucket_reso
, 和 --max_bucket_reso
参数来设置。