首页 / AI教程 / 正文
AI教程

LoRA训练教程:从环境搭建到参数调优,新手避坑少走弯路

chuanbook chuanbook
发布于 2026 年 10 月 16 日
阅读 约12分钟
浏览 1
评论 0

很多人第一次听到 LoRA 这个词,脑子里冒出来的问号大概跟我当初一样多。我花了小半年时间折腾各种训练脚本,从把显卡跑冒烟到慢慢摸出门道,踩过的坑足够写一本小册子。这一章我想把最基础也最容易劝退新人的部分讲清楚——LoRA 到底是什么,为什么值得学,以及在你按下第一次训练按钮之前,该把哪些东西准备好。

我会尽量用自己实际操作的视角来聊,不堆术语,也不假装一切都很顺利。

1.1 LoRA训练教程基础:LoRA原理、适用场景与全量微调的区别

LoRA 全称 Low-Rank Adaptation,中文一般叫低秩适配。它的核心思路挺朴素:不去改动 Stable Diffusion 原本那几个 GB 的权重文件,而是在注意力层里插入一对小矩阵,训练时只更新这一小部分参数。我自己的理解是,底模像一本厚重的百科全书,LoRA 就像夹在里面的便利贴,写着“画这个人时请参考这几条笔记”。

这样做带来的直接好处是文件小。一个 LoRA 通常几十到两百多 MB,而全量微调出来的模型动辄 2GB 起步,甚至更大。我硬盘里躺着十几个 LoRA,切换起来毫无压力,全量微调的话根本存不下几个。

适用场景方面,我总结下来大致这几类:特定人物脸型、某种画风、特定服装或道具、某个摄影质感。你要的是让模型学会一个新概念,而不是重新教它怎么画画,LoRA 就是性价比最高的选择。全量微调更适合你要彻底改变模型底子,比如从写实转二次元这种大跨度改造,代价是数据量、显存和时间都成倍上涨。我认识的朋友做全量微调,八张 A100 跑了三天,这种事我暂时不碰。

LoRA 也有它的局限。概念太多会互相打架,训练过度会让画面变得僵硬,底模换一个效果就打折。这些限制在后面章节会逐个展开讲。

1.2 训练环境搭建:Python、CUDA、PyTorch、xformers、kohya_ss与Diffusers

环境搭建这块,我吃过最大的亏就是版本不匹配。CUDA 和 PyTorch 的对应关系像一场相亲,配错了直接黑屏报错,连个像样的提示都不给。

我的建议是先确认显卡驱动版本,再去 NVIDIA 官网查它能支持到哪个 CUDA。Windows 用户我推荐 Python 3.10,这个版本兼容性最稳,3.11、3.12 有些库还没跟上。装 PyTorch 的时候别偷懒用 pip 默认源,去官网复制那条带 cu118 或 cu121 的命令,省得后面折腾。

xformers 是我强烈建议装的。它能把显存占用压下来一大截,我那张 12G 的 3060 本来只能跑 batch size 1,装了 xformers 之后勉强能上 2 或者 3。安装时注意它跟 PyTorch 版本也要对上,装完用 python -c "import xformers" 试一下,不报错就算成功。

kohya_ss 是目前最主流的 LoRA 训练工具,带 GUI,对新手友好。我一开始用命令行跑,后来发现 GUI 里参数一目了然,调起来反而更快。Diffusers 则是 Hugging Face 家的库,偏代码流,适合想深入改训练逻辑的人。两个都装不冲突,我自己是 kohya_ss 主力,Diffusers 拿来读别人的脚本。

1.3 LoRA训练数据集准备教程:素材收集、质量筛选、分辨率规范与版权注意

数据集的 quality 直接决定 LoRA 的上限,这句话我越训练越有体会。你喂给它一堆糊图,它学出来的就是糊。我刚开始贪多,塞了两百多张分辨率参差不齐的图,结果出来的脸型飘忽不定,白跑一晚上。

