Lora 模型微调指南:基于 Stable Diffusion 的落地路径
1 微调 Lora 模型,到底值不值得搞?
一开始我其实对“微调”是没什么感觉的,尤其是在玩 Stable Diffusion 的时候,感觉模型够用,Prompt 写得好就行。但后来想生成一些特定风格人物或者 Logo、私有领域图像,怎么写 prompt 都绕不出来。这时候你就知道:自己训一个 Lora,比在网上翻模型翻到天荒地老要高效得多。
但训练这个东西,真不是点点按钮那么简单。你要考虑硬件资源、数据清洗、训练稳定性,甚至部署推理怎么接到你的 WebUI 上,里面的坑不踩一轮根本不知道哪里有问题。
2 准备工作:数据和环境是生死线
我第一次训练 Lora 模型踩了个很常见的坑——图像和文本描述完全不对应。比如图里是卡通人物,prompt 却是“girl with blue eyes”,结果训练出来生成图全跑偏。
建议你这么搞:
- 图像数据量:一般建议 100~300 张图片,分辨率统一(比如512x512)
- 对应的文本:用
BLIP
自动生成 caption,再人工修改、过滤 - 环境配置:直接基于
text-generation-webui部署最新教程
中配置的环境来搞,避免乱装库导致训练报错
关于硬件,我是在单张 4090上训练的,8GB 显存其实也能搞,但你得调 batch size 和精度,别上来就 float32。
3 训练参数到底怎么选?
我不建议一开始就瞎调。你可以先从别人共享的 LoRA config 文件入手(.json
),比如以下这些参数组合就比较稳妥:
learning_rate = 1e-4
batch_size = 2
num_epochs = 10
rank = 8
其中 rank
是 Lora 的核心超参数,控制模型变化程度,数值越大改动越多,也越容易 overfit。
分辨率给我锁死512x512
SD1.5模型非512必崩!亲测用600x800训练,10张图里有8张人体扭曲
偷懒技巧
:直接写脚本批量改尺寸:
pythonCopy Codefrom PIL import Image img = Image.open("xxx.jpg").resize((512,512)) # 暴力保命
权重别贪心!从0.6起步
- 新手最容易犯的错:一上来权重拉满1.0,结果生成的人脸像被卡车碾过
- 个人经验:风格类Lora(比如水墨风)权重0.6-0.8,人物类0.75-0.9,超过0.95大概率崩图
触发词必须带专属前缀
- 训练时没加触发词?完蛋!模型根本认不出你的LoRA
- 实战配方:用
char_XX_style
这类独有前缀(例:hanfu_girl_
),别用beautiful girl
这种烂大街词
3.1 参数设置:我的黄金组合(附翻车案例)
(以8G显存显卡+人物训练为例)
参数项 | 推荐值 | 翻车警告 |
---|---|---|
Rank (秩) | 8-16 | 设32跑出赛博朋克蟑螂人,重训3次才明白不是越高越好7 |
Alpha | Rank的1~1.5倍 | 试过Alpha=32(Rank=8),结果衣服纹理糊成油画4 |
学习率(LR) | UNET: 1e-4 文本编码器: 5e-6 | 文本编码器LR过高会导致提示词失灵,生成清朝僵尸3 |
Batch Size | 1 (配合梯度累积4步) | 硬开batch=4?显存直接炸烟花💥 |
显存省流技巧:
bashCopy Code# 8G显存救命配置(直接写进启动参数)
--mixed_precision=fp16 --gradient_checkpointing --xformers
实测不开xformers
,3060显卡跑5000步要多花2小时!
3.2 分层控制:让机甲服不再变秋裤(亲测有效)
被机甲LoRA变成紧身衣坑过3次后总结
开启分层调试
- 在提示词后缀加
:lora_block_weight
(**没这个冒号插件不认!**) - XYZ图表里勾选
变换XY轴
+高效分析器
- 在提示词后缀加
26层分配玄学
层级类型 权重 适用部位 核心层 0.9-1 人脸/机甲关节/武器细节 边缘层 0.5-0.7 服装花纹/背景建筑物 污染层 0-0.3 关掉!否则冒出迷之蕾丝边 快速定位污染层 生成测试图时看哪层让机甲冒粉色花边 → 直接权重归零,亲测省掉80%调试时间
3.3 防过拟合的野路子
偷懒正则法
- 不想准备20张正则图?直接用civitai下载的同类模型生成图当正则集
- 实测效果:人物Lora用20张动漫头像,比官方推荐的真实照片还好使
动态权重法 在训练中途(约1/3步数)把权重从1.0降到0.7,避免模型死记硬背:
pythonCopy Codeif global_step > total_steps//3: lora_weight *= 0.7 # 暴力防过拟合
标签污染术 每张图标注时故意塞1个错误标签(比如机甲图里写
flowery dress
),让模型学会抗干扰其它:
多Lora融合口诀
- 权重相加≤1.2(例:人物0.7 + 汉服0.5=1.2)
- 翻车现场:试过古风+赛博权重1.8,产出克苏鲁新娘
测试阶段避坑
- 出现马赛克?立即降Rank值(从16→8)
- 颜色失真?检查是否开了
--no_half_vae
(FP16精度问题)
模型救不活怎么办 把翻车LoRA权重调到0.3,再叠另一个同类型LoRA(废物利用大法)
4 部署到 Stable Diffusion,本地 inference 怎么整合?
如果你训练完一个 LoRA checkpoint(.safetensors 格式),你要部署到自己的 WebUI/ComfyUI 是两码事:
- WebUI:放到
models/Lora/
目录下,然后 UI 中加载即可 - ComfyUI:需要手动建节点或用社区 Workflow 加载,自定义性强但对新手不友好
这里我推荐你先看下之前写的 Stable Diffusion 快速入门到精通
,那篇文章里面写得很清楚模型怎么加载、管理和切换。
5 踩坑记录:这三个问题是我重复遇到的
- 内存泄露(OOM)问题:多次训练反复运行 notebook,GPU 没释放干净。建议用
nvidia-smi
+kill -9
干掉残留进程。 - 图像风格崩溃:Lora 训练图片不统一,导致风格“散”。最好图片来源一致,caption 一致性也要控制。
- 保存模型失败:大概率是路径问题,特别是 Windows 用户,一定要用绝对路径或者检查目录是否存在。
6 我训练成功的两个例子(附带效果图)
这个部分之后我会单独出文章细讲,但简单分享下成果:
- “柴犬表情包 LoRA”:用了 120 张图,rank=8,效果极好,prompt 非常收敛。
- “古风美女水墨风”:训练图 300 张,caption 统一为“traditional Chinese ink style portrait”,有一定泛化能力。
如果你是普通 AI 绘画爱好者,Lora 微调是你打破模型局限的“密钥”。
不是每个人都要搞训练,但你得知道怎么玩出来的是你自己的风格,这种“调教感”是用别人的模型永远体验不到的。