Руководства по обучению LoRA с AI Toolkit

AI Toolkit LoRA: samples отличные, но инференс в ComfyUI/Diffusers другой?

Практический гайд по устранению расхождения между preview/samples AI Toolkit и инференсом после обучения LoRA.

Обучайте диффузионные модели с Ostris AI Toolkit

Если вы обучили LoRA в Ostris AI Toolkit, увидели отличные результаты в Training Samples, а затем получили заметно другие выходы при инференсе в ComfyUI или Diffusers, это легко выбивает из колеи. Возможно, вы искали что‑то вроде:

  • «AI Toolkit samples выглядят хорошо, но ComfyUI — плохо»
  • «AI Toolkit LoRA не работает в ComfyUI»
  • «Тот же prompt/seed, но Diffusers не совпадает с AI Toolkit preview»
  • «Почему моя LoRA выглядит иначе после обучения?»

Вот прямой (и обычно успокаивающий) ответ:

В ~99% случаев с вашей LoRA всё в порядке. Просто ваш инференс‑сетап не совпадает с тем, что использовалось в training preview.


Samples в AI Toolkit — это не «случайные прогоны Diffusers». Они получаются из конкретной комбинации:

  • точного варианта base model
  • способа применения LoRA (adapter vs merged/fused)
  • семантики steps/scheduler/guidance
  • обработки разрешения (snapping/cropping)
  • поведения seed/RNG
  • (иногда) дополнительных conditioning‑входов (edit/control/I2V wiring)

Если хоть один из этих пунктов отличается, результат уходит в дрейф.

Ниже — быстрый side‑by‑side пример того, что вы наблюдаете: AI Toolkit Training Sample vs ваш текущий инференс‑тулчейн (ComfyUI/Diffusers/etc.).

AI Toolkit training sample Your inference toolchain
AI Toolkit training sample — set 1
Результат инференса — set 1

Что вы получите из этого гайда


Если вам нужно просто заставить инференс совпасть с training samples AI Toolkit (начните здесь)


60‑секундный sanity check: зафиксируйте эти 6 полей (training пока не трогаем)

Выберите один AI Toolkit Training Sample, который хотите воспроизвести (идеально — Sample #1). Скопируйте/экспортируйте точно следующее:

1) Base model (точный вариант/ревизия — не просто «FLUX»)

2) Prompt (включая trigger‑слово, в той же позиции)

3) Negative prompt (если в training его не было — оставьте пустым)

4) Width/height

5) Seed

6) Steps + guidance (и всё, что связано с sampler/scheduler)

Если вы совпали по этим 6 пунктам, а расхождение всё ещё большое — причина почти наверняка в одном из пунктов ниже.


10‑минутный parity‑чеклист: 7 частых причин «preview ≠ inference» (по приоритету)

Правило: меняйте по одной переменной. Если вы поменяете пять вещей сразу, вы не поймёте, что именно исправило проблему.

1) Несовпадение base model (самая частая и разрушительная причина)

2) Несовпадение обработки разрешения (snapping к кратности / скрытый resize)

3) Разная семантика steps/scheduler/guidance (few‑step модели крайне чувствительны)

4) Разная семантика seed/RNG (CPU vs GPU generator, global seeding)

5) Разный способ применения LoRA (adapter vs fuse/merge; неправильный loader)

6) Prompt/negative/trigger не идентичны (один токен может сломать parity)

7) Неправильная family пайплайна / отсутствуют conditioning‑входы (edit/control/I2V)

Дальше — как быстро диагностировать каждый пункт.


1) Несовпадение base model: «почти то же» — это не то же

Симптомы

  • Уезжает весь look: лица, текстура, стиль, детализация.
  • Может выглядеть так, будто LoRA вообще не применяется.

Почему так бывает

LoRA сильно зависит от base model. Если обучали на одном точном варианте, а инференс делаете на другом (даже «в той же семье»), дрейф часто огромный.

Быстрый тест

  • Откройте training config/YAML AI Toolkit.
  • Найдите точный идентификатор/путь 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
  • Неправильная family задач WAN 2.2 (T2V vs I2V)

Фикс

Считайте training config источником истины: выбирайте base model по YAML, а не по памяти.


2) Несовпадение обработки разрешения: вы думаете, что это 1024, но это не так

Симптомы

  • Меняется композиция, резкость, детали «мылятся».
  • На few‑step/turbo моделях дрейф намного сильнее.

Почему так бывает

Многие реализации подгоняют width/height к делителю (часто 32). Если preview AI Toolkit «снапит» вниз, а ваш стек — нет (или наоборот), вы не запускаете одинаковый входной размер.

Пример:

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

Быстрый тест

  • Заставьте инференс использовать кратность 32 (например, 1024×1024, 1216×832).
  • В ComfyUI проверьте скрытые nodes resize/crop/latent scaling.

Фикс

Для parity зафиксируйте width/height так, как preview реально использовал (включая snapping‑правила).


3) Разная семантика steps/scheduler/guidance: few‑step модели «наказывают SDXL‑привычки»

Симптомы

  • Результат становится мутным/грязным и теряет «preview‑резкость».
  • Или уходит в overcooked‑артефакты.

Почему так бывает