素材数量上,人物脸型我一般准备 20 到 40 张,画风 30 到 100 张,具体看概念复杂度。数量不是越多越好,重复度高的图反而是负担。

质量筛选我有个笨办法但很管用:把图全部按 100% 大小过一遍,糊的、有严重噪点的、构图太乱的直接删。剩下还要看一致性,比如训练某个人的脸,正面侧面都要有,但每张图的光线、表情、背景最好有变化,让模型抓到的是“这个人”而不是“这个场景”。

分辨率方面,我习惯统一裁到 512x512 或者 768x768,1:1 比例最省事。如果是人物全身照,1024x1024 也常见。别混着各种长宽比丢进去,训练脚本处理起来会出问题。

版权这块得多说一句。用别人的摄影作品、插画、明星照片训练并公开发布,风险不小。我自己的做法是优先用自己拍的、自己画的,或者明确授权可商用的素材。想练明星脸的私下玩玩没人管你,发到 Civitai 上卖就另说了。

1.4 数据标注与正则化:标签策略、触发词设计、正则图集与目录结构

打标签这件事,一开始我觉得枯燥,后来发现它其实是跟模型“对话”的过程。你写的每个 tag 都在告诉模型:这张图里什么是重要的,什么是可以忽略的。

人物 LoRA 的标签策略我一般这么处理:固定的触发词放在最前面,比如 mychar,然后描述可变的部分——服装、动作、背景。脸型、发型这些核心特征故意不写,让触发词自己去绑定。写太细反而会让触发词学不到东西。

触发词怎么起?我用过 ohwx man 这种罕见组合,也用过 sks person。原则是尽量选底模里不存在的词,避免污染。太常见的词模型已经有概念了,你再加一层它学不进去。

正则化是很多人忽略的一步。简单说就是拿一批“泛化图”配上你想弱化的标签(比如 man、woman),跟训练图一起喂进去,防止模型把触发词跟所有人类都绑在一起。我练人物时一般会准备 50 到 100 张随机人脸做正则图,效果立竿见影。

目录结构上,kohya_ss 的约定是 train_data/重复次数_概念名/,比如 10_mychar。正则图目录用 1_class 这种形式。文件夹命名里那个数字代表每张图训练时重复几遍,这点要记牢,写错了会严重影响训练节奏。

1.5 训练前配置检查:底模选择、VAE、缓存latents与文本编码器输出

按开始按钮之前的最后一步检查,我至少会花二十分钟。宁可慢一点,也别浪费一晚上电费。

底模选择影响巨大。练写实人物我优先用 SD 1.5 的 realistic 系底模,练二次元就换 Anything 或者二次元特化模型。建议先想好你最终要在哪个底模上出图,就用哪个底模训练,跨底模的兼容性没有宣传中那么美好。

VAE 我一般保持和底模配套,除非底模本身没打包 VAE,那就手动挂一个 vae-ft-mse-840000。挂错 VAE 最明显的症状是颜色发灰或者过饱和,训练前跑一张图看看正常不正常。

缓存 latents 和文本编码器输出是省时间的关键。数据量不大的时候感觉不明显,一旦上几百张图,每次训练都重新编码能让你多等一两个小时。kohya_ss 里有对应选项,我一般开着,改数据集的时候记得清缓存重跑。

检查清单我给自己的是:底模路径对不对、VAE 挂没挂、正则图目录有没有填错、重复次数算过没有、显存够不够 batch size 跑起来。这几项过一遍,心里就踏实多了。

2.1 核心训练参数详解:network_dim、network_alpha、学习率、batch size与epoch

上一章把数据和环境都备齐了,现在到了真正按下训练按钮的阶段。我刚开始跑 LoRA 的时候,看到 kohya_ss 界面上几十个参数直接懵了,后来发现真正影响效果的也就那么几个。network_dim 和 network_alpha 是 LoRA 结构里最重要的一对。dim 决定插入矩阵的秩,说白了就是模型能学多少细节。我练人物脸型常用 32 或 64,画风会拉到 128。dim 太低学不进去,太高容易过拟合,还吃显存。alpha 通常是 dim 的一半,或者直接等于 dim。我习惯 alpha 等于 dim,这样学习率不用额外缩放。也有朋友用 alpha 是 dim 的一半,效果更柔和。

