# Lora Training

> LoRA 训练指南 — 数据集准备、训练配置、评估。当用户要求训练 LoRA、微调模型、创建角色/风格 LoRA 时触发。

- Skill: `inspirai-store/lora-training` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add inspirai-store/lora-training`
- Raw SKILL.md: https://api.skillmd.com/api/skills/inspirai-store/lora-training/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: inspirai-store (https://skillmd.com/u/inspirai-store)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/inspirai-store/lora-training

---


# LoRA 训练指南

## 训练工具选择

### AI-Toolkit

- **推荐模型：** FLUX 系列
- **特点：** 配置简单，YAML 配置文件驱动，社区活跃
- **显存需求：** 12GB+（FLUX LoRA），8GB（开启优化后）
- **安装：** `git clone https://github.com/ostris/ai-toolkit` + pip install
- **优势：** FLUX LoRA 训练的首选工具，更新快，支持最新技术
- **适用场景：** FLUX 角色/风格 LoRA 训练

### Kohya_ss（sd-scripts）

- **推荐模型：** SDXL / SD 1.5
- **特点：** 功能全面，参数丰富，社区成熟
- **显存需求：** 8GB+（SDXL），6GB+（SD1.5）
- **安装：** GUI 版本 `kohya_ss`，或命令行版 `sd-scripts`
- **优势：** 参数控制最精细，文档和教程丰富，支持多种训练方式
- **适用场景：** SDXL/SD1.5 各类 LoRA 训练，精细调参

### FluxGym

- **推荐模型：** FLUX
- **特点：** 简化版 FLUX 训练，Web UI 操作
- **显存需求：** 12GB+
- **安装：** 一键脚本安装
- **优势：** 界面友好，新手容易上手，预设配置合理
- **适用场景：** FLUX LoRA 快速训练，新手入门

### SimpleTuner

- **推荐模型：** 多模型支持（FLUX/SDXL/SD3）
- **特点：** 多模型统一框架
- **显存需求：** 视模型而定
- **安装：** pip install
- **优势：** 一个工具支持多种模型，灵活性高
- **适用场景：** 需要在多种模型间切换训练

### 工具选择建议

```
要训练什么模型的 LoRA？
├── FLUX
│   ├── 新手/快速 → FluxGym
│   └── 进阶/自定义 → AI-Toolkit
├── SDXL
│   └── Kohya_ss（首选）
├── SD 1.5
│   └── Kohya_ss（首选）
└── 多模型都要 → SimpleTuner
```

---

## 数据集准备

### 角色 LoRA 数据集

**数量：** 15-30 张图片

**拍摄角度分布：**
- 正面：5-8 张
- 45度侧面（左右）：4-6 张
- 侧面（左右）：2-4 张
- 俯视/仰视：2-4 张
- 全身/半身/特写各需覆盖

**表情分布：**
- 中性表情：5-8 张
- 微笑：3-5 张
- 其他表情（认真、惊讶等）：3-5 张

**背景要求：**
- 优先使用统一白色/纯色背景（减少背景干扰）
- 如果是从已有图片抠图，确保背景干净
- 避免复杂背景与角色特征混淆

**图片质量要求：**
- 最小分辨率：512x512
- 推荐分辨率：1024x1024
- 清晰、无模糊、无水印
- 光照均匀，避免过曝/欠曝

### 风格 LoRA 数据集

**数量：** 30-50 张图片

**内容多样性：**
- 不同主题（人物、风景、物品、场景等）
- 不同构图（特写、全景、中景等）
- 统一风格但内容各异（这是关键）

**避免：**
- 重复构图（模型会学到构图而非风格）
- 混入不同风格的图片
- 质量参差不齐的图片

### 自动标注工具

| 工具 | 适用场景 | 标注类型 |
|------|---------|---------|
| BLIP-2 | 通用图片描述 | 自然语言描述 |
| WD14 Tagger | 动漫/插画 | 标签式（danbooru 标签） |
| Florence-2 | 通用图片 | 自然语言描述（详细） |

### 标注修正规则

自动标注后必须人工修正：

1. **删除与训练目标无关的标签**
   - 训练角色 LoRA 时，删除背景描述标签（如 `white background`）
   - 删除质量标签（如 `high quality`, `masterpiece`）

2. **保留目标特征相关标签**
   - 角色 LoRA：保留发型、发色、瞳色、服装等固定特征
   - 风格 LoRA：保留主题和内容标签，让模型学习风格而非内容

3. **添加触发词（trigger word）**
   - 在每张图片的标注开头添加自定义触发词
   - 例如：`shs_character, 1girl, long black hair, ...`
   - 触发词应为罕见词汇组合，避免与已有概念冲突

4. **正则化标注**
   - 角色 LoRA：使用 `[触发词], [变化的内容描述]` 格式
   - 即将固定特征绑定到触发词，变化内容正常标注

---

## 8GB 显存训练配置

