Guias de treinamento LoRA com AI Toolkit

AI Toolkit LoRA: preview/samples ótimos, mas a inferência no ComfyUI/Diffusers é diferente?

Guia prático para eliminar a diferença entre preview/samples do AI Toolkit e inferência após treinar uma LoRA.

Treine modelos de difusão com Ostris AI Toolkit

Se você treinou uma LoRA com o Ostris AI Toolkit, viu ótimos resultados nos Training Samples, mas depois obteve saídas bem diferentes na inferência em ComfyUI ou Diffusers, é normal ficar confuso. Talvez você tenha pesquisado coisas como:

  • “Os samples do AI Toolkit ficam bons mas o ComfyUI fica ruim”
  • “A LoRA do AI Toolkit não funciona no ComfyUI”
  • “Mesmo prompt/seed, mas o Diffusers não bate com o preview do AI Toolkit”
  • “Por que minha LoRA fica diferente depois do treinamento?”

Aqui vai a resposta direta (e geralmente tranquilizadora):

Em ~99% dos casos, sua LoRA está ok. O seu setup de inferência não é o mesmo da preview de treinamento.


Os Samples do AI Toolkit não são “execuções aleatórias do Diffusers”. Eles são produzidos por uma combinação específica de:

  • a variante exata do modelo base
  • como a LoRA é aplicada (adapter vs merged/fused)
  • semântica de steps/scheduler/guidance
  • tratamento de resolução (snapping/cropping)
  • comportamento de seed/RNG
  • (às vezes) inputs de condicionamento extras (edit/control/I2V wiring)

Se qualquer um desses pontos divergir, o resultado deriva.

Aqui vai um exemplo lado a lado do que você está vendo: AI Toolkit Training Sample vs seu toolchain atual de inferência (ComfyUI/Diffusers/etc.).

AI Toolkit training sample Your inference toolchain
AI Toolkit training sample — set 1
Resultado de inferência — set 1

O que você vai ganhar com este guia


Se você só quer que a inferência bata com os training samples do AI Toolkit (comece aqui)


Sanity check de 60 segundos: trave estes 6 campos (não mexa no treino ainda)

Escolha um AI Toolkit Training Sample que você quer reproduzir (o Sample #1 é ideal). Copie ou exporte estes campos exatamente:

1) Base model (variante/revisão exata — não apenas “FLUX”)

2) Prompt (incluindo a trigger word, na mesma posição)

3) Negative prompt (se o treino não usou, deixe vazio)

4) Width/height

5) Seed

6) Steps + guidance (e tudo relacionado a sampler/scheduler)

Se você igualar esses 6 campos e ainda assim houver muita divergência, você está vendo um dos problemas de paridade abaixo.


Checklist de paridade de 10 minutos: 7 causas comuns de “preview ≠ inference” (por prioridade)

Regra de ouro: mude uma variável por vez. Se você mudar cinco coisas, nunca vai saber o que resolveu.

1) Base model mismatch (mais comum e mais destrutivo)

2) Mismatch de tratamento de resolução (snapping / resize oculto)

3) Diferenças de semântica de steps/scheduler/guidance (modelos few‑step são ultra sensíveis)

4) Diferenças de semântica de seed/RNG (CPU vs GPU generator, seeding global)

5) Diferenças na aplicação da LoRA (adapter vs fuse/merge; loader errado)

6) Prompt/negative/trigger não idênticos (um token pode quebrar a paridade)

7) Família de pipeline errada / inputs de condicionamento faltando (edit/control/I2V)

Agora, como diagnosticar cada uma rapidamente.


1) Base model mismatch: “parece perto o suficiente” não é perto o suficiente

Sintomas

  • O visual todo deriva: rostos, textura, estilo, qualidade de detalhes.
  • Pode parecer que a LoRA “não aplica” de jeito nenhum.

Por que acontece

LoRAs são muito específicas do modelo base. Treinar em uma variante exata e inferir em outra (mesmo “mesma família”) frequentemente causa deriva grande.

Teste rápido

  • Abra o seu config/YAML de treino do AI Toolkit.
  • Encontre o identificador/caminho exato do modelo base.
  • Verifique se o ComfyUI/Diffusers está carregando o mesmo base model (não um “parecido”).

Armadilhas comuns

  • Misturar variantes do FLUX (dev vs schnell, 1 vs 2)
  • Misturar Qwen Image generation vs Qwen Image Edit
  • Misturar Z‑Image Turbo vs DeTurbo
  • Usar a família de tarefa errada do WAN 2.2 (T2V vs I2V)

Correção

Trate o training config como fonte de verdade: selecione o base model a partir do YAML, não de memória.


2) Mismatch de tratamento de resolução: você acha que é 1024, mas não é

Sintomas

  • A composição muda, a nitidez muda, detalhes borram.
  • A deriva é muito pior em modelos few‑step/turbo.

Por que acontece

Muitos stacks ajustam width/height para um divisor (geralmente 32). Se a preview do AI Toolkit “snappa” e seu stack não (ou vice‑versa), você não está rodando o mesmo tamanho de entrada.

Exemplo:

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

Teste rápido

  • Force uma resolução múltipla de 32 (ex.: 1024×1024, 1216×832).
  • No ComfyUI, procure por nodes ocultos de resize/crop/latent scaling.

Correção