学习率我踩过最大的坑。早期看别人写 1e-3,直接照搬,结果模型飞了,出图全是噪点。现在 unet 部分我固定在 1e-4 到 2e-4 之间,text encoder 用 1e-5 或者干脆不开。学习率太高,模型学得快但也忘得快,画面容易崩。太低的话跑一晚上触发词都还没绑定上。batch size 看显存说话。我那张 12G 的 3060,开 xformers 之后 batch size 1 是常态,偶尔上 2。batch size 大一些梯度更稳,小 batch 也能跑,就是训练时间拉长。epoch 数量我一般设 10 到 20,具体看数据集大小和重复次数。有人喜欢跑 100 个 epoch 再挑权重,我不推荐,电费和时间都撑不住。我通常每 2 个 epoch 存一次,最后从中间挑最好的。

参数之间会互相牵制。dim 和 alpha 变大,学习率可以稍微降一点。batch size 翻倍,学习率也可以微调。我的习惯是先跑一个 6 到 8 epoch 的小实验,看看 loss 曲线和出图效果,再决定要不要加长训练。这个试错过程很费显卡,但比盲目跑一整天强。

2.2 启动训练与过程监控:命令行、GUI、日志、显存优化与断点续训

启动训练的方式我两种都用过。命令行适合远程服务器,写个 bat 或者 sh 脚本,点一下就开跑。GUI 是 kohya_ss 的强项,参数填好之后点 Start training,看着进度条滚动特别有安全感。我平时在本地就用 GUI,租云卡的时候用命令行。两种方式底层跑的是同一套代码,效果没差别。

训练开始之后别关掉窗口就完事。我会盯着几个地方看。日志里最值得关注的是 loss 值。loss 稳步下降是好事,如果突然跳到 nan 或者剧烈震荡,多半是学习率太高或者数据里有坏图。kohya_ss 的 GUI 会显示每步的 loss 和学习率,我习惯截个图留底,方便后面对比。显存优化方面,xformers 必开,gradient_checkpointing 也建议打开,能省不少显存,代价是速度慢一点。mixed_precision 选 fp16,除非显卡特别老。cache_latents 前面提过,开着能省时间。

断点续训是救命的。我有次跑到第 9 个 epoch 停电了,还好设置了每 2 个 epoch 保存一次。恢复的时候把 resume 指向最新的 state 文件夹,或者用 --resume 参数指定路径,训练会从断点继续。记得检查一下保存的文件夹里有没有 optimizer 和 scheduler 的状态文件,少一个都续不上。我一般还会把训练配置保存成 json,下次改参数时直接读,不用从头填。

2.3 模型测试与效果评估:权重挑选、出图对比、过拟合与欠拟合判断

训练跑完,硬盘里躺着一堆 .safetensors 文件,每个 epoch 一个。这时候别急着删,得挨个测试。我的做法是固定一组提示词和种子,分别挂上不同 epoch 的权重出图。提示词里带上触发词,再加点服装、动作、背景的变化。对比的时候主要看三件事:触发词有没有生效,脸型或画风像不像,画面有没有崩。

过拟合的信号挺明显。你发现不管提示词怎么写,背景都是训练图里那个房间,姿势也跟某张素材一模一样,这就是过拟合了。模型把训练图背下来了,没有泛化能力。欠拟合的话,触发词写上去跟没写一样,出图还是底模原本的样子。这时候需要加 epoch 或者提高学习率。我一般会在中间几个 epoch 里找平衡点,比如第 8 个 epoch 刚好能稳定触发,第 12 个就开始僵硬,那就选第 8 个。