Distilled/turbo/few‑step модели часто ожидают мало steps и низкий guidance (иногда guidance ≈ 1.0). Если применить SD/SDXL‑дефолты (steps 20–30, CFG 5–8), вы выходите из режима, для которого модель настроена.

Быстрый тест

  • Зафиксируйте steps и guidance как в Training Sample.
  • Пока ищете parity — не меняйте scheduler.

Фикс

Начните с настроек Training Sample как ground truth. Когда воспроизведёте — тогда уже тюните.


4) Разная семантика seed/RNG: одинаковый seed ≠ одинаковый noise‑stream в разных стеках

Симптомы

  • Один и тот же prompt + seed, но результаты сильно разные.

Почему так бывает

Разные стеки по‑разному реализуют seeding:

  • global seeding vs seeding на уровне узлов
  • CPU generator vs GPU generator
  • дополнительный расход RNG (random crops, jitter и т.д.)

Быстрый тест

  • Сначала проверьте воспроизводимость в рамках одного стека (3 запуска — одинаково).
  • Затем сравнивайте между стеками.

Фикс

Максимально выровняйте seed handling (глобальный seed + явная семантика генератора).


5) Разный способ применения LoRA: adapter vs fuse/merge (и «не тот loader»)

Симптомы

  • Эффект LoRA слабее/сильнее, чем в preview.
  • Или кажется, что LoRA не применяется.

Почему так бывает

Два частых различия:

  • Adapter‑применение: LoRA динамически применяется на инференсе со scale.
  • Fuse/Merge‑применение: веса LoRA мерджатся в модель, адаптеры выгружаются.

Поведение может отличаться. А ещё loader/pipeline, не соответствующий family модели, может тихо «не применить ничего».

Быстрый тест

  • Выставьте scale LoRA как в Training Sample.
  • Убедитесь, что loader подходит к family модели (не мешайте пайплайны разных family).

Фикс

Сначала используйте референсную реализацию, которая точно поддерживает AI Toolkit LoRA для этой family, воспроизведите sample, затем перенесите метод в ваш стек.


6) Prompt / negative / trigger mismatch: один токен может сломать parity

Симптомы

  • Стиль вроде близкий, но пропали «фирменные детали».
  • Или поведение как у базовой модели.

Частые ошибки

  • В training negative пустой, но UI инференса подставляет default negative.
  • Trigger‑слово отсутствует/с опечаткой/перемещено.
  • Разный parsing промпта/синтаксис весов в разных инструментах.

Быстрый тест

  • Поставьте negative prompt пустым (как в training).
  • Скопируйте/вставьте prompt точь‑в‑точь из Training Sample.

Фикс

Для parity‑тестов уберите скрытые дефолты. Сначала прогоните «чисто».


7) Неправильная family пайплайна / отсутствуют conditioning‑входы (edit/control/I2V)

Симптомы

  • Логика вывода полностью неправильная.
  • Или инференс падает с ошибками.

Почему так бывает

Некоторые family моделей требуют дополнительные входы (control image, edit input, I2V conditioning). Training preview мог использовать эту связку, а ваш запуск может быть prompt‑only.

Быстрый тест

  • Требуется ли модели control image или edit input?
  • Используете ли вы правильную pipeline family?

Фикс

Переключитесь на правильный пайплайн и передайте необходимые inputs.


Не хотите разбираться сами? Получите parity инференса на RunComfy

Не хотите сами охотиться за дрейфом ComfyUI/Diffusers? RunComfy уже предоставляет training & inference parity pipelines для семей AI Toolkit, так что вам не нужно вручную собирать точную preview‑пайплайн‑схему.

Вам нужны только ваша LoRA и Training config (YAML) из AI Toolkit. Импортируйте их в Trainer → LoRA Assets, нажмите Run (Run LoRA) и сразу запускайте инференс. RunComfy выполнит корректный base‑model пайплайн с parity‑критичным поведением, чтобы результаты совпадали с training samples.

Workflow: AI Toolkit LoRA Training‑Inference Parity.

Так это выглядит на практике (AI Toolkit Training Sample vs RunComfy‑инференс с применённой training config):

AI Toolkit training sample RunComfy inference (Playground/API)
AI Toolkit training sample — set 1
Run LoRA inference result — set 1
AI Toolkit training sample — set 2
Run LoRA inference result — set 2
AI Toolkit training sample — set 3
Run LoRA inference result — set 3

Хотите глубже?


FAQ

«Моя AI Toolkit LoRA работает в Training Samples, но в ComfyUI ничего не делает».

Начните с base model mismatch и LoRA loader mismatch. Большинство случаев «ничего не делает» — это:

  • неверный вариант base model
  • неверный способ/loader применения LoRA
  • скрытые negative prompt/defaults

«Почему AI Toolkit Samples резче, чем мой output в Diffusers?»

Обычно это одно из:

  • mismatch режима steps/guidance (особенно few‑step)
  • различия в snapping разрешения
  • различия scheduler/timestep

«Как надёжно сделать так, чтобы инференс совпадал с training preview?»

Считайте training config ground truth и зафиксируйте:

  • base model
  • width/height (включая snapping‑правила)
  • family steps/guidance/scheduler
  • метод применения LoRA и scale
  • семантику seed

Если вы хотите повторяемый workflow Run LoRA (Playground/API), строите инференс вокруг этой же config.

Готовы начать обучение?