Stable Diffusion训练LoRA模型参数详细说明(阿里巴巴堆友AI)

肥钛狼 2024-10-02 15:31:04 阅读 55

工具:线上模型训练堆友AI

一、训练参数

批量大小 (Batch Size)

作用:每次训练中使用的样本数量。参考值:可以从 864,取决于显存大小。

训练轮数 (Epochs)

作用:完整遍历训练数据的次数。参考值:通常在 1050 之间。

批次大小

作用:批次大小是每次迭代中输入模型的样本数量。它在训练深度学习模型时非常重要,因为它影响模型的收敛速度和训练稳定性。较大的批次大小通常会加速训练并使损失曲线更加平滑,但可能需要更多的内存和计算资源。参考值

小型网络:例如 16、32中型网络:例如 64、128大型网络:例如 256、512

一般来说,批次大小不应超过显存的承载能力。常见的选择是 32、64、128。

训练混合精度

作用:混合精度训练指的是在训练过程中同时使用16位和32位浮点数,以加快训练速度并节省显存。使用半精度 (16位) 可以减少内存使用,同时通过合适的缩放策略来保持数值稳定性。混合精度训练对现代 GPU(如 NVIDIA 的 RTX 系列)支持良好,可以实现更高的吞吐量。参考值

在支持混合精度的环境(如使用 TensorFlow 和 PyTorch 的适当 API)下,可以直接使用。例如,使用 TensorFlow 的 tf.keras.mixed_precision.set_global_policy('mixed_float16')

需要说明的是,在选择使用混合精度时,建议确保硬件和库的支持,通常情况下,最常见的选择是启用混合精度。

二、样图设置

样图分辨率

作用:样图分辨率指的是输入图像的像素尺寸,通常以宽度x高度(例如,512x512等)的形式表示。分辨率影响模型生成图像的细节及质量,较高的分辨率能够提供更多的细节,但也需要更大的计算资源。参考值

256x256:适用于基础任务或资源有限的情况512x512:常用的中等分辨率,适合大多数生成任务1024x1024或更高:用于高质量生成要求,如艺术作品或复杂场景

随机种子数

作用:随机种子数是一个用于初始化随机数生成器的值,确保训练或生成过程的可重复性。使用相同的种子数可以得到相同的随机结果,这在调试和实验中非常重要。参考值:通常为任意整数。建议固定一个值以便于后续的实验对比。

采样方式

作用:采样方式决定了在生成图像时如何从模型的潜在空间中选择样本。不同的采样技术会影响生成图像的多样性和质量。参考值

随机采样(Random Sampling):简单且快速,但可能导致生成结果不稳定温度采样(Top-k或Top-p Sampling):通过限制选择的候选范围来提高生成质量幂律分布采样(Nucleus Sampling):将概率之和限制在特定的阈值内,以防止选择低概率的样本

提示词

作用:提示词是给模型输入的文字描述,用于引导生成过程。提示词的质量直接影响生成图像的相关性和满意度。参考值:提示词应简洁明了,例如"一只在森林中漫步的狐狸"。使用具体的细节和形容词可以获得更准确的结果。

负向提示词

作用:负向提示词是用来告诉模型在生成图像时应避免的特征或内容。这对于消除不必要的元素、控制生成结果的方向非常有用。参考值:负向提示词应明确,通常包括不希望出现的对象或属性,例如“无文字、无模糊”。使用有效的负向提示词可以提高生成图像的质量和准确性。

三、保存设置

每N轮保存一个LoRA

作用:

检查点保存:在训练过程中,尤其是长时间训练的情况下,保存模型可以避免因为意外情况(如崩溃或中断)丢失训练进度。模型版本管理:随着训练的进行,模型参数会不断变化。定期保存可以帮助研究人员回顾不同版本的模型,进行比较,以选择最佳的模型。减少过拟合风险:通过观察不同轮次上保存的模型性能,可以判断是否出现了过拟合现象,从而选择最佳的模型参数。恢复训练:如果训练由于某种原因被终止,可以从最近的保存点继续训练,而不必从头开始。

参考值:N的选择:N的具体值通常取决于几个因素,包括但不限于:

训练数据集的大小与复杂度实验的目标(如需要更精细的模型调优)训练过程中的计算资源(如GPU的使用情况)模型的结构与参数量

常见的参考值可能在10到100之间。例如,对于小型数据集和简单模型,可能选择每10轮保存一次,而对于复杂模型或大数据集,则可能选择每50或100轮保存一次。

LoRA保存精度

作用:保存精度指的是在训练过程中使用的数据精度(如浮点数的位数)。常见的有FP32(32位浮点数)、FP16(16位浮点数)等。使用低精度可以减少显存占用,提高训练速度,但可能会影响模型的收敛性和准确性。参考值:FP16常用于加速训练,尤其是在支持Tensor Core的硬件上。FP32则适合对精度要求高的任务。

四、学习率&优化器

总学习率

作用:总学习率是模型所有参数的学习率,它控制着模型学习的步幅大小。较高的学习率可能导致训练不稳定,而较低的学习率则可能使模型收敛速度缓慢。参考值:常用的总学习率范围为1e-51e-4,具体值需要根据任务和网络架构进行调整。

Unet学习率

作用:这是专门为Unet网络部分设置的学习率,用于分别调整其学习参数。Unet是处理图像相关任务的重要部分,可能需要单独优化。参考值:一般建议设置为1e-41e-5

文本编码学习率

作用:与Unet学习率类似,这是用于文本编码器部分的学习率。文本编码器通常用于处理语言相关的输入,因此也需要单独优化。参考值:通常设置为1e-55e-5

学习率预热(%)

作用:学习率预热是指在训练初期逐渐增加学习率以避免模型不稳定。这一方法有效确保模型在早期能够平稳地找到合适的收敛区间。参考值:建议预热期占总训练周期的5%10%,具体可以根据训练的稳定性调整。

学习率调度器

作用:这是一种动态调整学习率的策略,通常在训练过程中根据epoch或batch的变化来调整学习率,以提高收敛效率。参考值

Linear

线性调度器按照线性函数逐渐降低学习率。通常,学习率从初始值开始以一定的速率减少到最终值。这种方法简单易懂,适合于一些简单的训练过程。

Cosine

余弦调度器基于余弦函数,学习率在训练过程中呈现余弦曲线的形状。这意味着学习率在训练开始时快速减小,之后逐渐趋近于零。该方法有助于在训练的后期进行精细调整。

Cosine with Restarts

余弦重启调度器在基本的余弦调度器上进行了改进,允许学习率在一定的周期内进行多次重启。每次重启时,学习率从较高的值开始,并按照余弦函数降低。这种方法可以帮助模型在多个局部最优之间进行更好的探索。

Polynomial

多项式调度器学习率遵循多项式函数进行调整。用户可以设置多项式的次数,以及学习率从初始值下降到最低值的方式。这种方法可以提供相对平滑的学习率变化,但设置的参数较多。

Constant

常量调度器在整个训练期间保持学习率不变。虽然简单,但在某些情况下可能无法很好地适应训练动态,容易导致训练过程中的震荡或收敛不良。

Constant with Warmup

常量带热身调度器在训练初期采用一个小的学习率逐渐增加到预设的常量学习率。这种热身策略有助于在训练初期稳定模型参数,避免大梯度带来的不稳定性。

总的来说,选择合适的学习率调度器依赖于具体的任务和数据集。调度策略的选用和调整可以对训练结果产生显著影响。

优化器

作用:优化器是用于更新网络权重的算法。不同的优化器对训练效果和收敛速度有不同的影响。参考值

AdamW

AdamW是Adam优化器的一种变体。它在Adam的基础上,引入了权重衰减(weight decay)来防止过拟合。AdamW通过将权重衰减与更新规则分离,能更有效地管理优化过程,尤其是在深度学习中表现良好。

AdamW8bit

AdamW8bit是一种改进版本,将AdamW的参数存储精度降低到8位。这减少了内存使用和计算负担,适用于大模型的训练,尤其在GPU内存有限的环境中。

PagedAdamW8bit

