kohya _ss训练stable-diffusion-LoRA模型保姆级教程(详细)
kohya _ss的安装部署在上一篇文章https://blog.csdn.net/a2428083131/article/details/160373649?spm=1001.2014.3001.5501
一、三种微调方式对比
| 方法 | 修改对象 | 模型大小 | 显存需求 | 特点 | 当前地位 |
|---|---|---|---|---|---|
| Textual Inversion | 文本编码器的嵌入向量 | ~10KB | 极低 | 不修改 U-Net,兼容性最好,但无法教会模型新知识 | 特定场景备用 |
| Dreambooth | 整个 U-Net + 文本编码器 | 2-7GB | 8-16GB(优化后) | 全参数微调,概念注入最深,可独立使用 | 深度概念修改首选 |
| LoRA | 插入低秩适配层 | 10-200MB | 6-12GB | 轻量、快速、效果依赖基础模型 | 当前主流 |
为啥本文以Lora为例,详细描述各参数含义。
性价比最高:10-200MB 的模型文件,6-12GB 显存即可训练
生态最完善:Kohya-ss、AI-Toolkit 等工具链成熟
效果可控:通过调整权重(0.6-1.2)灵活控制影响强度
2026 年新进展:LoRA+、fused backward pass 等技术进一步降低显存需求,消费级 GPU 即可训练高质量模型
结论:对于绝大多数个人用户,LoRA 是首选;若显存 ≥ 12GB 且追求极致概念注入,Dreambooth 仍不可替代。
二、LoRA 训练完整指南
工具选择
| 工具 | 难度 | 推荐场景 | 显存优化 |
|---|---|---|---|
| Kohya-ss GUI | 中等 | 大多数用户,参数控制最全 | AdamW8bit、xformers、cache latents |
| AI-Toolkit | 中等 | FLUX.1 训练、特定层训练 | 消费级 GPU 友好,支持 8GB 训练 |
| WebUI 内置 Dreambooth | 简单 | 快速上手,但灵活性差 | 一般 |
数据集准备(最关键)
图像要求
数量:20-80 张(角色 30-50 张为甜点区)
质量> 数量:清晰、对焦准确、光线良好
多样性:
角度:正面、3/4 侧脸、侧面、仰视、俯视
景别:特写、半身、全身
姿势:站、坐、躺、回眸
光线:柔光、硬光、室内、黄金时刻
背景:多样化,避免模型记住特定背景
服装:多套衣服,防止过拟合到特定服饰
表情:微笑、严肃、惊讶等(想要什么就训练什么)
触发词(Trigger Word)
使用罕见词组合,如zkw woman(3-5 字母 + 类别词),避免与模型已有概念冲突。
标注方式(.txt)注意一张图对应一个txt
001.jpg 001.txt → zkw woman, front view, detailed face, photorealistic, best quality 它不仅可以训练人物,还可以根据实际的需求训练(如果说想同时训多个分类,可以安排多个文件夹,每个文件夹下都是这种格式)
参数详解
Configuration和Accelerate launch模块配置
| 模块 | 参数名称 | 推荐值 | 含义与作用 | 注意事项 |
|---|---|---|---|---|
| Configuration | Load/Save Config file | - | 加载或保存你当前的所有训练配置参数。可以把常用的配置保存成文件,下次直接加载,不用重复设置。 | 第一次训练,可以先不设置,配置好后点保存按钮存成.json文件,第二次如果训练参数不变直接加载 |
| Accelerate launch | 混合精度 | fp16/bf16/no | fp16:半精度,显存占用最低,速度最快,绝大多数显卡都支持,是最通用的选项bf16:半精度,比 fp16 更稳定,但需要支持 Tensor Core 的新显卡(RTX 20 系以上)no:全精度 fp32,显存占用极高,速度慢,一般不推荐 | 优先bf16 |
| Number of processes | 1/2/3/4 | 并行启动的训练进程数,和分布式训练有关。单卡用户只需要 1,多卡用户设置卡数。 | ||
| Number of machines | 1 | 参与训练的机器数量,只有多台电脑组队训练时才需要修改 | 多机训练才需要修改为其他值 | |
| 每个核心的 CPU 线程数 | 1~64 | 每个训练进程使用的 CPU 线程数,主要影响数据加载的速度,数值越大,图片预处理越快,但占用的 CPU 资源越多 | 建议根据 CPU 核心数设置,4-8 线程 / 进程足够,避免 CPU 成为瓶颈 | |
| Dynamo backend | no | PyTorch 的 JIT 编译器后端,用来优化训练速度。no表示不启用优化,兼容性最好;其他选项可能会提升速度,但部分环境会报错。 | no(兼容性首选,避免踩坑) | |
| Dynamo mode | default | Dynamo 的优化模式,配合 Dynamo backend 使用。只有启用了 Dynamo backend 时才生效。 | default(配合 Dynamo 为no时不生效) | |
| Dynamo use fullgraph | 不勾选 | 是否使用完整图模式运行 Dynamo,优化训练速度。不勾选兼容性更好,勾选可能提升速度,但容易报错。 | 不勾选 | |
| Dynamo use dynamic | 不勾选 | 是否启用动态形状追踪,优化模型的动态输入。一般用户用不到,开启可能会带来不稳定。 | 不勾选 | |
| Hardware Selection | Multi GPU | ✅ 勾选 | 是否启用多 GPU 分布式训练。勾选后会在多张显卡上同时运行训练, | 勾选后会启用 DDP 多进程并行模式 |
| GPU IDs | 0,1,2,3 | 指定这台机器上要参与训练的显卡编号,用逗号分隔 | 如果你只想用其中 1 张,就写0;写0,1,2,3就是让 4 张卡同时工作 | |
| Main process port | 29500 | 多进程之间通信的端口,用于同步梯度更新 | 端口0可能会和其他程序冲突,建议固定为29500 | |
| Extra accelerate launch arguments | 留空 | arguments给 Accelerate 启动命令附加额外参数 | 单机 训练不需要额外参数,只有多机分布式训练才需要填写 |
Model
Model(基础模型与数据集配置)
这部分决定了你的 LoRA 基于哪个底模训练,以及用什么数据训练。
| 参数 | 含义与作用 | 推荐设置 | 补充说明 |
|---|---|---|---|
| Pretrained model name or path | 训练用的基础 SD 模型 | runwayml/stable-diffusion-v1-5(或本地模型路径) | 建议优先用本地模型,避免网络下载速度慢或失败 |
| Image folder | 你的训练数据集文件夹路径 | 你的数据集根目录,如D:\kohya\datasets\my_character | 文件夹内必须按[训练轮次]_[触发词]的格式建子文件夹,例如10_sks person |
| Dataset config file (Optional) | 数据集配置文件(.toml),用于复杂训练设置 | 留空 | 新手 / 普通训练无需配置,只有需要分分辨率、分触发词训练时才用得上 |
| Trained Model output name | 训练完成的 LoRA 模型文件名 | 自定义,如my_character_lora_v1 | 训练结束后会生成my_character_lora_v1.safetensors |
| 训练注释 | 写入模型元数据的备注信息 | 可填可不填,如训练了1500步,触发词:sks person | 方便后续管理 LoRA 时快速了解模型信息 |
| 保存训练模型为 | 模型文件格式 | ✅safetensors | safetensors更安全,无恶意代码风险,是社区通用标准;不推荐用ckpt |
| 保存精度 | 模型文件的数值精度 | ✅ `bf16 | 与上述精度保持一致 |
文件夹
| 参数 | 含义与作用 | 推荐设置 | 补充说明 |
|---|---|---|---|
| Output directory for trained model | 训练完成的 LoRA 模型文件(.safetensors)要保存到哪里训练结束后,生成的模型会自动存到这个文件夹里,方便你后续在 Stable Diffusion 里加载使用 | 直接选一个固定的文件夹 | 建议每个 LoRA 单独建一个子文件夹,方便管理。 |
| Regularisation directory (Optional. containing regularisation images) | 正则化图片目录,是一个可选设置。用来防止模型过拟合(比如训练人脸时,防止模型只生成你的特定长相)。训练时,模型会同时学习你的训练图和正则化图片,保持模型的泛化能力。 | 新手 / 普通训练直接留空即可;如果训练的是非常容易过拟合的主体(比如特定人脸),可以准备一批通用同类型图片放在这个目录里。 | 正则化图片一般是和你训练主体同类型的通用图片,比如训练人物时,用其他人物的通用照片。对于大多数普通 LoRA 训练(尤其是风格、服饰类),留空不填也完全可以,不会影响训练,只是过拟合风险会稍微高一点。 |
| Logging directory (Optional. to enable logging and output Tensorboard log) | 日志目录,用来保存训练过程的日志文件和 TensorBoard 数据 | 新手可以先不填,等熟悉训练流程后,再设置一个日志目录来监控训练效果。如果要填,建议和输出目录分开,比如D:\kohya\logs。 | 训练时会生成 Loss 曲线、学习率变化等日志,你可以用 TensorBoard 打开这个目录,可视化监控训练过程,判断模型有没有过拟合或欠拟合。不填也不影响训练运行,只是无法查看详细的训练日志和曲线。 |
Metadata
| 字段名称 | 作用 | 填写说明 & 推荐设置 |
|---|---|---|
| Metadata title | 模型的标题 / 名称 | 模型的显示名称,默认会用你设置的Trained Model output name。可以自定义一个好记的名字,比如my_character_lora_v1。 |
| Metadata author | 模型作者 | 填写你的名字 / 昵称即可,方便别人知道是谁训练的。不想填也可以留空。 |
| Metadata description | 模型描述 | 填写关于这个 LoRA 的说明,比如训练的主体、触发词、训练步数、适用场景等。示例:训练角色:XXX;触发词:sks person;适用底模:SD1.5。 |
| Metadata license | 模型许可证 | 声明这个 LoRA 的使用许可,比如MIT、CC BY-NC-SA等。个人自用的话留空即可,公开分享时再根据需要填写。 |
| Metadata tags | 模型标签 | 用逗号分隔的关键词,比如character, anime, portrait,方便在模型管理器里按标签筛选。示例:角色, 二次元, 人像。 |
数据集准备
| 字段名称 | 作用 | 填写示例 |
|---|---|---|
| 实例提示 | 你的专属触发词,用来让 AI 记住你要训练的主体 | 比如训练特定人物,写sks,后续生成时用sks person就能召唤这个主体 |
| Class 类提示 | 主体的通用类别词,用来让 AI 理解这个主体属于什么类别 | 比如训练人物写person,训练猫写cat,训练衣服写clothes |
| Training images | 你自己准备好的训练图片所在的文件夹 | 把所有训练图都放在这个文件夹里,工具会自动处理 |
| 重复(训练图) | 每张训练图片的重复次数,决定了单张图的训练轮次 | 图里的40就是每张图会被训练 40 次 |
| Regularisation images | (可选)正则化图片文件夹,用来防止过拟合 | 放和主体同类型的通用图片,比如训练人物就放通用人像 |
| 重复(正则图) | 每张正则图片的重复次数 | 图里的1就是每张正则图只训练 1 次 |
| Destination training directory | 工具处理后,生成的标准格式数据集的输出目录 | 这里生成的文件夹,就是你训练时要填到Image folder里的路径 |
基础
| 模块 | 参数名称 | 当前值 | 含义与作用 | 推荐设置 |
|---|---|---|---|---|
| 基础 | LoRA type | Standard | LoRA 的训练类型,Standard 是最通用的全层 LoRA | Standard(保持默认,新手首选) |
训练批次大小 | 1 | 单卡每一步同时处理的图片数量。多卡训练时,会按 GPU 数量翻倍。 | 2~4(4 卡等效总批次 = 8~16,更稳定) | |
数量增加 | 1 | 批次大小的倍数,一般保持 1 即可 | 1 | |
每批数量(training epochs) | 0 | 训练轮数,和最大训练步数二选一设置 | 保持0,以最大训练步数为准 | |
最大训练步数 | 1600 | 总训练步数,是控制训练时长的核心参数 | 1000~2000(根据训练图数量调整) | |
每N个epochs保存 | 1 | 每训练完 1 个 epoch 保存一次模型,方便中途测试 | 1(每轮都保存,方便对比不同步数的效果) | |
Seed | 0 | 随机种子,0 代表完全随机 | 0(保持随机,避免训练结果固化) | |
缓存潜变量 | ✅勾选 | 提前把图片编码成潜变量,大幅减少显存占用、提升速度 | ✅必须勾选 | |
| 学习率相关 | 学习率调度器(LR Scheduler type) | cosine | 控制学习率随训练步数变化的策略,cosine 是最常用的余弦退火策略 | cosine(新手首选,收敛稳定) |
优化器 | AdamW8bit | 优化器类型,AdamW8bit 是低显存优化版,非常适合消费级显卡 | AdamW8bit(保持默认,省显存又稳) | |
学习率 | 0.0001 | 核心参数,决定模型学习的快慢 | 人物 / 物体训练:1e-4(0.0001)风格训练:5e-4(0.0005) | |
LR warmup (%) | 10 | 学习率预热比例,前 10% 的步数学习率会从 0 慢慢升到目标值 | 5~10(保持默认即可,避免训练初期震荡) | |
LR cycles | 1 | 余弦退火的重启次数,一般保持 1 即可 | 1 | |
| 数据与分辨率 | 最大分辨率 | 512,512 | 训练图片的目标分辨率,SD1.5 用 512×512 | 512,512(SD1.5 标准,不要改) |
| Stop TE (% of total steps) | 0 | 文本编码器训练的停止比例,0 表示全程训练 | ||
启用数据缓存buckets | ✅勾选 | 自动把不同长宽比的图片分组打包,提升训练效率 | ✅必须勾选(处理竖图、横图必备) | |
最小/最大数据缓存存储桶分辨率 | 256~2048 | 数据桶的分辨率范围,保持默认即可 | 保持默认,或按最大分辨率调整为512~1024 |
| 启用数据容器 buckets | ✅ 勾选 | 自动将不同长宽比的图片分组打包,避免强制拉伸图片,提升训练效果 | ✅ 必须勾选 | |
| 最小数据容器存储桶分辨率 | 256 | 数据桶的最小分辨率,低于此尺寸的图片会被过滤 | 256(默认即可,无需修改) | |
| 最大数据容器存储桶分辨率 | 2048 | 数据桶的最大分辨率,高于此尺寸的图片会被下采样 | 1024或2048(默认即可,无需修改) | |
| 文本编码器学习率 | 0 | 控制 CLIP 文本编码器的学习速度,非 0 时会训练文本编码器 | 0(新手强烈推荐,避免提示词崩坏;进阶用户可设为1e-5) | |
| T5XXL learning rate | 0 | 用于大模型(如 SD3)的文本编码器学习率,SD1.5 不生效 | 0(默认即可,无需修改) | |
| Unet 学习率 | 0.0001 | 核心参数,控制扩散模型(UNet)的学习速度,决定模型学习快慢 | 人物 / 物体训练:0.0001(1e-4)风格 / 简单物体训练:0.0005(5e-4) | |
| LoRA+ learning rate ratio | 0 | LoRA+ 扩展功能的学习率比例,用于分层精细训练,非标准 LoRA 用不到 | 0(默认即可,新手无需启用) | |
| LoRA+ Unet learning rate ratio | 0 | LoRA+ 功能下 UNet 部分的学习率比例 | 0(默认即可,新手无需启用) | |
| LoRA+ TextEncoder learning rate ratio | 0 | LoRA+ 功能下文本编码器部分的学习率比例 | 0(默认即可,新手无需启用) | |
| LoRA 核心结构 | Network Rank (Dimension) | 8 | LoRA 的维度(秩),决定模型的容量,数值越高能记住的细节越多,文件也越大 | 人物 / 复杂主体:8~32简单风格 / 物体:4~8 |
| Network Alpha | 1 | LoRA 的缩放系数,控制效果强度,建议设置为 Rank 的一半 | 设为Rank / 2,如 Rank=8 → Alpha=4 | |
| 正则化与防过拟合 | 缩放权重规范 | 0 | 权重范数限制,用于稳定训练、抑制过拟合 | 0(默认关闭,新手无需开启) |
| 网络丢失(dropout) | 0 | 神经元级别的随机丢弃,用于防止过拟合 | 0(默认即可,新手无需开启) | |
| 排名丢失(rank dropout) | 0 | 随机丢弃部分 LoRA 秩,用于防止过拟合 | 0(默认即可,新手无需开启) | |
| 模块丢失(module dropout) | 0 | 随机丢弃部分网络模块,用于防止过拟合 | 0(默认即可,新手无需开启) |
加速技巧(组合可提速 70%+)
Cache latents:预计算 VAE 编码,提速 60-70%
xformers:注意力优化,提速 25%
AdamW8bit:8 位优化器,省显存
Gradient checkpointing:用时间换显存
训练监控与防过拟合
过拟合信号
只能生成训练图中的特定姿势
背景出现训练图中的固定元素
换提示词后人物不变
Loss 值不再下降但图像质量下降
验证方法
每 5 个 epoch 保存检查点
生成对比网格:不同 epoch + 不同权重(0.6, 0.8, 1.0, 1.2)
测试多种提示词:简单和复杂都要试
检查边缘情况: unusual poses、极端光线
经验
:最佳 LoRA 通常出现在 epoch 8-20 之间,而非最后一个 epoch。
使用 LoRA
在 WebUI 或 ComfyUI 中:
<lora:zkw_woman:0.8>, zkw woman, masterpiece, best quality, ...
权重建议:
0.7-0.8:自然融合,基础模型风格保留多
0.9-1.0:标准强度,平衡角色特征和灵活性
1.1-1.3:强影响,可能覆盖基础模型风格
三、常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
| LoRA 无效果 | 权重太低/触发词错误/兼容性问题 | 提高权重至 1.0,检查触发词拼写,确认基础模型版本匹配 |
| 生成图像千篇一律 | 过拟合 | 减少 epoch,增加数据多样性,降低 rank |
| 质量差 | 训练图质量差/LR 过高 | 换高清图,降低学习率至 3e-5 |
| 背景固定 | 训练图背景单一 | 增加不同背景图像,或使用正则化图像 |
