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 去構建推理流程。

準備好開始訓練了嗎?