PagedAdamW8bit在AdamW8bit的基础上进一步优化,通过将参数分片或分页,以更有效地处理内存,适合在更小的GPU内存中训练大型模型。

Lion

Lion是一种新的优化器,通常被认为在某些环境下比Adam更有效。它在梯度更新时引入了方向的概念,通常在收敛速度和稳健性上表现更好。

Lion8bit

Lion8bit是Lion优化器的8位版本,通过降低存储精度来减少内存使用。它适用于大型模型和资源受限的环境。

PagedLion8bit

PagedLion8bit在Fat Duck格的基础上,进一步优化内存使用,适合在内存受限的环境中训练大型深度学习模型。

SGDNesterov

SGDNesterov是对SGD优化器的一个改进,结合了Nesterov加速的方法。生成的梯度更具前瞻性,通常可以更快地收敛。

SGDNesterov8bit

SGDNesterov8bit是SGDNesterov的8位版本,旨在减少内存占用,适合在深度学习大型模型的训练中使用。

DAdaptation

DAdaptation是一种自适应优化器,它利用数据的特点评估学习率,以在训练过程中的不同阶段进行调整。

DAdaptAdam

DAdaptAdam是一个结合了Adaptive方法(如Adam)和数据自适应的方法,旨在提升模型训练的效率和效果。

DAdaptAdaGrad

DAdaptAdaGrad是AdaGrad的一种自适应变体,利用数据特征动态调整学习速率,提高收敛速度。

DAdaptAdanIP

DAdaptAdanIP结合了Adan优化器与自适应特征,以更好地满足各种训练条件。

DAdaptLion

DAdaptLion结合了Lion优化器与自适应机制,旨在实现更佳的收敛性和效果。

DAdaptSGD

DAdaptSGD是对SGD的自适应变体,根据特定的特征和情况动态调整学习率,提升训练效率。

AdaFactor

AdaFactor是一种内存高效的优化器,特别适用于处理大型模型。它通过引入分解的梯度和新颖的学习率调整技术,来减少训练中的内存占用。

Prodigy

Prodigy是一种先进的优化器,通常结合了一系列现代优化技术,旨在高效地训练大型模型,增强学习效果和收敛速度。

重启次数

作用:这是在训练时允许的学习率重启次数,重启可以帮助模型避免局部最优并尝试新的学习周期。参考值:一般设置为13次,根据训练需求调整。

仅训练Unet

作用:这一参数用于指定训练时是否仅更新Unet部分的权重,适用于模型分阶段训练的情况。参考值:通常在迁移学习的初期,可能只训练Unet部分,之后再训练其他部分。

仅训练文本编码器

作用:与仅训练Unet类似,此参数用来指定训练时是否仅更新文本编码器的权重。参考值:此策略通常用于处理文本输入的模型调整,可以在训练过程中阶段性地训练文本编码器。

五、数据集设置

图片分辨率

作用:图片分辨率指的是输入图片的宽度和高度(以像素为单位)。分辨率会影响模型的训练效果和推理速度。高分辨率可以提供更多的细节信息,但也会增加训练时间和计算资源消耗。参考值:常见的分辨率是224x224、256x256、512x512等,根据具体任务而定。

是否启动arb桶

作用:ARB桶是一种动态调整输入分辨率的方法,依据任务需求和模型性能自动选择最适合的分辨率,可以提高训练效率和模型精度。参考值:一般可选择“是”或“否”。如果任务具有多样性,启动ARB桶可以带来更好的效果。

arb桶最小分辨率

作用:设定在使用 ARB 策略时,允许输入的最低分辨率。较低的分辨率可以减少计算资源消耗,但可能损失部分细节信息。参考值:通常设置为64x64、128x128或256x256,具体视场景而定。

arb分桶最大分辨率

作用:设定在使用 ARB 策略时,允许输入的最高分辨率。较高的分辨率可以提高模型的分类或检测精度,但也会增加计算负担。参考值:可设定为512x512、1024x1024,具体取决于可用的计算资源和训练任务的需求。

arb分桶最大分辨率划分单位