### 核心参数表

| 参数 | 角色 LoRA | 风格 LoRA | 说明 |
|------|----------|----------|------|
| **LoRA rank** | 8 | 16 | 角色特征简单用低 rank，风格复杂用高 rank |
| **LoRA alpha** | 8 | 16 | 通常等于 rank 值 |
| **Batch size** | 1 | 1 | 8GB 只能 batch 1 |
| **Gradient checkpointing** | 开启 | 开启 | 必须开启以节省显存 |
| **Mixed precision** | FP16 或 BF16 | FP16 或 BF16 | BF16 更稳定（需 Ampere+） |
| **学习率** | 1e-4 | 5e-4 | 角色用低学习率避免过拟合 |
| **学习率调度** | cosine | cosine | 余弦退火 |
| **训练步数** | 1000-3000 | 3000-5000 | 角色收敛快，风格需要更多步 |
| **Optimizer** | AdamW8bit | AdamW8bit | 8bit 优化器节省显存 |
| **Max grad norm** | 1.0 | 1.0 | 梯度裁剪 |
| **Seed** | 固定值 | 固定值 | 固定 seed 便于对比 |
| **Save every N steps** | 200 | 500 | 定期保存 checkpoint |

### SDXL 额外参数（Kohya_ss）

| 参数 | 推荐值 | 说明 |
|------|-------|------|
| Resolution | 1024 | SDXL 原生分辨率 |
| Bucket resolution steps | 64 | 分桶步长 |
| Cache latents | 开启 | 缓存 VAE 编码减少显存 |
| Cache text encoder outputs | 开启 | 缓存文本编码减少显存 |
| Network dimension | 8-16 | 同 LoRA rank |
| Network alpha | 8-16 | 同 LoRA alpha |

### FLUX 额外参数（AI-Toolkit）

| 参数 | 推荐值 | 说明 |
|------|-------|------|
| Resolution | 1024 | FLUX 原生分辨率 |
| Quantize model | 开启（FP8） | 量化底模节省显存 |
| Gradient accumulation | 4 | 模拟更大 batch |
| LoRA type | standard | 标准 LoRA |

### 显存优化技巧（8GB 专用）

1. **开启 gradient checkpointing** — 用计算换显存，必须开启
2. **使用 8bit 优化器** — AdamW8bit 比标准 AdamW 省一半优化器显存
3. **缓存 latents 和 text encoder 输出** — 避免每步重复编码
4. **FLUX 使用 FP8 量化** — 底模量化到 FP8 大幅降低显存
5. **降低分辨率到 768** — 如果 1024 仍然 OOM
6. **关闭 xformers 用 sdpa** — PyTorch 2.0+ 的 SDPA 更省显存

---

## 训练评估

### 定期测试生成

- 每 200 步保存 checkpoint 并生成测试图
- 使用固定 seed + 固定 prompt 生成，便于对比
- 推荐测试 prompt 至少 3 组：
  - 简单场景（仅触发词 + 简单描述）
  - 中等场景（触发词 + 具体场景描述）
  - 挑战场景（触发词 + 复杂场景/非训练集角度）

### 过拟合检测

**过拟合信号：**
- 测试图开始丢失多样性（不同 prompt 生成类似图片）
- 背景开始出现训练集中的元素
- 非目标特征被固化（如固定姿势、固定表情）
- 画面出现噪点或伪影增多

**欠拟合信号：**
- 触发词几乎没有效果
- 角色特征不明显
- 需要很高的 LoRA 权重（>1.0）才有效果

### Checkpoint 对比方法

1. 使用完全相同的参数：
   - 相同 seed
   - 相同 prompt
   - 相同 LoRA 权重（建议 0.7-1.0）
   - 相同采样器和步数

2. 生成对比网格图（每个 checkpoint 生成同一组 prompt）

3. 评估维度：
   - **相似度：** 与目标角色/风格的匹配程度
   - **多样性：** 不同 prompt 是否产生不同结果
   - **质量：** 是否有伪影、模糊、色彩异常
   - **泛化性：** 非训练集场景是否正常

### 推荐选择方法

1. 排除明显过拟合的 checkpoint（多样性丧失）
2. 排除明显欠拟合的 checkpoint（特征不明显）
3. 在剩余 checkpoint 中选择相似度和多样性最佳平衡的
4. 通常最佳 checkpoint 在总训练步数的 60%-80% 处
5. 如果不确定，保留 2-3 个候选 checkpoint 做更多测试

### 训练日志关注指标

| 指标 | 正常范围 | 异常信号 |
|------|---------|---------|
| loss | 稳步下降后趋于平稳 | 突然上升或剧烈波动 |
| learning rate | 按调度器变化 | 恒定不变（调度器未生效） |
| 显存占用 | 稳定 | 持续增长（内存泄漏） |
| 训练速度 | 稳定（it/s） | 逐渐变慢 |

