跳转至

准备环境

创建应用

上传基础模型

在这以 sdxl 为例,需要上传 sdxl_vae.safetensors 和 sd_xl_base_1.0.safetensors两个模型

将模型放入到数据盘里的sd-models目录里

数据集准备

上传数据

在这里是以sdxl的为例,将数据集上传到 数据盘里的 train目录里

标签处理

如果上传的数据集已经有标签处理好了,可以跳过本步骤

打开 webui 入口和打开日志 webui界面,选择标签编辑器,如下图所示 处理标签主要步骤

选择标签管理器

在数据集目录,填写数据地址

点击数据集加载设置,如上图所示所选

点击加载

数据目录填写可以如下图操作

选择 sdxl 后,再点顶部的左边红框按钮,既可以复制文件路径

然后到数据目录下,粘贴下就可以,也可以按键盘的ctrl+v

修改标签

右边选择编辑被选图片描述,并勾选上自动从被选图片中复制描述,如下图所示

操作步骤如下三步

点击左边需要调整的图片

在编辑描述里修改标签

然后点击将更改应用于所选图像

例如这里添加了一个chinesegirl触发词,就是用来触发这个丹的咒语,同时也可删除部分标签

如需要对发型有所调整,可以保留发型的描述词,这样可以让 ai

知道这样的发型存在,如发色后续也需要可以更改,这里也可以添加对发色的描述

更详细的标签调整可以 自行在 b 站上去学习下

开始训练

参数调整

打开 webui的训练页面

注意:下面所涉及到的所有填写的最好不要使用中文,不然容易导致训练失败

可以选新手模式,等到熟悉后可以再选专家模式,专家的可以调整的参数比较多

下面都以专家模式展开讲讲,专家页面如下图所示

由于本次准备的是练 sdxl的 lora 丹,所以在训练种类这里需要选择sdxl-lora

自己可以根据需要练的丹选择对应的类型,sd-lora是练 1.5 的

如果是练基础大模型,需要转移到Dreambooth训练页面上

底模路径:这里可以参考数据集的操作,到文件管理上找到对应的文件复制路径,然后粘贴上即可,例如在准备环境步骤,我们将模型放到数据盘里的models目录下,那么完整路径为:/root/onethingai-tmp/sd-models/sd_xl_base_1.0.safetensors

VAE 路径:/root/onethingai-tmp/sd-models/sdxl_vae.safetensors

注意:vae 在训练 sdxl 的时候必须填写,不然会导致训练不起来

数据集路径:可以参考编辑标签步骤里的路径,如果你将数据集上传到数据盘里的 train 目录里,则填写路径位 /root/onethingai-tmp/train/sdxl 这里的 sdxl可以更改为自己上传的目录名称

下图为数据集配置和炼丹输出

需要注意的是:训练图片分辨率,宽、高必须为 8 的整数倍,数据集里的所有图片分辨率必须一致

其他可以按上图配置

下图中红框的需要注意调整为bf16

辅助工具

如何看进度

可以切换到之前打开的查看日志页面

如上图所示,即表示开始在训练了

如何调整 repeats

回到文件管理,进入数据盘,到 train/sdxl目录,如下图所属

可以看到这里之前的文件都消失了,并且多了个文件夹为5_zkz,这是在上面默认训练的时候,系统把这里的数据集文件都挪到这里去了

这个文件夹的主要意义?

发现这个文件夹的构造为 {数字}_{字符},这里的数字意义比较大,它就是我们需要的 repeat 的设置了,也就是告诉 ai 这个数据集里的图片需要学习多少次,可以减起调整为你需要的,然后重新点开始训即可采用新的训练次数

如何重新命名

如下图所示,我们已经将 repeat 给调整了

steps如何计算

steps = epoch * images * repeat

资源下载

sdxl_vae.safetensors

sd_xl_base_1.0.safetensors: https://www.123pan.com/s/AK8tjv-WSEIh.html 提取码: R67o

参数说明