作用:这个参数通常用于定义在 ARB 策略下如何对最大分辨率进行划分的粒度。它影响分辨率变化的灵活性和训练的适应性。参考值:可以设定为16像素、32像素等,具体依据最大分辨率和整体训练需求进行调整。

六、网络设置

网络大小

作用:网络大小通常指模型的参数数量或层数,它直接影响模型的表现力和训练时间。更大的网络可能捕捉到更多的数据特征,但也更易过拟合。参考值:常见的文本或图像模型(如BERT、ResNet)可能包含数百万到数十亿的参数。选择时需考虑任务的复杂性与可用的计算资源。

网络额外参数

作用:在LoRA中,引入的额外参数用于适应低秩矩阵分解,这些参数在微调时更新,而主模型参数保持不变。这种设计旨在减少训练时的参数更新量,同时保持模型的表现。参考值:额外参数的数量通常可以设定为主模型参数的1%到5%,具体取决于任务的复杂程度。

网络Alpha

作用:网络Alpha通常是LoRA中的一个超参数,它控制低秩适应矩阵的缩放因子。Alpha越大,表示网络将对低秩适应的贡献越大,从而可能提升模型的表现,但也可能导致过拟合。参考值:一般选择范围在16到64之间,具体值可以通过实验调优以适应不同的任务和数据集。

七、打标设置

打乱标签

作用:打乱标签的主要目的是增加模型的鲁棒性,防止模型学习到标签的顺序或模式,从而提高其泛化能力。这在数据集较小或存在某种潜在依赖性的情况下尤其重要。参考值:通常在每个epoch开始时打乱一次,或者在每个batch中打乱。可以设置为布尔值(True/False),一般情况下,推荐使用True。

使用带权重token

作用:带权重token的设置用于处理不平衡的数据集。当某些类别的样本数量远多于其他类别时,可以给这些类别的token分配较小的权重,而给稀有类别的token分配较大的权重,从而使得模型在训练时更加关注这些稀有类别。参考值:权重的设置通常依赖于具体的任务和数据集的类别分布。可以通过类别频率计算权重,通常在(0.5到10)之间(例如,稀有类别权重为5,常见类别权重为1)。

保持N个token

作用:保持一定数量的token可以用于控制输入的序列长度,确保模型处理的输入不会超过其最大处理能力(如学习到的上下文信息),并提高训练效率。参考值:通常,N的取值在1到512之间,具体要根据模型的架构来决定。例如,BERT模型在其训练中常用的最大token数量是512。

最大token长度

作用:最大token长度是指在模型输入中,允许的最大序列长度。超出此长度的序列会被截断,或者进行其他处理(如拆分)。这有助于减少内存开销和提高训练速度,同时保证模型的输入符合要求。参考值:最常见的最大token长度设置为128、256或512,具体值仍然取决于模型的设计和任务特点。大型模型如G通常允许512个token,而一些具体任务可能只需要128个token即可。

八、噪音设置

噪音偏移

作用:噪音偏移是指在生成过程中添加的基于某种分布的噪音。这可以帮助模型学习更复杂的特征和获取更具多样性的输出。参考值:通常在0到1之间,一般会根据具体任务进行调整,常见值在0.1到0.5之间。

多分辨率(金字塔)噪音扩散次数

作用:指在不同分辨率下进行多次噪音扩散。这种方法可以帮助模型更好地理解细节和大局,从而提高生成图像的质量。参考值:常见的值如0到200步,具体取决于任务的复杂性。

多分辨率(金字塔)衰减率

作用:衰减率决定了在多分辨率处理时噪音扩散的强度衰减速率。合适的衰减率可以提高生成的稳定性和图像质量。参考值:衰减率通常选择在0.1到0.9之间,具体根据模型行为调整。

九、高级参数

随机种子数

作用:随机种子是用于初始化随机数生成器的值。这确保了实验的可重复性。相同的种子会产生相同的随机序列。参考值:-1(随机)。

clip跳过

作用:Clip 跳过是指在训练过程中跳过某些 Clip 层的计算。这可以减少训练时间,同时可能提高生成效果。参考值:通常选择在1到3之间,具体根据模型架构和目标任务进行调整。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。