Ostris AI工具包LoRA训练指南
大约一年前,我写了一篇关于LoRA训练的文章(如何训练LoRA)。那时Flux.1 Dev被视为开源领导者,我对使用FluxGym和FluxTrainer创建的LoRA质量感到惊讶。
现在到了2026年初,模型格局已经大不相同,我认为是时候重新审视LoRA训练了。编辑模型有了很大改进,但在处理一致的角色和风格时,一个高质量的LoRA仍然是一个强大的工具。
目前我主要使用Flux.2 Dev、Qwen Image、Flux.2 Klein和Z-Image Turbo,所以我想为这些模型生成LoRA,这些模型在FluxGym中不可用于训练。
在写第一篇文章时,我认为Ostris的AI工具包是存在的,但与FluxGym相比它处于早期阶段。现在Ostris AI工具包可能是最受欢迎的LoRA训练器之一。
我原来文章的大部分内容仍然适用,所以如果你是LoRA训练新手,在阅读本文之前值得一读。本文主要关注使用AI工具包。
我将介绍在本地和RunPod上运行AI工具包。实际上,除非你有至少24GB显存的高端GPU(实际上需要32GB以上),否则你在本地能做的训练将仅限于Z-Image,可能还有Flux.2 Klein。我发现运行Qwen Image训练至少需要32GB,到目前为止我只在80GB显存上成功运行了Flux.2 Dev训练。
1、LoRA还是LoKr?
虽然每个人都提到LoRA,但在AI工具包中,除了标准LoRA选项外,还有一个叫做LoKr(低秩Kronecker积)的变体。LoKr是一种更参数高效的微调方法,理论上在微调大型模型时可以获得更好的准确性。
缺点是LoKr训练有更高的计算成本和更高的显存需求,然而,它可以在中小型角色数据集上更快达到可用的相似度,并保留更多细节。这些因素可能使它成为角色LoRA的理想选择,但并非在所有情况下都是如此。
一般来说,ComfyUI LoRA加载器也可以加载LoKr,所以如果模型支持LoKr,它们在某种程度上是可互换的——这有点难以判断,Flux通常被列为支持LoKr,Qwen则不太明确。这也可能取决于你是否使用基础模型还是微调模型生成图像。
我用LoKr运行了一些测试,但效果不太理想,目前我把这归因于没有花足够时间试验设置。建议似乎是,先创建一个普通的LoRA,如果它在实现角色一致性方面不够好,再用相同的数据集作为LoKr重新运行。
为了简单和一致性,在我的示例中,所有训练都作为普通LoRA完成。
2、网络维度和Alpha的回顾
我在之前的LoRA文章中介绍了网络维度(也叫线性秩)和网络Alpha的概念,但快速回顾一下:
- 网络维度(线性秩):控制LoRA的学习容量,它能吸收多少数据。
- 网络Alpha:控制LoRA的灵活性,它允许多少训练中的方差。
通常对于角色LoRA,网络维度16就足够了,网络维度32是高端的。任何高于32的网络维度通常保留给风格LoRA。
对于网络Alpha,建议将其设置为与网络维度相同或为网络维度值的一半。
使用FluxGym时,我发现这些设置效果很好,然而,到目前为止我在AI工具包中进行的所有训练都需要使用32/32才能获得好结果。不知道这是否与我当前的数据集、这些特定模型或AI工具包的处理方式有关,但任何低于32/32的设置对我来说都产生了糟糕的LoRA。
注意:网络Alpha只能在AI工具包的高级设置中设置。
3、在本地运行AI工具包
如果你想直接安装AI工具包并且愿意折腾Python库,可以从GitHub手动安装,但对于Windows用户有一个更容易使用的一键安装器。安装器应该能根据你当前的设置处理正确的依赖。
重要的是要注意,AI工具包使用PyTorch、Triton和30多个其他依赖库,所以要小心不要破坏任何现有环境。
由于我已经有了ComfyUI、Wan2GP和FluxGym的实例,我开始使用Pinokio作为环境管理器。对于AI工具包有一个Pinokio模板,安装后可以轻松更新,避免依赖地狱的风险。
我在RTX4060 Ti OC(16GB显存)和64GB系统内存上本地运行AI工具包。它运行良好但有限制,即使对于较小的模型也相当慢,因此我也使用了RunPod。
4、在RunPod上运行AI工具包
我有时觉得RunPod很令人沮丧,主要是因为它不够用户友好。很多模板需要你手动上传或拉取模型、编码器和VAE,所以设置相当麻烦,除非你维护永久存储。话虽如此,一旦你理解了它,RunPod确实提供了对高端硬件的经济高效访问,这对那些要求高的任务非常有用。
出于本文的目的,我不打算介绍基本的RunPod设置和使用,有很多现有的指南,所以我直接从硬件和模板选择开始。
如果你想为Qwen或Flux.2 Klein创建LoRA,你将需要选择至少32GB显存的Pod,更实际的是48GB以避免内存不足(OOM)问题。对于Z-Image,24GB就足够了,你可以使用"低显存"和其他优化设置来运行其他模型,但我发现这不可靠,而且你不希望在训练两小时后出现OOM。对于Flux.2 Dev,你需要选择80GB以上显存的Pod。
值得庆幸的是,对于AI工具包有一个预制的官方模板,几乎是全自动的。然而,在启动Pod之前有两件重要的事情要做。
选择AI Toolkit-Ostris-ui-official模板后,点击右边的编辑按钮打开Pod Template Overrides。在对话框底部有一个环境变量的下拉菜单,点击下拉箭头展开此部分。
在标有'password'的框中输入新密码,这将是你访问AI-Toolkit界面时使用的密码。
接下来点击'Add Environment Variable'。在新框的第一个中输入'HF_Token',在第二个框中输入你的Hugging Face令牌值,然后点击'Set Overides'。
HF令牌被AI-Toolkit用来访问Hugging Face下载模型,如果你没有令牌,可以按如下方式获取:
- 登录Hugging Face,点击右上角的用户图标,然后从菜单中点击'Settings'链接。
- 从左侧菜单选择'Access Tokens'
- 点击右上角标有'Create New Token'的按钮,选择'Read'作为令牌类型并给它一个名称。
- 点击'Create Token',确保复制显示的令牌并将其存储在安全的地方,因为你将无法再次查看它。
如果你在启动Pod之前没有添加HF令牌,一旦运行后唯一的方法是创建到Pod的SSH隧道,然后在ai-toolkit目录中创建一个带有令牌详细信息的.env文件。这需要在RunPod上设置公钥/私钥对并使用SSH客户端——都是可能的,但比事先编辑麻烦得多!
5、创建你的第一个训练运行
AI工具包的界面相对简单,启动时会带你到仪表板。无论你是直接在本地运行、使用Pinokio还是创建RunPod,好消息是界面完全相同,你可以使用相同的设置,只需根据你可用的显存进行调整。
5.1 数据集
在运行任何训练之前,你需要至少组装一个数据集。我原始文章中关于数据集的信息仍然适用——少量高质量图像比大量低质量图像好得多。
你可以用少至15-20张图像训练一个高质量的角色LoRA,风格LoRA需要更多。AI工具包自动处理训练集分辨率,所以不需要确保它们都是相同的大小,但尽可能将图像裁剪到主题确实有帮助。你想要的是不同的角度、表情、照明等。
要创建数据集,点击Datasets/New Dataset并给数据集命名。然后点击Add Images添加你的图像。如果你有大量图像,我发现分批添加更可靠,特别是使用RunPod时。
5.2 标注
如何标注(或不标注)训练数据集是网上热烈讨论的话题,没有明确的答案(部分原因是不同模型的最佳方式不同)。我的经验仍然是"标注你不想训练的内容"这种方法最好。
例如,如果你正在创建一个角色LoRA,你不标注眼睛颜色、面部特征或肤色,但你会标注眼镜(如果你想能够创建不戴眼镜的图像)和配饰,如耳环和帽子。如果你想在图像生成期间能够改变发型和颜色,你应该标注发型和颜色,特别是如果数据集角色有不同的发型和颜色。如果你不标注它们,那么当你在生成期间提示不同的风格或颜色时,提示会与LoRA冲突。
如果你使用触发词,它应该在标注的开头附近。
AI工具包会从训练数据目录中读取.txt标注文件,其中标注文件与图像同名,或者你可以直接在AI工具包中创建标注。
另一个选择是使用自定义的ComfyUI节点和工作流,如ComfyUI-JoyCaption来生成标注,但生成的标注之后需要一些编辑。
5.3 创建新任务
一旦你有了数据集,就可以通过点击New Job来创建训练任务。
我将在此部分附上免责声明,这些设置是对我有效的——我不声称这些是最佳或唯一有效的设置。当涉及到LoRA训练设置时,有很多不同的观点和经验!(当然,不同模型之间会有差异)
有很多设置无法在这里详细涵盖,但更多关于设置的细节可以在以下指南中找到:Ostris AI工具包LoRA训练用于扩散模型微调 | RunComfy
许多设置被设置为良好的起始值,所以不需要更改所有设置,但有一些重要的需要检查和更新:
- 训练名称:不言自明,但如果你有很多保存的训练任务,给它一个有意义的名字是明智的。
- 触发词:触发词不是强制性的,但很有用,特别是对于角色LoRA,因为它提供更多控制和灵活性。
- 模型架构:这是主要的模型选择,有很多模型会在使用时自动下载,所以确保你有足够的磁盘空间,因为一些模型可能有40GB以上。
- 低显存:当只有16GB显存在本地运行时,我一直启用这个,当使用24GB以上显存的RunPod时,对于除Z-Image外的所有模型我仍然需要保持启用。
- 量化:我保持在float8,但你可以降到更低的设置以节省内存,但可能会有质量影响。
- 目标:如前所述,有LoRA或LoKr选项。在这些测试中全部使用LoRA,但在某些情况下LoKr实验可能值得。
- 线性秩:这是网络维度,如前所述,经过一些测试后我坚持使用32,因为我发现16不能产生好结果。如果你想更改网络Alpha,你必须点击Show Advanced并在设置中手动更改linear_alpha行。
- 数据类型:BF16是默认值,但如果你真的需要,可以更改为FP16或FP32。
- 保存间隔:这控制在训练期间创建多少个中间LoRA。这很有用,因为有时训练期间较早的版本实际上是最好的,特别是在训练过度的情况下。我倾向于每500步保存一次。
- 批量大小:默认值1效果很好,如果你有足够的显存,可以推到2。更高的值应该会减少训练时间,但如果你远高于2,可能会影响质量。
- 优化器:我通常使用AdamW8bit,我尝试过Adafactor但似乎没有得到好结果。
- 时间步类型:我从Weighted开始,但在几个……(行截断到2000字符)
其他设置在链接的文章中有介绍,涉及更技术性的领域,在这些测试中它们被保留为默认值。
步骤/轮次
AI工具包不使用轮次(Epochs),它只有总步数作为设置。指导方针仍然相同,角色LoRA通常需要约1,500-2,500步,每张图像约100次传递。
太多步骤可能导致过度训练,所以如果你有较少的图像,你可能需要减少步数。你还应该在训练期间关注样本,以查看模型何时达到最佳点。
数据集
确保你打算使用的训练数据集在Target Dataset选项中被选中。你还可以添加Default Caption,以防你遗漏了任何标注,这应该是简单的并使用[trigger]引用触发词。
我使用了默认分辨率选项,但如果需要,你可以包含或排除分辨率。
样本
在屏幕下方,你可以调整Sample Every,这改变训练期间它会停止创建样本图像的频率。由于这在训练期间需要时间,我将其增加到每500个样本一次,以匹配LoRA保存的频率。我还将样本图像数量减少到3。
样本图像的提示可以根据需要编辑。我添加了我的触发词。
完成所有这些后,你可以点击Create Job将其添加到任务队列,此时不会启动任务。
5.4 训练队列
点击左侧的Training Queue选项将显示当前排队的任务和任务状态。要启动任务,你需要点击任务旁边的播放(三角形)选项,还要点击屏幕右上角的Start,那里有队列状态。
一旦启动,眼睛符号将带你进入任务的当前详情,显示日志信息、样本和损失信息。
如果你查看日志,你应该会看到AI工具包下载它需要的模型,创建一些参考图像,然后开始训练。现在是去做点别的事情的时候,只是偶尔检查一下以确保一切继续进行。
可能是一个小时、六个小时以上,或介于两者之间的任何时间,取决于步数、选择的模型和其他设置。
失败的运行最可能发生在模型下载或训练的前几步,此时OOM的风险最高。
务必在生成样本时查看它们,因为它们可以表明你是否正在达到过度训练点。你可以在任务仍在训练时下载中间LoRA。
你可以向队列添加多个任务,使它们在彼此之后自动运行。
6、示例结果
我用许多不同的训练集和模型完成了多次LoRA训练运行。为了比较一些示例,我保持简单——一个角色的15张图像的单个集合。原始图像是AI生成的,带有角色表以创建一系列图像。这不是最理想的,但我挑选了最好的图像以确保它们尽可能接近,唯一的小问题是皮肤质量不如真实图像好,然而,我做的其他训练运行是真实的人,所以我也会根据那些评论细节。
鉴于LoRA训练需要多长时间,我还将这些示例中的步数限制为1,500,注意到在某些情况下更长的运行可能更好。LoRA训练是一项反复尝试的活动,有很多变量,因此每个人都会有不同的体验。这里的目的是给出一些一般性的示例和评论,以帮助人们在自己的旅程中引导。每个人的结果都会不同,数据集可能产生巨大差异。
下面展示了几个训练集图像作为参考。对于标注,我包含了发型和颜色,以及服装,以便我可以改变这些方面,所以比较是基于脸型、眼睛、鼻子、嘴唇等。我也没有将其标注为照片,理论上这意味着生成的LoRA应该能够继承其他风格——标题图像就是这样创建的。
6.1 Z-Image Turbo
我预计Z-Image Turbo会产生好结果,在某些情况下确实不错,但它出人意料地不可预测,需要多次运行才能得到我认为质量合理的结果。我尝试了所有三个不同的模型——Z-Image Turbo、Z-Image De-Distilled和Z-Image Base——令人惊讶地发现Z-Image De-Distilled似乎给出了最好的结果,而不是我预期的Z-Image Base。
在某些输出上,我需要将LoRA强度推到2以上才能获得好结果,而且通常我发现强度需要高于1。质量还可以,但不突出。
下面的集合使用了用Z-Image Base训练的LoRA,第一张图像是没有LoRA的参考。
LoRA在Z-Image De-Distill上更强,如果将强度增加到1.5以上会迅速崩溃。
这些图像可能对Z-Image LoRA不太公平,因为我的一些其他运行更好,可能是Z-Image与这个数据集不太配合。总的来说,我的体验是混合的,皮肤质量尤其像蜡,整体图像质量受到LoRA的影响。
作为一个简单的测试,我尝试了一个面部比较应用(虽然我不认为它们特别好),输出得分在50-60%之间,应用认为很可能是同一个人。"无LoRA"版本得分低于50%。
另外值得注意的是,这些使用LoRA的生成是针对微调模型的,因为这比原始Z-Image Turbo给出了更好的结果,这令人惊讶,因为LoRA有时与微调变体配合不好。
6.2 Flux.2 Klein 9B
Flux.2 Klein 9B在LoRA生成方面比Z-Image有了很大进步,需要更多显存和更长的处理时间。我的初始结果很糟糕,但在这个样本上它表现得更好。
Flux.2 Klein LoRA相对较强,通常在强度为1左右效果最好。相似度很好,在比较应用上获得约60%以上(应用认为很可能是同一个人)。
我认为质量比Z-Image好,皮肤仍然有点像蜡,但这可能也是从数据集传来的。Flux.2 Klein LoRA在相同的32/32网络秩和Alpha设置下比Z-Image LoRA略小。
这些输出是用Flux.2 Klein 9B精炼模型生成的,而不是蒸馏模型。
6.3 Qwen Image 2512
Qwen Image训练推向40GB显存,需要时间但结果值得。质量的提高很可能与LoRA大小是Z-Image和Flux.2 Klein的3倍直接相关,即使设置相同。令人惊讶的是,它也比Flux.2 Dev LoRA更大。
我发现最好的结果是将强度保持在1以下,通常为0.8-0.9。皮肤细节更好(即使数据集有问题),整体图像有更自然和逼真的感觉。
在比较应用中,相似度与Flux.2 Klein相似,约为60%。与Z-Image一样,使用LoRA的生成在精炼的Qwen Image模型上比在原始Qwen Image 2512上更好。
6.4 Flux.2 Dev
Flux.2的最终结果也令人印象深刻,但需要很长时间才能成功训练,最终需要80GB显存的RunPod。Flux.2 Dev也是所有模型中训练最慢的。
与Qwen Image一样,最佳强度通常在1左右,图像质量很好,但感觉与Qwen Image非常不同,但这可能反映了Qwen Image和Flux.2 Dev之间固有的风格差异。
应用比较测试得分略低于Qwen Image,然而,在比较使用同一LoRA创建的多个图像时,比较得分超过70%,远高于任何其他模型在比较同一LoRA创建的两张图像时的得分。
7、结束语
我开始为我当前正在使用的模型构建LoRA,并成功实现了这一目标,然而,除了Z-Image外,我不得不为所有这些使用RunPod实例。这并不是一件坏事,假设你对成本满意,因为鉴于训练LoRA所需的时间,它可能最好在RunPod上运行,让你的机器自由地进行生成。
LoRA生成是一个耗时的过程,当一个生成在数小时后失败或表现不佳时充满挫折,所以令人欣慰的是,特别是Qwen Image在生成高质量LoRA方面似乎很可靠,不需要多次迭代。
我对Z-Image感到失望,但我希望一些进一步的调整会改善输出质量。Flux.2 Klein确实在一些运行中产生了好结果,但它出人意料地重,所以我会质疑什么时候我会在Qwen Image上使用它,后者只用小幅硬件需求提升就给出了好得多的结果。
Flux.2 Dev的质量与Qwen Image相当,但有时我很难在RunPod上找到能够运行Flux.2 Dev训练的可用硬件,因为显存需求太高,所以这目前限制了它的使用。
这让我想到我最可能专注于Qwen Image的LoRA,可能再试验一些Z-Image以提供快速生成选项。
但关键是Ostris AI工具包是一个坚实、可靠的应用程序,在LoRA训练方面效果很好。有很多强大的设置我还没有机会试验,但即使使用标准默认值,你也可以在一系列模型上生成出色的LoRA。
原文链接: How to Train a LoRA (Ostris AI Toolkit)
汇智网翻译整理,转载请标明出处