AI Toolkit LoRA 학습 가이드

AI Toolkit LoRA: Training Samples는 좋은데 ComfyUI/Diffusers 추론이 다른가요?

Ostris AI Toolkit로 LoRA를 학습한 뒤 preview/samples와 추론이 달라지는 문제를 해결하는 실전 트러블슈팅 가이드.

Ostris AI Toolkit로 확산 모델 학습

Ostris AI Toolkit으로 LoRA를 학습했고 Training Samples에서는 결과가 아주 좋았는데, ComfyUIDiffusers로 추론하면 결과가 크게 달라진다면 당황하는 게 정상입니다. 아마 이런 걸 검색했을 수도 있어요:

  • “AI Toolkit 샘플은 좋은데 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 의미(semantics)
  • 해상도 처리(스냅/크롭 규칙)
  • seed/RNG 동작
  • (가끔) 추가 conditioning 입력(edit/control/I2V wiring)

이 중 어느 하나라도 다르면 출력이 드리프트합니다.

아래는 당신이 보고 있는 상황을 빠르게 비교한 것입니다: AI Toolkit Training Sample vs 현재 추론 툴체인(ComfyUI/Diffusers 등).

AI Toolkit training sample Your inference toolchain
AI Toolkit training sample — set 1
추론 결과 — set 1

이 가이드에서 얻을 수 있는 것


AI Toolkit training samples와 추론을 맞추고 싶다면(여기서 시작)


60초 sanity check: 이 6개 필드 고정(훈련은 아직 건드리지 마세요)

재현하고 싶은 AI Toolkit Training Sample을 하나 고르세요(Sample #1 추천). 아래 항목을 정확히 복사/내보내기 하세요:

1) Base model(정확한 variant/revision — “FLUX” 같은 총칭만으로는 부족)

2) Prompt(트리거 단어 포함, 같은 위치)

3) Negative prompt(훈련에서 안 썼다면 비워두기)

4) Width/height

5) Seed

6) Steps + guidance(sampler/scheduler 관련 설정 포함)

이 6개를 맞췄는데도 결과가 크게 다르면, 아래 parity 이슈 중 하나일 가능성이 큽니다.


10분 parity 체크리스트: “preview ≠ inference” 흔한 원인 7가지(우선순위 순)

원칙: 한 번에 하나만 바꾸세요. 다섯 개를 한꺼번에 바꾸면 무엇이 해결했는지 알 수 없습니다.

1) Base model 불일치(가장 흔하고 가장 치명적)

2) 해상도 처리 불일치(배수 스냅 / 숨은 resize)

3) steps/scheduler/guidance semantics 차이(few‑step 모델은 매우 민감)

4) seed/RNG semantics 차이(CPU vs GPU generator, 글로벌 시드)

5) LoRA 적용 방식 차이(adapter vs fuse/merge; 잘못된 로더)

6) prompt/negative/trigger가 완전히 동일하지 않음(토큰 하나로도 깨짐)

7) 파이프라인 패밀리 불일치 / conditioning 입력 누락(edit/control/I2V)

이제 각 항목을 빠르게 진단해 봅시다.


1) Base model 불일치: “비슷해 보이는데?”는 비슷한 게 아닙니다

증상

  • 전체 룩이 드리프트: 얼굴, 질감, 스타일, 디테일 품질이 전반적으로 달라짐
  • LoRA가 “아예 안 먹는 것처럼” 보일 수 있음

원인

LoRA는 base model에 매우 민감합니다. 특정 정확한 variant에서 학습하고 다른 variant(심지어 같은 “패밀리”)에서 추론하면 큰 드리프트가 발생할 수 있습니다.

빠른 테스트

  • AI Toolkit training 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를 source of truth로 두고, 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에서 숨은 resize/crop/latent scaling 노드 확인

해결

Parity 목적이라면, preview가 실질적으로 사용한 width/height(스냅 규칙 포함)를 고정하세요.


3) steps/scheduler/guidance semantics 차이: 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 고정
  • parity 디버깅 중에는 scheduler를 바꾸지 않기

해결

Training Sample 설정을 ground truth로 시작하고, 재현된 다음에 튜닝하세요.


4) seed/RNG semantics 차이: 같은 seed라도 스택이 다르면 같은 노이즈가 아닙니다

증상

  • 같은 prompt + 같은 seed인데 결과가 크게 다름

원인

스택마다 seeding 구현이 다릅니다:

  • 글로벌 시드 vs 노드별 시드
  • CPU generator vs GPU generator
  • 추가 RNG 소비(랜덤 크롭, 지터 등)

