写一份 train.toml,12 项检查里 6 项不对:硬错 2 项(分辨率 520 不能被 64 整除、 数据集目录是空的)会当场报错; 另外 4 项训练器一句不吭——保存间隔 20 大于总轮数 10、学习率 0.02、alpha 16 大于 dim 8、 VAE 没填。
上一节把图和标签都备齐了。 这一节把它们和底模的路径填进配置,并且用脚本把配置过一遍——因为训练器只检查「能不能跑」。
一、训练配置就四段
不管界面长什么样,底下的配置文件就四个段:
| 段 | 管什么 | 关键字段 |
|---|---|---|
| model | 底模与 VAE | pretrained、vae |
| dataset | 图与输入 | img_dir、resolution、batch_size、num_repeats |
| training | 训练过程 | learning_rate、epochs、save_every_n_epochs |
| network | LoRA 本体 | network_dim、network_alpha |
| 为什么写成文件,而不是在界面上点:文件能进 Git、能复制、能对比、能被脚本校验。 | ||
| 界面上点的参数,你下周就记不清上次用的是哪一版。 | ||
| 📋 实操清单:训练器界面上每个输入框,都能在配置文件里找到对应字段。 | ||
| 先照着界面点一遍,然后把生成的配置存下来,以后就用这份当模板改。 | ||
路径有两条硬规矩:别带中文、别带空格。Python 里 \ 是转义符,Windows 路径要么写正斜杠 /, |
||
| 要么写双反斜杠。这是「文件明明在,却说找不到」的第一大原因。 |
二、12 项检查,6 项不过
Demo 拿一份故意写错的配置过了一遍,不通过的六项和它们的后果:
| 不通过的项 | 值 | 后果 |
|---|---|---|
| 数据集里有图 | 0 个 | 当场报错:没有训练数据 |
| 分辨率能被 64 整除 | 520 | 当场报错:除 64 余 8 |
| VAE 路径 | 空 | 退回底模自带,某些底模会偏灰 |
| 学习率量级 | 0.02 | 训崩,样图第 3 轮开始花 |
| 保存间隔 ≤ 总轮数 | 20 对 10 | 跑完一个权重文件都不存 |
| network_alpha ≤ dim | 16 对 8 | 等效缩放 2 倍,等于偷偷加学习率 |
| 前两项是硬错,训练器会当场停下来,你能立刻发现。后四项不报错——这才是这一节真正要说的事。 |
三、四项不报错的,才是最贵的
① 保存间隔大于总轮数。 这一项最阴:训练能完整跑完、日志一行不红,
但一个权重文件都不会保存。你盯了两个小时,最后什么都没有。
检查方法:save_every_n_epochs 必须小于等于 epochs,最好能整除。
② 学习率 0.02。 SD 训练常用 1e-4 量级,0.02 大了两百倍。
它不会报错,只会把模型训崩——表现是「第 3 轮开始出的样图全花了」。
这类错只能靠人看样图发现,所以训练时一定要开样图输出。
③ alpha 大于 dim。 LoRA 的实际缩放是 alpha / dim,alpha=16、
dim=8 时等于把改动量乘了 2 倍——相当于你设的学习率被悄悄放大了一倍。规矩很简单:
alpha 等于 dim,或者等于 dim 的一半。
④ VAE 没填。 大多数底模自带 VAE,不填也能跑。
但有些社区底模的 VAE 有偏色问题,不显式指定就会训出灰调、发白的图。表现是「样图颜色不对」,
很容易被误认为「数据集有问题」。
四、把配置当代码管
三条纪律。
第一,配置文件进版本管理,文件名带上日期和关键参数(lora_20261025_r8_lr1e-4.toml),
这样「上次那个效果不错的版本」是可回溯的。
第二,每次开训前跑一遍校验。 十二项检查、二十行代码、一秒跑完,
比训废一轮便宜太多。 校验脚本应该和配置放在一起。
第三,留下三样东西:配置文件、启动命令、样图。只留权重文件是不够的——
没有配置,你复现不出这个权重。
最后一句提醒:界面上的「开始训练」按钮,
它检查的是「参数格式对不对」,不是「参数值合不合理」。这两件事之间的差距,
就是这一节的四类事故。
五、动手 Demo:配置校验:12 项里 6 项不对,其中 4 项训练器不报错
用 tomllib 造一份带六处错误的 train.toml(分辨率 520、学习率 0.02、保存间隔大于总轮数、
alpha 大于 dim、VAE 路径不存在、数据集目录为空),解析后跑 12 项检查,
标出哪些是「会当场报错」的硬错,哪些是「训练器不会报」的隐性错。
with open(p, "rb") as f:
c = tomllib.load(f) # 标准库直接读 toml
def chk(name, ok, msg, hard):
rows.append([name, u"通过" if ok else u"不对", msg])
if not ok:
probs.append((name, hard)) # hard=True 表示会当场报错
res = c["dataset"]["resolution"]
chk(u"分辨率能被 64 整除", res % 64 == 0,
u"%d 除 64 余 %d" % (res, res % 64), True)
chk(u"保存间隔 ≤ 总轮数",
c["training"]["save_every_n_epochs"] <= c["training"]["epochs"],
u"%d 对 %d" % (20, 10), False) # False:训练器不报
实跑输出:
--------------------------------------------------------------------
配置校验:12 项里 6 项不对,其中 4 项训练器不报错
--------------------------------------------------------------------
配置文件 train.toml,21 行
解析出几段 4 段(model/dataset/training/network)
检查项 结果 说明
----------------------------------------------------------------
底模路径 通过 存在
VAE 路径 不对 没填 VAE,会退回底模自带
数据集目录 通过 目录在
分辨率能被 64 整除 不对 520 除 64 余 8
batch × 重复数 通过 2 × 10 = 20
学习率量级 不对 0.020,SD 训练常用 1e-4 量级
保存间隔 ≤ 总轮数 不对 20 对 10,永远存不下来
输出目录父级存在 通过 在
混合精度取值 通过 bf16
network_alpha ≤ dim 不对 alpha 16 大于 dim 8,等效缩放 2.0 倍
数据集里有图 不对 0 个文件
总步数估算 通过 100 步
**12 项里有 6 项不过。** 其中硬错 2 项(分辨率不合法、数据集目录是空的),
这些会让训练器当场报错。**剩下的 4 项它不会报。**
「保存间隔 20 > 总轮数 10」最阴:
**训练能跑完,但一个权重文件都不会保存。**你盯着日志等半天,最后什么都没有。
「学习率 0.02」也不会报错——它会把模型训崩,表现为「第 3 轮开始出的样图全花了」。
**这类错只能靠人看样图发现。**
「alpha 16 大于 dim 8」同样不报错:等效缩放 = 16/8 = 2 倍,**学习率相当于被悄悄放大了一倍。**
所以配置要写成文件、用脚本校验,而不是在界面上点。
**界面只检查「能不能跑」,不检查「跑出来对不对」。**
12 项里 6 项不过,其中只有 2 项是硬的:分辨率不能被 64 整除、数据集目录里一个文件都没有。
这两项训练器会当场停下来。
剩下 4 项它一句不吭。 我特意在代码里用一个 hard 参数把它们分开——
这个参数不是给训练器看的,是给人看的:它告诉你「哪几项要你自己盯」。
「保存间隔 20 对 10」那份配置最值得琢磨:训练会完整跑完,日志全绿,然后 output 目录是空的。
这是唯一一种「花了全部时间、产出为零」的错。
「alpha 16 大于 dim 8」那条的说明写的是「等效缩放 2.0 倍」——注意这不是一个绝对值错误,
而是「学习率被放大了一倍」。所以它和「学习率 0.02」会叠乘:0.02 再乘 2 倍,就是 0.04。
最后一句是这个 Demo 的结论:
界面只检查「能不能跑」,不检查「跑出来对不对」。所以配置必须能被脚本校验——
这就是为什么要用 toml 而不是点按钮。
30 秒实验
- 把 save_every_n_epochs 从 20 改成 5,重跑,看「不过」从 6 项降到 5 项。 只有这一项变了——说明检查项之间是独立的。
- 把 resolution 从 520 改成 512,看硬错从 2 项降到 1 项。 「数据集里有图」还是错的——那个得真放一张图进去。
- 往 img 目录里放一个文件再跑,看最后一项说明变成什么。 它会变成「1 个文件」并通过——但一个文件是训不出东西的,检查项抓不到这种事。
常见误区
- 「界面能跑起来就没问题」。界面只查参数格式,不查参数值合不合理。四类事故全在这个缝隙里。
- 「保存间隔随便填」。大于总轮数就一个文件都不存,而且不报错——花了全部时间,产出为零。
- 「alpha 和 dim 填一样大就行」。填大了等于放大学习率,会和你设的学习率叠乘。
自测三问(点开对答案)
1. 训练配置有哪四段? —— model(底模与 VAE)、dataset(图与输入)、training(训练过程)、network(LoRA 本体)。 2. 哪一种配置错会导致「训练跑完但没有文件」? —— 保存间隔大于总轮数。它不报错,训练会完整跑完,只是永远到不了保存点。 3. 为什么配置要写成文件而不是在界面上点? —— 文件能进版本管理、能复制对比、能被脚本校验。界面上点的参数事后查不回来。配置通了就能开训。这一章还剩两节:训完的产物是什么、怎么部署,以及出图时那几个参数到底怎么调。
- ☐ (本节完,下一节 7.2.1 部署训练好的LoRA模型)