想给 Stable Diffusion 3.5 训一个风格 LoRA,素材要几张、配置改哪里、什么时候算训成,这三个问题其实可以用一次最小训练同时回答:先用十几到几十张图、用能跑完的最短步数走通一遍完整流程,确认数据能被读到、日志有输出、中途保存的权重出图和原模型有可辨认差异,再谈画风。素材数量和步数没有通用值,需要结合显卡显存、素材一致性和你期望的风格强度确认。
先用十几到几十张素材、batch size 1、较小网络维度跑通一次完整训练,比直接堆素材和堆步数更能暴露问题。判断这一轮是否起作用,只看三个可验证点:训练脚本能否正确读到图片与同名标注、日志里是否正常打印损失、中途保存的 LoRA 用同一提示词同一种子出图是否出现可辨认差异。三点都通过再谈画风;不通过,优先回数据集和路径配置,而不是继续加步数。
把少量素材整理成训练目录并配上同名标注文件
训练脚本读数据靠的是“图片与标注同名”这一条规则,先把这条对上,其它都往后放。最省事的结构是每个风格一个子目录,图片和同名标注文件放在一起:
dataset/
style_a/
01.png
01.txt
02.jpg
02.txt
03.webp
03.txt主干名必须一致,扩展名可以不同;如果脚本走 JSONL 元数据,则每条记录里的 image 字段和 text 字段指向同一主干。尺寸上建议按 1024 长边处理,短边不足的开启 bucket 分桶,避免全部拉伸变形;裁切优先保留主体和笔触区域,宁可手动挑图,也别用自动裁切把构图切碎。
标注内容的取舍是:写你希望 LoRA 学到的风格触发词和必要描述,不写画面里本来就有的具体物体(除非你确实希望它们被绑定),也不写重复几十次的套话。标注过长会稀释触发词权重,过短则可能把内容一起学进去。素材数量建议先控制在十几到三十张之间,太少学不出稳定特征,太多在跑通阶段只会拖慢排错。
在训练配置里确认数据路径与输出目录指向正确
配置文件里最容易出错的是路径。启动前先确认三件事:数据集目录存在且脚本有读权限、输出目录可写且剩余空间足够、配置里写的是绝对路径或相对于执行目录的路径。下面是一份通用骨架,字段名需要结合你实际使用的训练脚本确认:
# 数据集配置骨架
[general]
resolution = 1024
enable_bucket = true
[[datasets]]
image_dir = "/data/lora/style_a"
num_repeats = 1
# 训练配置骨架
output_dir = "/data/lora/out"
output_name = "style_v1"
max_train_steps = 200
train_batch_size = 1
learning_rate = 1e-4
network_dim = 8
network_alpha = 8
save_every_n_steps = 50
mixed_precision = "bf16"路径自检可以直接用命令确认,不必等到训练跑到一半才发现:
ls -l /data/lora/style_a | head
ls -ld /data/lora/out
python -c "import pathlib;[print(p) for p in pathlib.Path('/data/lora/style_a').iterdir()]"如果脚本支持 dry-run 或参数预览,先跑一次确认配置能被解析。启动后立刻报找不到文件,九成是路径写错、同级目录名拼错,或者标注文件和图片主干不一致。
用最小步数跑一次,观察显存与训练日志
第一次不要追求训好,只求训完。保守取值:train_batch_size 设为 1,learning_rate 从 1e-4 起(若脚本支持 text encoder 单独设学习率,可以给更低的值),network_dim 取 8 或 16、network_alpha 与之相同或取其一半,max_train_steps 先设 100 到 200,save_every_n_steps 设为总步数的四分之一到五分之一,方便中途取权重做对比。
SD 3.5 在 1024 分辨率下显存占用偏高,出现 OOM 时先开 gradient checkpointing、使用 bf16、必要时把分辨率降到 768,而不是继续压 batch size(它已经是 1)。日志里通常会打印类似这样的一行:
steps: 40/200 [00:12<00:48, 3.2it/s, loss=0.0842, lr=1e-4]读法是看趋势而不是看单点:前几十步损失快速下降后趋于平缓并小幅上下波动,属于正常;如果出现 nan、inf 或长时间不下降,优先检查学习率是否偏高、精度设置是否合适、标注是否异常。损失不是越低越好,它只说明模型在拟合这批图。
用训练中途保存的权重出图,与原模型对比
判断 LoRA 有没有开始起作用,靠的是同条件对照,不是凭感觉。固定提示词、随机种子、采样步数、CFG、分辨率和采样器,只在“是否加载 LoRA”这一个变量上做切换:
prompt = 'a photo of sks_style, a cat sitting on a wooden chair'
seed = 1234
steps = 28
cfg = 4.5
size = 1024x1024
lora_scale = 0.7先用原模型跑一遍,再加载 save_every_n_steps 保存下来的中间权重跑一遍,两次结果并排看。判断标准是可以直接说出来的:色调和笔触是否变化、构图倾向是否偏移、主体是否还完整。只改变其中一个方面、且没有出现明显崩坏,通常说明 LoRA 已经生效;如果两张图几乎一样,说明步数或 scale 还不够,或者标注没有把风格特征写进去。
根据对比结果决定继续加步数还是回到数据集
训练不足和训练过度在出图上的表现是可区分的。训练不足时,风格差异只在部分提示词下出现,换一个主体就基本退回原模型,画面质量正常;这时可以按原有 save_every_n_steps 继续加步数,或把 lora_scale 适度调高再观察。训练过度时,几乎任何提示词都被拉向同一套色调和纹样,提示词里的物体被削弱甚至消失,画面出现重复纹理、过曝或糊感,text encoder 过拟合还会让模型对提示词的理解变差。
如果出现的是后者,继续加步数只会更糟,应回到数据集环节:检查标注里是否有大量重复套话、素材构图是否过于单一、num_repeats 是否偏高、裁切是否切掉了主体。把这几项调整后再跑一次同样步数的训练,用同一组提示词和种子对比,就形成了一轮可重复的闭环。每轮只改一个变量,出图结果才有可比性。