빠른 테스트

  • 같은 스택에서 재현성 먼저 확인(3번 돌려도 동일)
  • 그 다음 스택 간 비교

해결

seed 처리 방식을 최대한 맞추세요(글로벌 시드 + 명시적 generator semantics).


5) LoRA 적용 방식 차이: adapter vs fuse/merge(그리고 “잘못된 로더”)

증상

  • LoRA 효과가 preview보다 약/강하거나
  • LoRA가 안 적용된 것처럼 보임

원인

대표적으로 두 가지:

  • Adapter 적용: 추론 중 scale로 조절하며 동적으로 적용
  • Fuse/Merge 적용: 가중치를 모델에 합치고 adapter를 언로드

둘은 동작이 다를 수 있습니다. 또한 모델 패밀리에 맞지 않는 로더/파이프라인을 쓰면 “아무것도 적용되지” 않을 수 있습니다.

빠른 테스트

  • Training Sample과 동일한 LoRA scale
  • 해당 모델 패밀리에 맞는 로더인지 확인(패밀리 간 파이프라인 혼용 금지)

해결

해당 패밀리를 확실히 지원하는 레퍼런스 구현으로 샘플을 재현한 뒤, 같은 방법을 원하는 스택으로 옮기세요.


6) prompt / negative / trigger 불일치: 토큰 하나로도 parity가 깨집니다

증상

  • 스타일은 비슷하지만 “시그니처 디테일”이 사라짐
  • 또는 베이스 모델처럼 동작

자주 하는 실수

  • 훈련 negative는 비어 있는데 UI가 기본 negative를 자동 주입
  • 트리거 누락/오타/위치 변경
  • 도구마다 prompt 파싱/가중치 문법 차이

빠른 테스트

  • negative prompt를 비우기(훈련과 동일)
  • Training Sample의 prompt를 정확히 복사/붙여넣기

해결

parity 테스트에서는 숨은 기본값을 제거하고 “클린” 상태로 먼저 실행하세요.


7) 파이프라인 패밀리 불일치 / conditioning 입력 누락(edit/control/I2V)

증상

  • 출력 로직이 완전히 틀리거나
  • 추론이 에러로 실패

원인

일부 모델 패밀리는 추가 입력(control image, edit input, I2V conditioning)이 필요합니다. preview는 그 배선을 쓰는데, 추론은 prompt‑only면 당연히 다릅니다.

빠른 테스트

  • 이 모델이 control image/edit input이 필요한가?
  • 올바른 pipeline family를 사용 중인가?

해결

올바른 파이프라인으로 전환하고 필요한 조건 입력을 제공하세요.


직접 디버깅하기 싫다면? RunComfy에서 추론 parity 얻기

ComfyUI/Diffusers 드리프트를 직접 추적하기 싫다면, RunComfy는 AI Toolkit 모델 패밀리용 training & inference parity 파이프라인을 제공하므로 preview 파이프라인을 손으로 재구성할 필요가 없습니다.

필요한 것은 LoRA와 AI Toolkit run의 Training config(YAML)뿐입니다. Trainer → LoRA Assets로 가져온 뒤 Run(Run LoRA)을 클릭하면 바로 추론을 시작할 수 있습니다. RunComfy는 training preview와 parity‑critical 동작이 맞는 올바른 base‑model pipeline으로 실행합니다.

워크플로: AI Toolkit LoRA Training‑Inference Parity.

실제 예시(AI Toolkit Training Sample vs training config 적용 RunComfy 추론):

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 Training Samples에서는 잘 되는데, ComfyUI에서는 LoRA가 아무것도 안 해요.”

base model mismatch와 LoRA loader mismatch부터 확인하세요. “아무것도 안 한다”는 대부분 아래 중 하나입니다:

  • base model variant가 다름
  • LoRA 주입 방식/로더가 잘못됨
  • 숨은 negative prompt/defaults 존재

“왜 AI Toolkit Samples가 내 Diffusers 출력보다 더 선명하죠?”

대부분 아래 중 하나:

  • steps/guidance 레짐 불일치(특히 few‑step)
  • 해상도 스냅 규칙 차이
  • scheduler/timestep 차이

“추론이 학습 preview와 안정적으로 일치하게 하려면?”

Training config를 ground truth로 두고 아래를 고정하세요:

  • base model
  • width/height(스냅 규칙 포함)
  • steps/guidance/scheduler family
  • LoRA 적용 방식과 scale
  • seed semantics

이를 Run LoRA 워크플로(Playground/API)로 반복 가능하게 만들고 싶다면, 같은 config를 중심으로 추론을 구성하세요.

학습을 시작할 준비가 되셨나요?