4.5 Set standard Parameters
本小节主要介绍如何配置的训练的参数,以及配置训练参数需要注意的点是什么。
Last updated
本小节主要介绍如何配置的训练的参数,以及配置训练参数需要注意的点是什么。
Last updated
这里的配置训练参数包含基础参数的设置以及高级参数设置两部分的内容,因为涉及到的机器学习之中关于神经网络的相关的参数的配置选项,这些选项可以的为我们的进行更好地进行训练。
首先我们需要设置训练的底模,这里的底模我们选择是SDXL 1.0 的全量的模型文件的,注意的一点就是,
你训练的是什么样的底模型,你在进行模型使用的时候需要与的训练的底模进行匹配才可以。模型文件一般我们选择使用safetensors 文件,请注意为你的模型输出一个名字,这里可以自定义名字,按照之前我们的在安装配置过程之中使用的GPU 的加速设置选项,我们使用的额fp16 混合的精度的进行训练。
这里的需要注意的是需要训练的文件夹的,是跟之前的结构化的目录是一致的。
/media/training/model
/media/training/log
/media/training/img
接下来我们进行基础参数的设置,相关的参数配置如下;Lora Type:Standard ,Train batch size: 1 , Epoch:10 ,Max train steps:1600 ,勾选Cache latents,Cache latents to disk 。
接下里配置影响生成质量参数,包含学习率以及max resolution 等先关的内容参数,相关的配置如下:
LR Scheduler:constant , Optimizer:Adafactor ,Optimizer extra arguments: scale_parameter=False relative_step=False warmup_init=False ,Learning rete:0.0003 ,Max resolution:1024*1024 ,Minimum bucket resolution:256 ,Maximum bucket resolution:2048 ,Text Encoder learning rate:0.003 ,Unet learning rate:0.003 ,Network Rank(Dimension):256 ,Network Alpha:1
注意参数的配置学习过程之中的,稍微高的学习率并不会产生很好的效果,所以先关的参数的配置需要合适才对。
train_batch_size:训练批处理大小,指定同时训练图像的数量,默认值1,数值越大,训练时间越短,消耗内存越多。
Number of CPU threads per core:训练期间每个CPU核心的线程数。基本上,数字越高,效率越高,但有必要根据规格调整设置。
epoch:训练周期,假设想通过10次阅读50张图片来学习。在这种情况下,1个周期是50x10=500个训练。如果是2个周期,这将重复两次,因此它将是500x2=1000次学习。对于LoRA来说,2-3个时期的学习就足够了
Save every N epochs:每隔N个周期保存一次,如果不需要创建中间LoRA,将值设置为与“Epoch”相同。 Mixed precision:指定训练期间权重数据的混合精度类型。权重数据最初以32位为单位,但如有必要,通过混合16位单位数据进行学习将节省大量内存并加快速度。fp16是精度为其一半的数据格式,bf16是设计用于处理与32位数据相同的数字宽度的数据格式。可以在fp16上获得足够高的准确度。
Save precision:指定要保存在LoRA文件中的权重数据的类型。float为32位,fp16和bf16为16位单元。默认值为fp16。
Learning rate:学习率,稍微改变权重,以融入更多的给定图片。默认值为0.0001。
LR Scheduler:调度器是关于如何改变学习速率的设置,默认值为cosine。
adafactor:一边学习,一边根据情况自动调整学习率以保存VRAM
constant:学习率从头到尾都没有变化
constant_with_warmup:从0的学习率开始,在热身时逐渐向学习率的设定值增加,在主学习时使用学习率的设置值。
cosine:在绘制余弦曲线时,逐渐将学习率降低到0
cosine _with_restarts:多次重复余弦
linear:线性,从学习率设置开始,并向0线性下降
polynomial:多项式,与线性行为相同,但减少起来有点复杂
关于高级参数的配置一般来按照下面的参数进行配置就可以了,不需要的过多考虑。大多数是一些优化配置选项以及提升模型训练过程之中的效率的选项。
如上图,这里面需要设置的部分不多。
Keep n tokens(保持N个tokens),这个参数是用来设置触发词数量的。在前面提示词打标的时候,你为你的LoRA模型设置了几个触发词,这里就填写几,常见的有1~3。
Clip skip,二次元模型选2,写实模型写1即可。
“Training parameters训练参数”采样图片配置
Sample every n steps,比如设置为100,则代表每训练100步采样一次。
Sample every n epochs,每N轮采样一次,一般设置为1。
如上设置之后,LoRA训练的同时会每隔设定的步数或轮次,生成一副图片。
我们该如何理解深度学习之中神经网络的先关的参数,这里用一些简答的图示进行说明。
步数指在训练过程中,每张图像被重复训练多少次,类似为了记住照片元素,需要看照片多少次。训练次数越多,学习度越高,出图细节越明显。但是设置过高会训练过拟合。需要在实际中不断尝试找到适合的值,以下是单张建议值(仅供参考):
通用最小值:10步;
二次元:10-16步;
写实人物:17-35步;
建筑或场景等:至少50步;
训练步数的确定要根据素材总数与总步数一起来确定,通常的公式为:
💡(训练步数 × 素材总数 × 训练循环数Epoch) / 并行数量Batch size ≤ 训练总步数
LoRA训练总步数在1500至6000步,checkpoint训练总步数:至少30000步
训练完成后,模型文件会保存到设置的输出目录。比如 epoch 训练循环数设置了5,就会得到5个训练好的LoRA模型。
Batch_size,并行批处理个数、一次处理的步数,根据自己显存大小来设置,显存小写1,显存大可以写2到6。
Epoch,训练的轮次,一般写1到10。
Save every N epochs,写1则每训练一轮便保存一次LoRA模型,比如:如果前面Epoch设置5轮,这里写1,则最后训练完成可以得到5个LoRA模型。
Network Rank(Dimension)维度,代表模型的大小。数值越大模型越精细,常用4~128,如果设置为128,则最终LoRA模型大小为144M。一般现在主流的LoRA模型都是144M,所以根据模型大小便可知道Dimension设置的数值。设置的小,则生成的模型小。
Network Alpha,一般设置为比Network Rank(Dimension)小或者相同,常用的便是Network Rank设置为128,Network Alpha设置为64。
Max resolution,训练图片的最大尺寸,根据自己图片集的最大分辨率填写。如果图片集里的图片分辨率大小不一,可以勾选右边的“Enable buckets 启用桶”
Optimizer(优化器),默认会使用AdamW8bit(下面会讲其他几个优化器),在AdamW8bit优化器时,学习率的设置参数如图所示。
Learning rate(学习率),可以理解为训练时Ai学习图片的速率。学习率大,则训练的快,但是容易“一目十行”,学的不够细致精确。反之,学习率小,则训练的慢,但是学的比较细致精确。默认值为0.0001,也可以写为1e-4。
Unet learning rate(Unet扩散模型学习率),设置此参数时则覆盖Learning rate(学习率)参数。默认值为0.0001,也可以写为1e-4。
Text Encoder learning rate(文本编码器学习率),一般为Unet learning rate的十分之一或者一半,比如设置为5e-5(1e-4的一半则为5e-5,十分之一则为1e-5)。
LR Scheduler(学习率调度器),理解为训练时候的调度计划安排,默认为constant(恒定值),常用cosine_wite_restarts(余弦退火)。
余弦退火算法(Cosine Annealing)是一种常用的优化算法,它是一种让学习率从一个较大的值开始,然后以余弦函数的形式逐渐减小的算法。它可以帮助模型更快地收敛到最优解,且具有良好的优化性能。此外,余弦退火算法还可以更好地改善模型的泛化能力,即模型在未见过的数据上的表现。