28 张图、每张重复 10 次、10 轮、batch 2,总步数 1400。 热身 70 步(总步数的 5%),学习率从 1.43e-06 升到 1.00e-04 再余弦降到 0。 显存粗估 2033 MB,其中底座模型常驻 2000 MB。
上一节把标签写好了。这一节是训练器界面上真正要填的那几个数——填错了,前面所有准备都白做。
一、先算步数,别的都往后放
步数公式:图片数 × 重复次数 × 轮数 ÷(batch × 梯度累积)。 Demo 里 28 张、重复 10 次、10 轮、batch 2、累积 1,每轮 140 步,总共 1400 步。 这个数是训练的核心指标。 经验区间是 1000 到 3000 步:低于 800 步常常「没学会」, 高于 4000 步开始「学过头」——模型把训练图的每个瑕疵都背下来,换个提示词就出鬼影。 三个变量都能改步数,但效果不一样:重复次数是「同一张图看几遍」, 轮数是「整个数据集过几遍」。数据少的时候优先加重复次数,因为轮数多了容易在后期过拟合。
二、学习率:先热身再余弦
常见做法是「热身 + 余弦下降」:前 5% 的步数把学习率从 0 线性升到峰值,之后按余弦曲线降到 0。 Demo 里峰值 1e-4,热身 70 步。 第 35 步时约 5.14e-05,第 70 步到峰值 1.00e-04,第 700 步(一半)降到 5.41e-05,第 1400 步降到 0。 热身的作用是别让第一步就把预训练权重打歪。余弦下降的作用是后段小步微调,把细节磨平。 这两件事都不影响「能学多少」,只影响「学得稳不稳」。 LoRA 的常用峰值是 1e-4 到 3e-4。 这个区间比全量微调大一个数量级——因为要训的参数少,每个参数可以走得更猛。
三、显存怎么估
显存有四块:底座模型常驻、LoRA 权重、优化器状态、激活值。 Demo 的粗估:底座 2000 MB(fp16 的 SD 1.5 大约这个量级)、LoRA 权重 3.1 MB、 优化器状态 12.6 MB、激活值 17 MB,合计 2033 MB。 看这个构成就明白了:底座占了 98%。所以「LoRA 省显存」省的是后三项,底座那 2 GB 一分都省不掉。 这一行只是量级参考,不是精确值。 真实占用跟注意力实现(有没有开 xformers)、是否用 8bit 优化器、是否开梯度检查点都有关, 必须以实际跑起来为准。我这里没有显卡,测不了,就不编数。
四、界面上还要填什么(我没有跑)
沙箱没有显卡也没有 Stable Diffusion,这一段是清单不是实录。
1. 底座模型路径:选 8.3.2 里放好的那个,注意版本(SD 1.5 还是 SDXL)。
2. 数据集目录:指向 mygirl_10 这种「名字_重复次数」的目录。
3. 输出目录和文件名:先随便起个名字,训完再重命名,别一开始就想名字。
4. 网络维度(network dim)和 alpha:dim 就是 8.3.1 里的秩 r,alpha 一般设成 dim 的一半或相等。
5. 保存间隔:设成每 200 到 500 步存一个。这样训过头了还能回退到中间某个版本,不用从头再来。
第 5 步最容易被忽略,但它救过很多人。
存下来的中间版本里,往往第 1200 步的那个比第 3000 步的更好用。
五、动手 Demo:参数账:1400 步怎么来的,学习率怎么走,显存怎么估
按 28 张图、重复 10 次、10 轮、batch 2 算每轮步数和总步数; 列出重复次数和轮数的九种组合对应多少步、落在哪个区间; 画出热身加余弦的学习率曲线在若干关键步上的取值;最后粗估显存的四块构成。
steps_per_epoch = imgs * repeats // (batch * accum)
total = steps_per_epoch * epochs
warm = max(1, int(total * 0.05))
if s < warm:
lr = 1e-4 * (s + 1) / float(warm) # 线性热身
else:
p = (s - warm) / float(max(1, total - warm))
lr = 1e-4 * 0.5 * (1 + math.cos(math.pi * p)) # 余弦下降
实跑输出:
--------------------------------------------------------------------
参数怎么调:训练步数、学习率曲线、显存
--------------------------------------------------------------------
图片数 28
每张重复次数 10
训练轮数 10
batch size 2
梯度累积 1
每轮步数 140
总步数 1400
步数公式:图片数 × 重复次数 × 轮数 ÷(batch × 累积)。这张 LoRA 一共 1400 步。
这个数最常用的经验区间是 1000~3000 步。低于 800 步常常「没学会」,高于 4000 步开始「学过头」——模型把训练图的每个瑕疵都背下来了,换个提示词就出鬼影。
改一个变量,看总步数怎么变:
重复次数 轮数 总步数 判断
------------------------------
5 5 350 偏少
5 10 700 偏少
5 20 1400 合适
10 5 700 偏少
10 10 1400 合适
10 20 2800 合适
20 5 1400 合适
20 10 2800 合适
20 20 5600 偏多
学习率怎么走:常见的是「先热身,再余弦降到 0」:
第几步 学习率
----------------
0 1.43e-06
35 5.14e-05
70 1.00e-04
350 8.95e-05
700 5.41e-05
1050 1.61e-05
1400 0.00e+00
热身步数 70(总步数的 5%)
峰值学习率 1.00e-04
热身的作用是别让第一步就把预训练权重打歪;余弦下降的作用是后段小步微调,把细节磨平。这两件事都不影响最终能学多少,只影响学得稳不稳。
显存怎么估(fp16 训练,只算 LoRA 部分):
底座模型(fp16,常驻) 2000 MB
LoRA 权重 3.1 MB
优化器状态 12.6 MB
激活值(粗估) 17 MB
合计粗估 2033 MB
最后这一行只是量级参考,不是精确值——真实占用跟注意力实现、是否开 xformers、是否用 8bit 优化器都有关,必须以实际跑起来为准。
1400 步落在 1000 到 3000 的合适区间里。 九宫格那张表能看出:重复 5 次配 5 轮只有 350 步,肯定不够; 重复 20 次配 20 轮是 5600 步,明显过头。 学习率从 1.43e-06 起步(第 0 步),70 步到 1.00e-04,最后一步降到 0。 这个形状是「先给足动力,再慢慢收」。 显存那四行:底座 2000 MB 一家独大。 所以显存不够时,降 batch、开梯度检查点、换 8bit 优化器,能省的只有后三项那一小块。 真要省,得换小一点的底座。 「合计粗估 2033 MB」这个数不能用来说「6 GB 卡够用」——它还差得远。 真实的 PyTorch 运行开销、CUDA 上下文、图像解码缓存都没算进去,实际通常是这个估算的两到三倍。
30 秒实验
- 把 batch 从 2 改成 1,看总步数怎么变、显存降多少。
- 把热身比例从 5% 改成 20%,看曲线前段拉长多少。
- 想一想:为什么数据少的时候要优先加重复次数而不是轮数?
常见误区
- 「步数越多效果越好」——过了 4000 步模型开始背训练图,换提示词就崩。
- 「学习率越大训得越快」——LoRA 峰值超过 3e-4 很容易把底座打歪。
- 「LoRA 省显存所以什么卡都能跑」——底座那 2 GB 省不掉,6 GB 卡跑 SDXL 很难。
自测三问(点开对答案)
1. 训练步数怎么算? —— 图片数乘重复次数乘轮数,再除以(batch 乘梯度累积)。 2. 为什么学习率要热身? —— 避免第一步就把预训练权重打歪,让它从 0 平滑升到峰值。 3. 显存里最大的一块是什么? —— 底座模型本身,LoRA 那部分省不下来它。参数填完就该开训了。最后一节讲训完之后怎么判断好坏、怎么调力度。
- ☐ (本节完,下一节 8.3.5 测试模型:评估模型应用效果)