Ostris AI Toolkit で LoRA を学習し、Training Samples ではすごく良かったのに、ComfyUI や Diffusers で推論すると全然違う結果になってしまう——これはかなり混乱します。たとえば、こんな検索をしたかもしれません:
- 「AI Toolkit の samples は良いのに ComfyUI は微妙」
- 「AI Toolkit LoRA が ComfyUI で効かない」
- 「同じ prompt/seed なのに Diffusers が AI Toolkit preview と一致しない」
- 「LoRA を学習した後で見た目が変わるのはなぜ?」
結論は(だいたい安心できる)これです:
約 99% のケースでは LoRA は正常です。問題は、推論設定が学習プレビューと同一ではないことです。
AI Toolkit の Samples は「適当に Diffusers を回した結果」ではありません。次の要素の組み合わせで生成されています:
- 完全に同一の base model 変種
- LoRA の注入方法(adapter 適用 vs merged/fused)
- steps/scheduler/guidance のセマンティクス
- 解像度の扱い(スナップ/クロップ規則)
- seed/RNG の挙動
-(場合により)追加の条件入力(edit/control/I2V の配線)
どれか 1 つでも違えば、出力はドリフトします。
以下は、まさに起きていることの比較です:AI Toolkit Training Sample vs あなたの現在の推論ツールチェーン(ComfyUI/Diffusers 等)。
| AI Toolkit training sample | Your inference toolchain |
|---|---|
![]() |
![]() |
このガイドで得られること
- 60 秒サニティチェック:この 6 項目を固定(まずは学習を触らない)
- 10 分パリティチェック:よくある「preview ≠ inference」原因 7 つ(優先順)
- 自分で追わずに済ませたい?RunComfy で推論パリティを取る
とにかく推論を AI Toolkit の training samples に合わせたい場合(ここから)
- 推奨(パリティ手順): AI Toolkit LoRA Training‑Inference Parity
- 監査/セルフホスト(Diffusers 参照実装): Open-source AI Toolkit inference code
60 秒サニティチェック:この 6 項目を固定(まずは学習を触らない)
再現したい AI Toolkit Training Sample を 1 つ選びます(Sample #1 が理想)。次の 6 項目を完全に同一にコピー/エクスポートしてください:
1) Base model(正確な variant/revision。単に「FLUX」では不十分)
2) Prompt(トリガーワード含む。位置も同じ)
3) Negative prompt(学習で使っていないなら空)
4) Width/height
5) Seed
6) Steps + guidance(sampler/scheduler 関連も含む)
この 6 項目を合わせても大きくズレるなら、以下のパリティ問題のどれかです。
10 分パリティチェック:よくある「preview ≠ inference」原因 7 つ(優先順)
目安:一度に 1 変数だけ変える。5 個同時に変えると、何が効いたのか分かりません。
1) Base model の不一致(最頻・最破壊的)
2) 解像度処理の不一致(倍数スナップ / 隠れ resize)
3) steps/scheduler/guidance セマンティクスの違い(few‑step は超敏感)
4) seed/RNG セマンティクスの違い(CPU vs GPU generator、グローバル seed)
5) LoRA 適用方法の違い(adapter vs fuse/merge;ローダー違い)
6) prompt/negative/trigger が完全一致していない(1 トークンで崩れる)
7) パイプライン系統違い / 条件入力不足(edit/control/I2V)
以下、各項目の切り分け。
1) Base model 不一致:「近いからOK」は通用しない
症状
- 顔・質感・スタイル・細部品質が全体的にドリフト。
- LoRA が「効いてない」ように見えることも。
原因
LoRA は base model 依存が非常に強いです。学習した厳密な variant と違うモデルで推論すると(同じ“系列”でも)大きくズレます。
速攻テスト
- AI Toolkit の学習 config/YAML を開く
- base model の識別子/パスを確認
- ComfyUI/Diffusers が同じ base model をロードしているか確認(似た名前に注意)
ありがちな罠
- FLUX 変種の混在(dev vs schnell、1 vs 2)
- Qwen Image generation と Qwen Image Edit の混在
- Z‑Image Turbo と DeTurbo の混在
- WAN 2.2 のタスク系統違い(T2V vs I2V)
対処
学習 config を真実として扱い、YAML から base model を選ぶ(記憶で選ばない)。
2) 解像度処理の不一致:1024 のつもりが 1024 じゃない
症状
- 構図がズレる、シャープさが変わる、細部が潰れる。
- few‑step/turbo で特に顕著。
原因
多くの実装は width/height を divisor(たとえば 32)の倍数に丸めます。AI Toolkit preview がスナップしていて推論側がしない(または逆)と、入力サイズが一致していません。
例:
width = (width // divisor) * divisor
height = (height // divisor) * divisor
速攻テスト
- 32 の倍数に固定(例:1024×1024、1216×832)
- ComfyUI の hidden resize/crop/latent scaling ノードを確認
対処
パリティのために、preview が実質的に使った width/height(スナップ込み)を固定。
3) steps/scheduler/guidance の違い:few‑step は「SDXL クセ」を許さない
症状
- ぼやける/汚れる、preview のキレが消える。
- 逆に過加熱で破綻する。
原因
distilled/turbo/few‑step は 低 steps・低 guidance(guidance ≈ 1.0 のことも)前提のことが多いです。SD/SDXL 的なデフォルト(steps 20–30、CFG 5–8)を入れるとズレます。
速攻テスト
- Training Sample と同じ steps/guidance に固定
- パリティ検証中は scheduler を変えない
対処
まずは Training Sample を ground truth に再現 → その後に調整。
4) seed/RNG の違い:同じ seed でもスタックが違うと同じノイズにならない
症状
- 同 prompt + 同 seed でも全然違う。
原因
stack により seeding 実装が異なります:
- グローバル seed vs ノード単位 seed
- CPU generator vs GPU generator
- 追加 RNG 消費(ランダム crop、jitter 等)
速攻テスト
- まず同一スタック内で再現性を確認(3 回同じ)
- 次にスタック間で比較
対処
seed の扱いをできるだけ揃える(グローバル seed + 明示的 generator セマンティクス)。
5) LoRA 適用方法の違い:adapter vs fuse/merge(+ローダー間違い)
症状
- 効きが強い/弱い、または効いてないように見える。
原因
主に 2 パターン:
- Adapter:推論時に LoRA を動的適用(scale あり)
- Fuse/Merge:LoRA をモデルに融合して adapter を外す
挙動が異なることがあります。さらに、モデル系統に合わない LoRA loader/pipeline を使うと「何も適用されない」ことも。
速攻テスト
- Training Sample と同じ LoRA scale
- ローダーがモデル系統に合っているか確認(系統跨ぎは避ける)
対処
参照実装で再現 → 同じ方法を自分のスタックへ移植。
6) prompt / negative / trigger の不一致:1 トークンで崩れる
症状
- 近いが「決め手」が出ない、またはベースモデルっぽい。
よくある落とし穴
- 学習は negative 空なのに、UI がデフォルト negative を注入
- trigger の欠落/誤字/位置移動
- ツール間の prompt 解析/重み付け構文の差
速攻テスト
- negative prompt を 空 にする
- Training Sample から prompt を完全コピペ
対処
パリティ検証は hidden defaults を排除して「クリーン」に。
7) パイプライン系統違い / 条件入力不足(edit/control/I2V)
症状
- 出力ロジックが完全に違う、またはエラー。
原因
モデル系統によっては control image / edit input / I2V conditioning が必要です。preview はそれを使っているのに、推論は prompt‑only だと合いません。
速攻テスト
- control image / edit input が必要なモデルか?
- 正しい pipeline family を使っているか?
対処
正しい pipeline に切り替え、必要入力を渡す。
自分で追いたくない?RunComfy で推論パリティを取る
ComfyUI/Diffusers のドリフトを自力で追うのが面倒なら、RunComfy は AI Toolkit の各モデル系統向けに training & inference parity pipelines を提供しています。preview のサンプリングを手で再構築する必要はありません。
必要なのは LoRA と、AI Toolkit の Training config(YAML) だけ。Trainer → LoRA Assets にインポートして Run(Run LoRA)を押せばすぐ推論できます。RunComfy は正しい base‑model pipeline とパリティ重要挙動で実行し、training samples に一致する結果を得やすくします。
手順: 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 パイプライン、adapters、schedulers)
FAQ
「AI Toolkit では samples が良いのに、ComfyUI だと LoRA が効かない」
まず base model mismatch と LoRA loader mismatch を疑ってください。「効かない」報告の多くは以下です:
- base model 変種が違う
- LoRA 注入方法/ローダーが違う
- hidden negative prompt/defaults が入っている
「AI Toolkit の samples のほうが Diffusers よりシャープなのはなぜ?」
だいたい以下のどれか:
- steps/guidance レンジの不一致(few‑step で顕著)
- 解像度スナップ差
- scheduler/timestep 差
「どうすれば推論を学習プレビューに安定して合わせられる?」
Training config を ground truth として、以下を固定:
- base model
- width/height(スナップ規則込み)
- steps/guidance/scheduler family
- LoRA 注入方法と scale
- seed セマンティクス
Run LoRA(Playground/API)として再現可能にしたいなら、この config を中心に推論を組み立ててください。
トレーニングを開始する準備はできましたか?