mixed_precision

混合精度,目前支持float、fp16和 bf16,目前对于消费级显卡推荐bf16,专业级可以使用 fp16

save_precision

保存精度,跟 mixed_precision保持一致即可

network_dim

特征维度,当需要学习的内容复杂时,维度应当更高。但是也不是越高越好

维度提升有助于学会更多细节,但模型收敛速度变慢,需要的训练时间更长,也更容易过拟合。

高分辨率训练集通常需要更高的维度。

通常越高维度容易学会更多的细节,对于简单的数据集(如人物),可以设置低点,对于复杂的数据集(如画风或构图比较复杂),可以设置高点,用来学会更多的细节

通常训练 xl 的 lora 个人倾向设置为 128这样的整数

network_alpha

该值被推荐设置为network_dim的一半,大多数的封装脚本也默认这么设置的

这个参数的主要用途将模型权重放缩防止下溢,在半精度训练中很有意义

pretrained_model_name_or_path

底模型的名称或者文件路径,可根据自己需要训练的目标来选择配合

batch_size

硬件能力越大,值就设置有多大

这个表示同时送去训练的数据量,同时也影响着训练所需要的时长

在实际训练时,值越大效果不一定越好,训练的快可能导致消化不良

optimizer_type

可选值:AdamW AdamW8bit Lion SGDNesterov SGDNesterov8bit DAdaptation AdaFactor

优化类型,关于优化器的原理可以自行查询,Lion 是很新的一种优化器,如果你不了解优化器,使用 AdamW、AdamW8bit、Lion 、 DAdaptation 即可。AdamW8bit 对于显存小的用户更友好。Lion 优化器的使用率也很高,学习率需要设置得很小(如AdamW优化器下的 1/3,或者更小),Lion 的效率在高batch_size时使用,效率会更高

使用 DAdaptation 时,应当将学习率设置在1附近,text_encoder_lr 可以设置成1,或者小一点,0.5之类。使用DAdaptation 时,推荐将学习率调整策略调整为 constant

对应的优化器,可以使用 --optimizer_args 选项指定优化器选项参数。 可以以key=value的格式指定多个值。 此外,您可以指定多个值,以逗号分隔。 例如,要指定 AdamW 优化器的参数,--optimizer_args weight_decay=0.01 betas=.9,.999。  
指定可选参数时,请检查每个优化器的规格。  
一些优化器有一个必需的参数,如果省略它会自动添加(例如 SGDNesterov 的动量)。 检查控制台输出。  
D-Adaptation 优化器自动调整学习率。 学习率选项指定的值不是学习率本身,而是D-Adaptation决定的学习率的应用率,所以通常指定1.0。 如果您希望 Text Encoder 的学习率是 U-Net 的一半,请指定 --text_encoder_lr=0.5 --unet_lr=1.0。  
如果指定 relative_step=True,AdaFactor 优化器可以自动调整学习率(如果省略,将默认添加)。 自动调整时,学习率调度器被迫使用 adafactor_scheduler。 此外,指定 scale_parameter 和 warmup_init 似乎也不错。  
自动调整的选项类似于--optimizer_args "relative_step=True" "scale_parameter=True" "warmup_init=True"。  
如果您不想自动调整学习率,请添加可选参数 relative_step=False。 在那种情况下,似乎建议将 constant_with_warmup 用于学习率调度程序,而不要为梯度剪裁范数。 所以参数就像--optimizer_type=adafactor --optimizer_args "relative_step=False" --lr_scheduler="constant_with_warmup" --max_grad_norm=0.0。

shuffle_caption

打乱 tag,开启后能够提高模型的泛化性,但是使用不当会欠拟合,使用时最好 keep_tokens

keep_tokens

保证最前面的几个 tag 不被打乱,默认为1。可以多一点,保证打乱后仍然满足 asdweasf, 1girl, full body, outdoors 这种

learning_rate

学习率,在未设置 unet 学习率 和 text_encoder 学习率时生效