Para paridade, trave width/height no que a preview realmente usou (incluindo regras de snapping).


3) Diferenças de steps/scheduler/guidance: modelos few‑step punem “hábitos SDXL”

Sintomas

  • O resultado fica borrado/sujo e perde a “crispness” da preview.
  • Ou “explode” em artefatos overcooked.

Por que acontece

Modelos destilados/turbo/few‑step normalmente esperam poucos steps e guidance baixo (às vezes guidance ≈ 1.0). Se você aplicar defaults SD/SDXL (steps 20–30, CFG 5–8), você sai do regime esperado.

Teste rápido

  • Force steps e guidance para bater exatamente com o Training Sample.
  • Não mude schedulers enquanto estiver depurando paridade.

Correção

Comece com os settings do Training Sample como ground truth. Depois que reproduzir, aí sim ajuste para o seu look.


4) Diferenças de seed/RNG: mesmo seed ≠ mesma sequência de ruído entre stacks

Sintomas

  • Mesmo prompt + mesmo seed, mas resultados muito diferentes.

Por que acontece

Stacks podem implementar seeding de formas diferentes:

  • seeding global vs por node
  • generator CPU vs GPU
  • consumo extra de RNG (random crops, jitter, etc.)

Teste rápido

  • Primeiro confirme reprodutibilidade dentro do mesmo stack (3 vezes igual).
  • Depois compare entre stacks.

Correção

Alinhe o handling de seed o máximo possível (seed global + semântica explícita do generator).


5) Aplicação da LoRA diferente: adapter vs fuse/merge (e “loader errado”)

Sintomas

  • Efeito da LoRA mais fraco/mais forte do que na preview.
  • Ou parece que a LoRA não foi aplicada.

Por que acontece

Duas diferenças comuns:

  • Adapter: aplica dinamicamente durante a inferência com scale.
  • Fuse/Merge: funde pesos no modelo e descarrega adapters.

Isso pode se comportar diferente. Além disso, usar um loader/pipeline que não corresponde à família do modelo pode “aplicar nada” silenciosamente.

Teste rápido

  • Igualar o scale da LoRA ao Training Sample.
  • Confirmar que o loader é o correto para a família do modelo (não misture pipelines entre famílias).

Correção

Use uma implementação de referência conhecida para essa família, reproduza o sample e depois porte o método para o seu stack.


6) Prompt / negative / trigger mismatch: um token pode quebrar a paridade

Sintomas

  • O estilo parece próximo, mas os “detalhes assinatura” somem.
  • Ou se comporta como um base model genérico.

Erros frequentes

  • Training negative vazio, mas sua UI injeta um negative padrão.
  • Trigger word faltando, errada ou movida.
  • Parsing/sintaxe de weights diferente entre ferramentas.

Teste rápido

  • Deixe o negative prompt vazio (como no training).
  • Copie/cole o prompt exato do Training Sample.

Correção

Para testar paridade, elimine defaults ocultos. Rode “limpo” primeiro.


7) Família de pipeline errada / inputs de condicionamento faltando (edit/control/I2V)

Sintomas

  • A lógica do output fica completamente errada.
  • Ou a inferência dá erro.

Por que acontece

Algumas famílias exigem inputs extras (control image, edit input, I2V). A preview pode estar usando esse wiring, mas sua inferência pode ser só prompt.

Teste rápido

  • O modelo exige control image ou edit input?
  • Você está usando a família de pipeline correta para a tarefa?

Correção

Troque para o pipeline correto e forneça os inputs necessários.


Não quer debugar? Obtenha paridade de inferência no RunComfy

Não quer perseguir o drift do ComfyUI/Diffusers por conta própria? O RunComfy já fornece pipelines de paridade de training & inference para as famílias do AI Toolkit, então você não precisa reconstruir a pipeline exata da preview na mão.

Tudo que você precisa é sua LoRA e o Training config (YAML) do seu run no AI Toolkit. Importe em Trainer → LoRA Assets e clique Run (Run LoRA). O RunComfy executa a pipeline correta do base model com o comportamento crítico de paridade para que os resultados batam com os training samples.

Workflow: AI Toolkit LoRA Training‑Inference Parity.

Exemplo na prática (AI Toolkit Training Sample vs inferência RunComfy com config aplicado):

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

Quer ir mais fundo?


FAQ

“Minha LoRA do AI Toolkit funciona nos Training Samples, mas não faz nada no ComfyUI.”

Comece por base model mismatch e loader mismatch. A maioria dos casos de “não faz nada” é:

  • variante errada do base model
  • método/loader errado de aplicação de LoRA
  • negative prompt/defaults ocultos

“Por que os Samples do AI Toolkit são mais nítidos que meu output do Diffusers?”

Geralmente um destes:

  • mismatch de regime de steps/guidance (especialmente few‑step)
  • diferenças de snapping de resolução
  • diferenças de scheduler/timestep

“Como faço para a inferência coincidir com a preview de training de forma confiável?”

Trate o training config como ground truth e trave:

  • base model
  • width/height (incluindo regras de snapping)
  • família de steps/guidance/scheduler
  • método e scale de aplicação da LoRA
  • semântica de seed

Se você quer isso como um workflow repetível de Run LoRA (Playground/API), construa a inferência em torno desse mesmo config.

Pronto para começar o treinamento?