AI Toolkit LoRA 训练指南

AI Toolkit LoRA 训练样本很好,但 ComfyUI/Diffusers 推理不一样?

一篇实用排查指南:在用 Ostris AI Toolkit 训练 LoRA 后,消除训练预览/样本与推理结果的差异。

使用 Ostris AI Toolkit 训练扩散模型

如果你用 Ostris AI Toolkit 训练了一个 LoRA,在 Training Samples(训练采样图) 里看起来效果很好,但一到 ComfyUIDiffusers 推理就变得很不一样,你大概率会非常困惑:为什么训练时明明这么好,一推理就“跑偏”了?你可能搜索过类似这些问题:

  • “AI Toolkit 采样图很好但 ComfyUI 很差”
  • “AI Toolkit LoRA 在 ComfyUI 里不生效”
  • “同样 prompt/seed,但 Diffusers 跟 AI Toolkit 预览不一致”
  • “为什么我训练完 LoRA 后效果变了?”

先给你一个直白(通常也很让人松一口气)的结论:

约 99% 的情况下,你的 LoRA 没问题。问题在于你的推理设置,和训练预览用的不是同一套。


AI Toolkit 的 Samples 不是“随便跑一遍 Diffusers”。它们是由一组非常具体的组合产生的,包括:

  • 完全一致的 base model 变体/版本
  • LoRA 注入方式(adapter 动态加载 vs merge/fuse 融合)
  • 步数/调度器/引导(CFG)语义
  • 分辨率处理(对齐倍数、裁切/缩放规则)
  • seed / RNG(随机数)行为

-(有时)额外的条件输入(编辑/控制/I2V 的连线方式)

只要其中任何一项不同,输出就会发生漂移。

下面这个对照正是你正在经历的:AI Toolkit 训练采样图 vs 你当前的推理工具链(ComfyUI/Diffusers 等)。

AI Toolkit training sample Your inference toolchain
AI Toolkit 训练采样图 — 第 1 组
推理结果 — 第 1 组

你将从这篇指南获得什么


如果你只想让推理结果匹配 AI Toolkit 的训练采样图(从这里开始)


60 秒快速自检:锁死这 6 个字段(先别动训练)

挑一张你想复现的 AI Toolkit Training Sample(最好选 Sample #1)。把下面这些字段原样复制或导出,确保完全一致:

1) Base model(精确到具体变体/修订版本 —— 不是只写 “FLUX” 这种泛称)

2) Prompt(包含触发词,且位置一致)

3) Negative prompt(如果训练时没用,就保持为空)

4) Width/height

5) Seed

6) Steps + guidance(以及所有采样器/调度器相关设置)

如果这 6 项都一致,但结果仍然差很多,那么你八成踩到了下面的一致性问题之一。


10 分钟一致性清单:7 个常见“预览 ≠ 推理”的原因(按优先级排序)

经验法则:一次只改一个变量。如果你一次改五个东西,你永远不知道到底是哪个修好了它。

1) Base model 不一致(最常见、破坏性最大)

2) 分辨率处理不一致(对齐倍数 / 隐式 resize)

3) 步数、调度器、引导语义不同(少步数模型极其敏感)

4) Seed/RNG 语义不同(CPU vs GPU generator、全局种子)

5) LoRA 应用方式不同(adapter vs fuse/merge;用错 loader)

6) Prompt/negative/触发词不完全一致(一个 token 就能破坏一致性)

7) 管线家族不匹配 / 缺少条件输入(编辑/控制/I2V)

下面讲每一项怎么快速定位。


1) Base model 不一致:“看起来差不多”根本不够

症状

  • 整体风格漂移:脸、材质、质感、细节质量全部变。
  • 看起来像 LoRA “完全没生效”。

原因

LoRA 对 base model 极度敏感。在某个精确的 base model 变体上训练,却在另一个变体上推理(即使“同一系列”),也经常导致明显漂移。

快速测试

  • 打开你的 AI Toolkit 训练配置(config / YAML)。
  • 找到精确的 base model 标识符/路径。
  • 确认 ComfyUI/Diffusers 加载的是同一个 base model(不是名字很像的另一个)。

常见坑

  • 混用 FLUX 变体(例如 dev vs schnell,1 vs 2)
  • 混用 Qwen Image generation vs Qwen Image Edit 变体
  • 混用 Z‑Image Turbo vs DeTurbo
  • 用错 WAN 2.2 的任务家族(T2V vs I2V)

修复

把训练配置当作唯一真相:用训练的 config(YAML)来选 base model,不要靠记忆或猜测。


2) 分辨率处理不一致:你以为是 1024,但其实不是

症状

  • 构图偏移、锐度变化、细节糊掉。
  • 在少步数/加速(turbo)模型上漂移更明显。

原因

很多推理实现会把 width/height 调整到某个除数(常见是 32)的倍数。如果 AI Toolkit 预览会向下对齐但你的推理栈不会(或反过来),那你实际上并没在同样的尺寸上运行。

示例模式:

width  = (width  // divisor) * divisor
height = (height // divisor) * divisor

快速测试

  • 强制你的推理使用 32 的整倍数分辨率(例如 1024×1024、1216×832)。
  • 在 ComfyUI 里检查是否有隐藏的 resize/crop/latent scaling 节点。

修复

为了对齐,锁定 width/height 为训练预览实际使用的值(包含对齐规则)。


3) 步数/调度器/引导语义不同:少步数模型会“惩罚 SDXL 习惯”

症状

  • 结果变得模糊/脏,失去“训练预览的清晰度”。
  • 或者过度烤糊,出现强烈伪影。

原因

蒸馏/加速/少步数模型往往需要低步数低引导(有时 guidance ≈ 1.0)。如果你套用 SD/SDXL 的默认值(steps 20–30、CFG 5–8),很容易把模型推到不适合的区域。

快速测试

  • 强制 stepsguidance 与 Training Sample 完全一致。
  • 在排查一致性时先别换 scheduler。

修复

先把 Training Sample 的设置当作地面真相。能复现之后,再去调你想要的风格。


4) Seed/RNG 语义不同:同一个 seed ≠ 不同工具里同一条噪声流

症状

  • 同 prompt + 同 seed,但输出差异非常大。

原因

不同工具对 seed 的实现可能不同:

  • 全局播种 vs 节点级播种
  • CPU generator vs GPU generator
  • 额外的 RNG 消耗(随机裁切、抖动等)

快速测试

  • 先确保你在同一套工具里可以稳定复现(跑 3 次输出一致)。
  • 再做跨工具对比。

修复

尽可能对齐 seed 的处理方式(全局 seed + 明确 generator 语义)。


5) LoRA 应用方式不同:adapter vs fuse/merge(以及“用错 loader”)

症状

  • LoRA 的效果比预览更弱/更强。
  • 或者看起来像 LoRA 没应用。

原因

两类常见差异:

  • Adapter 应用:推理时动态加载 LoRA,并用 scale 调节强度。
  • Fuse/Merge 应用:把 LoRA 权重融合进模型,再卸载 adapters。

这两种方式可能表现不同。另一个常见坑是:使用不匹配该模型家族的 LoRA loader/pipeline,可能会悄悄“什么都没应用”。

快速测试

  • 把 LoRA scale 调到与 Training Sample 一致。
  • 确认你使用的 loader 对该模型家族是正确的(不要跨家族乱用 pipeline)。

修复

先用一个已知支持该模型家族 AI Toolkit LoRA 的参考实现复现 Training Sample,再把同样的方法迁移到你偏好的工具栈里。


6) Prompt / negative / 触发词不一致:一个 token 就能破坏一致性

症状

  • 风格看起来接近,但“标志性细节”不见了。
  • 或表现得像普通 base model。

高频坑

  • 训练时 negative prompt 为空,但你的推理 UI 自动注入了默认 negative prompt。
  • 触发词缺失、拼错、位置变了。
  • 不同工具对 prompt 权重语法/解析不同。

快速测试

  • 把 negative prompt 设为(对齐训练)。
  • 从 Training Sample 里复制粘贴完全一致的 prompt 文本。

修复

做一致性测试时,去掉所有隐藏默认值。先跑“干净版”。


7) 管线家族不匹配 / 缺少条件输入(编辑/控制/I2V)

症状

  • 输出逻辑完全不对。
  • 或者推理直接报错。

原因

一些模型家族需要额外输入(控制图、编辑输入、I2V 条件)。训练预览可能用了这套连线,但你的推理可能只走 prompt-only。

快速测试

  • 这个模型是否需要 control image 或 edit input?
  • 你是否在用该任务正确的 pipeline family?

修复

切到正确的 pipeline,并提供必要的条件输入。


不想自己排查?在 RunComfy 上直接获得推理一致性

不想自己追 ComfyUI/Diffusers 的漂移原因?RunComfy 已经为 AI Toolkit 的各个模型家族提供了训练与推理一致性(parity)管线,你不需要手动重建训练预览用的那条采样管线。

你只需要:

  • 你的 LoRA
  • 这次 AI Toolkit 训练的 Training config(YAML)

把它们导入 Trainer → LoRA Assets,然后点击 Run(Run LoRA)即可开始推理。RunComfy 会用与训练预览一致的关键行为与正确的 base-model pipeline 来跑,所以结果能匹配训练采样图。

完整流程见: AI Toolkit LoRA Training‑Inference Parity

实际效果(AI Toolkit Training Sample vs 使用训练 config 的 RunComfy 推理)如下:

AI Toolkit training sample RunComfy inference (Playground/API)
AI Toolkit 训练采样图 — 第 1 组
Run LoRA 推理结果 — 第 1 组
AI Toolkit 训练采样图 — 第 2 组
Run LoRA 推理结果 — 第 2 组
AI Toolkit 训练采样图 — 第 3 组
Run LoRA 推理结果 — 第 3 组

想更深入?


FAQ

“我的 AI Toolkit LoRA 在训练 Samples 里很正常,但在 ComfyUI 里完全没效果。”

先从 base model 不一致和 LoRA loader 不匹配开始。大多数“完全没效果”的报告,基本是下面之一:

  • 用错 base model 变体
  • 用错 LoRA 注入方式/loader
  • 有隐藏的 negative prompt/默认设置

“为什么 AI Toolkit 的 Samples 比我的 Diffusers 输出更锐、更清晰?”

通常是下面之一:

  • 步数/引导范围不一致(少步数模型尤其敏感)
  • 分辨率对齐规则不同
  • scheduler / timestep 不一致

“怎样才能稳定地让推理匹配训练预览?”

把训练 config 当作地面真相,并锁死:

  • base model
  • width/height(包含对齐规则)
  • steps/guidance/scheduler 家族
  • LoRA 注入方式与 scale
  • seed 语义

如果你希望把它做成可重复的 Run LoRA 工作流(Playground/API),就围绕这份 config 去构建推理流程。

准备好开始训练了吗?