如果你用 Ostris AI Toolkit 训练了一个 LoRA,在 Training Samples(训练采样图) 里看起来效果很好,但一到 ComfyUI 或 Diffusers 推理就变得很不一样,你大概率会非常困惑:为什么训练时明明这么好,一推理就“跑偏”了?你可能搜索过类似这些问题:
- “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 的训练采样图(从这里开始)
- 推荐(对齐流程): AI Toolkit LoRA Training‑Inference Parity
- 想自审/自托管(Diffusers 参考实现): Open-source AI Toolkit inference code
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),很容易把模型推到不适合的区域。
快速测试
- 强制 steps 和 guidance 与 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) |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
想更深入?
- Open-source AI Toolkit inference code(可审计的 Diffusers pipelines、adapters、schedulers)
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 去构建推理流程。
准备好开始训练了吗?