unet_lr

unet 的学习率,默认值是1e-4,你也可以写 0.0001。使用不同学习率时有所调整,当你的 network_dimension较大时,需要更多的 steps 与更低的学习率

1e-4 = 1 / 10000

1e-5 = 1 / 100000

5e-5 = 5 / 100000

text_encoder_lr

为与 ext 编码器关联的 LoRA 模块使用不同于正常学习率(使用 --learning_rate 选项指定)的学习率时指定。 有人说最好将Text Encoder设置为稍微低一点的学习率(比如5e-5)。 

text_encoder 的学习率,常取定值5e-5,也有许多人将他调成 unet_lr 的 10-15分之一,调整到 unet_lr 1/8 附近也是常见的做法。有人说调低该参数有助于更多学习文本编码器(对 tag 更敏感)

lr_scheduler

学习率调度器,有以下几种

cosine_with_restarts,cosine,polynomial,constant,constant_with_warmup,linear 不妨搜索学习率调整策略。推荐使用 cosine_with_restarts,它会使学习率从高到低下降,变化速度先慢后快再慢。restarts 表示余弦退火的热重启次数,有助于逃脱平坦区域

lr_scheduler_num_cycles

余弦退火重启次数,仅在 lr_scheduler 为 cosine_with_restarts 时起效,不要太大,重启太多意义不大

lr_warmup_steps

可开可不开的东西,默认10%。预热阶段,不要听信别人说什么开始需要学习率大,那是稳定了才需要的,开始的梯度本身就很大,开启有助于减少神经元失活问题

train_unet_only / train_text_encoder_only

train_unet_only有时有用,只训练unet,显存严重不足时使用。

persistent_data_loader_workers

建议开启,但是容易爆内存

开启后会保留加载训练集的worker,减少每个 epoch 之间的停顿

max_data_loader_n_workers

如果cpu很烂,设置成1或2

指定数据加载的进程数。 大量的进程会更快地加载数据并更有效地使用 GPU,但会消耗更多的主内存。 默认是"8或者CPU并发执行线程数 - 1,取小者",所以如果主存没有空间或者GPU使用率大概在90%以上,就看那些数字和 2 或将其降低到大约 1。

noise_offset

在训练中添加噪声偏移来改良生成非常暗或者非常亮的图像,如果启用,推荐参数为0.1

prior_loss_weight

使用正则化时使用,该权重控制先验知识强度,默认为1。使用100张以上训练集有人推荐是5%-10%,不要设置更低了,那等于没有正则化,使用正则化权重1时模型收敛会非常困难。我在设置为1时多次炸炉,推荐训练画风时使用正则化

gradient_checkpointing

一个节约显存的设置,推荐关闭,除非显存严重不足

xformers

强烈推荐开启的优化项,不开启的情况,24GB显存也非常容易炸,开启后速度感人

cache_latents

缓存潜变量,通常开启,提高速度,与 random_crop 互斥

enable_bucket

开启后会进行分桶,如果你的训练集有不同分辨率图像则开启,会略微多消耗显存,显存不吃紧,建议开启

flip_aug

如果指定 --flip_aug 选项,它将执行水平翻转扩充(数据扩充)。你可以人为的将数据量加倍,但是如果在数据不对称的时候指定(比如人物外貌、发型等),学习就不会很顺利。

可选项,如果学习画风可以开启,人物也可以考虑,但是要是人物刘海有方向这种,就会出事。默认关闭。

resolution

训练数据集图片的分辨率,支持非正方形,但必须是 64 倍数。格式为:宽,高

max_train_epoches

一个Epoch就是将所有训练样本训练一次的过程

最大训练 epoch,个人设置为10

save_every_n_epochs

配置每 n 次 epoch 后就保存一个 lora 模型,推荐 1,这样在多轮epoch后,校验每轮 epoch 的模型的拟合度,这样设置比较容易获的较好的模型

clip_skip

一个玄学的配置,默认建议设置为:2,不需要调整