权重挑选还有个技巧:把相邻几个 epoch 的权重都试一遍,有时候第 7 和第 8 差别不大,但第 9 突然变好或者变差。我习惯用 xy 图表一次性对比,WebUI 里有脚本可以批量出图。测试的时候别只看一张图,同一个权重换三四个种子和提示词,看稳定性。有些权重在某张图里惊艳,换张图就露馅了。

2.4 调优与常见问题处理:标签优化、正则化、学习率调度与报错排查

出图效果不理想,第一件事我会回去看标签。触发词是不是太常见了?描述词有没有互相矛盾?比如你写了 red shirt 又写了 blue dress,模型会精神分裂。标签优化是个反复的过程。我通常会把表现差的图对应的标签挑出来,看看是不是漏了关键描述,或者某个标签出现频率太高把触发词盖住了。正则化图集也要检查。数量够不够,标签是不是写得太具体。我试过正则图只写 1girl,效果比重写一堆细节好。

学习率调度器我用过 cosine、constant 和 cosine with restarts。cosine 比较稳,适合大多数情况。constant 适合短训练。warmup 可以设总步数的 5% 到 10%,让学习率慢慢升上去,避免一开始就震荡。报错排查这块,最常见的是 CUDA out of memory。解决顺序是降 batch size、开 gradient checkpointing、换更小的 dim、关掉 text encoder 训练。还有一类报错是版本不匹配,比如 xformers 和 torch 对不上,重新装一遍就好。遇到看不懂的报错,我会把日志最后二十行复制去搜,通常能找到同病相怜的人。

调优没有银弹。我每次训练都会记录参数、数据集和最终效果,慢慢就摸出自己的一套配方。别人的参数可以抄,但底模、数据集、显卡都不一样,直接套用大概率翻车。多跑几次小实验,比一次跑个大的一劳永逸靠谱。

2.5 导出、分享与进阶应用:模型合并、ComfyUI或WebUI调用、版权合规与进阶学习路线

训练满意之后,把选中的权重导出成 .safetensors 格式。这个格式比 .ckpt 安全,不会夹带奇怪的代码。导出的时候可以顺便填一下模型信息,比如触发词、推荐权重、训练底模,方便自己和别人使用。我习惯把触发词写在文件名里,比如 mychar_v1.safetensors,省得以后忘了。

模型合并是个好玩的方向。你可以把两个 LoRA 按不同比例融合,创造出新的风格。kohya_ss 里有 Merge LoRA 的功能,ComfyUI 也有对应的节点。我自己试过人物 LoRA 加画风 LoRA,比例 7:3 的时候效果不错。调用方面,WebUI 把模型丢进 models/Lora 文件夹,提示词里写 <lora:mychar:0.8> 就能用。ComfyUI 用 Load LoRA 节点,连到 checkpoint 后面。权重一般从 0.5 开始试,0.7 到 1.0 是常用区间。

版权合规这件事我越来越在意。练明星脸自己玩没问题,公开发布或者商用就要谨慎。用别人的画师作品训练再发布,在社区里争议很大。我现在的做法是只发布自己拍摄或绘制的素材训练出的模型,训练日志和数据集来源也尽量写清楚。进阶学习路线的话,可以往全量微调、ControlNet 训练、或者 Dreambooth 方向走。LoRA 是很好的起点,理解了它,再看其他微调方法会容易很多。社区里 Civitai、Hugging Face 和 Reddit 的 Stable Diffusion 板块都有大量教程和讨论,多动手比多看理论强。

训练 LoRA 这件事,我从一开始的完全懵圈到后来能稳定出模型,大概跑了三十多次实验。每次失败都会留下有用的记录。你也一样,别怕参数调错,显卡没那么容易坏。

赞0
踩0
☆收藏0
版权声明
文章版权声明:除非注明,否则均为ZBLOG原创文章,转载或复制请以超链接形式并注明出处。
分享到
chuanbook

链接已复制到剪贴板