ComfyUI에서 나만의 LoRA 학습하기: 데이터, 태깅, 검증

"kohya-ss/sd-scripts는 Stable Diffusion, SDXL, SD3, FLUX.1 등 여러 모델 계열의 LoRA 학습 스크립트와 문서를 제공합니다."
오리지널 캐릭터 이미지 20장으로 이후 생성에서도 같은 캐릭터를 재현하는 LoRA를 만들고 싶다고 가정합니다.
데이터셋과 캡션 도구를 준비하고 온라인 스크린샷의 설정을 복사해도 결과가 무너질 수 있습니다. 배경을 바꾸면 얼굴이 달라지고, 캡션의 “wall”과 “floor” 때문에 같은 방이 따라오며, LR=1e-3은 과적합을 일으킵니다. dim/alpha=32/1은 alpha=1, dim=32에서 약 0.03, 즉 3%의 스케일이 됩니다.
한 번에 성공한다는 보장은 없습니다. 데이터, 캡션, 초기 파라미터, 적합도 진단, ComfyUI 검증을 순서대로 진행합니다.
데이터셋 준비: 필요한 수량과 이미지 조건
첫 단계는 학습 도구를 여는 일이 아니라 자료가 충분하고 목적에 맞는지 판단하는 일입니다.
학습 목표가 데이터 수를 결정합니다
무엇을 학습하느냐에 따라 필요한 수량이 달라집니다.
캐릭터 LoRA: 15~30장부터 시작합니다. 선명하고 해상도가 일정한 고품질 이미지라면 10장도 시험할 수 있습니다. 새 장면에서도 동일성을 유지하려면 배경과 각도를 다양화합니다.
화풍 LoRA: 붓 터치, 색조, 구도처럼 변수가 많아 보통 50~100장이 필요합니다. 데이터가 적으면 새 이미지에서 스타일이 사라집니다.
사물·의상 LoRA: 15~30장부터 시작하고 정면, 측면, 디테일 확대를 포함합니다.
데이터셋 품질 판단표
수량만으로는 부족합니다. 품질이 낮으면 배경, 조명, 결함까지 함께 학습합니다.
| 학습 대상 | 시작 수량 | 해상도 | 배경 | 기타 조건 |
|---|---|---|---|---|
| 캐릭터 LoRA | 15~30장(고품질은 10장) | 512×512 또는 1024×1024로 통일 | 깨끗하거나 다양하게, 같은 장면 반복 금지 | 여러 각도, 표정, 자세 |
| 화풍 LoRA | 50~100장 | 베이스에 맞춤(SD1.5→512, SDXL→1024) | 반드시 단순할 필요는 없지만 스타일은 일관되게 | 같은 작가 또는 시리즈 |
| 사물 LoRA | 15~30장 | 해상도 통일 | 깨끗한 배경이 좋지만 다양해도 됨 | 여러 시점과 디테일 |
우선순위는 해상도 통일, 캐릭터의 배경, 각도와 디테일 다양성입니다. 원본 해상도 차이가 크면 resize 후 디테일이 불균일합니다.
해상도, 배경, 전처리
해상도: 학습 시 모든 이미지를 목표 크기로 resize합니다. 512와 2048이 섞이면 디테일 유지가 달라지므로 미리 목표 해상도로 crop합니다.
배경: 20장 중 15장이 같은 방이라면 tagger가 “wall”, “floor”를 반복하고 LoRA가 방까지 학습할 수 있습니다. 깨끗한 배경을 고르거나 캡션을 수정합니다.
전처리:
- 선명하고 해상도가 비슷하며 특징이 분명한 이미지를 고릅니다.
- Photoshop, GIMP 또는 배치 스크립트로 한 해상도에 맞춥니다.
- 같은 배경이 5장 넘게 반복되는 위험 자료를 제외합니다.
캡션과 트리거 워드: 데이터셋 태깅
자동 태깅은 검토가 필요합니다. 배경과 부차적 특징이 LoRA의 사용성에 직접 영향을 줍니다.
캡션 도구 선택
주요 선택지는 다음과 같습니다.
| 도구 | 특징 | 적합한 용도 | ComfyUI 지원 |
|---|---|---|---|
| WD14 Tagger | Danbooru 태그, Stable Diffusion 생태계에서 널리 사용 | 캐릭터와 애니 화풍 | Image-Captioning-in-ComfyUI 노드 |
| Florence2 | 자연어 설명을 만드는 Microsoft 비전 모델 | 실사 캐릭터와 사물 | ComfyUI 노드 제공 |
| BLIP | 자연어 이미지 캡션 모델 | 실사 화풍과 장면 | ComfyUI 지원 |
WD14는 캐릭터에 유용하지만 “simple background”, “white wall”도 넣습니다. Florence2는 문장을 출력해 실사 자료에 더 적합합니다.
트리거 형식과 위치
기존 태그와 충돌하지 않는 희귀 토큰이나 조합을 씁니다.
sks charname: 초기 Stable Diffusion에서 사용된 희귀 접두사xyz_character_name: 사용자 정의 접두사my_char_001
위치:
- 각
.txt또는.caption의 시작에 트리거를 쓰고 속성을 이어 붙입니다. - 일부 trainer에는 별도 필드가 있지만 모든 캡션에 있다면 필수는 아닙니다.
반복된 트리거가 이미지 그룹에 안정적인 이름을 부여합니다. 생성할 때도 같은 토큰을 씁니다.
핵심 속성 수동 확인
자동 처리 후 최소 세 가지를 확인합니다.
배경 누출: “wall”, “floor”, “bedroom”이 빈번하면 새 장면을 방해합니다. 삭제하거나 일반화합니다.
트리거 누락: 모든 캡션을 확인합니다.
핵심 특징 누락: 헤어스타일, 색상, 의상이 빠졌다면 추가합니다.
모든 단어를 읽을 필요는 없습니다. grep이나 스프레드시트로 빈도를 확인하고 이상 항목을 고칩니다.
학습 도구의 경계: ComfyUI가 실제로 하는 일
ComfyUI는 학습을 실행할 수 있지만 자체가 학습 백엔드는 아닙니다.
백엔드는 kohya-ss/sd-scripts입니다
실제 계산은 Stable Diffusion LoRA에 널리 쓰이는 kohya-ss/sd-scripts가 담당합니다. Kohya GUI와 ComfyUI 노드는 이 스크립트나 유사 구현을 감쌉니다.
FluxTrainer와 Lora-Training-in-Comfy는 래퍼입니다.
- Kijai의 FluxTrainer는 수정한 sd-scripts 코드를 FLUX 관련 ComfyUI workflow에 연결합니다.
- Lora-Training-in-Comfy도 kohya 기반 학습 인터페이스를 제공합니다.
기본값은 보편적인 최적값이 아닙니다. 최신 README와 upstream 문서를 확인합니다.
학습 경로 비교
| 경로 | 장점 | 단점 | 대상 |
|---|---|---|---|
| kohya-ss GUI | 완전한 UI와 많은 튜토리얼 | 별도 설치와 복잡한 화면 | 모든 파라미터를 제어하려는 사용자 |
| FluxTrainer 같은 ComfyUI 노드 | 같은 workflow에서 학습 | 실험적 요소와 보장되지 않는 기본값 | 기존 ComfyUI 사용자 |
| 터미널의 kohya-ss 스크립트 | 최신 기능과 완전한 제어 | 높은 진입 장벽 | 경험 있는 사용자 |
최신 파라미터 확인 위치
스크린샷만 믿지 말고 kohya-ss/sd-scripts의 최신 문서부터 봅니다.
- 학습 가이드는 SD1.5, SDXL, FLUX.1 옵션을 설명합니다.
- Issues와 Discussions에는 network alpha 같은 주제별 경험이 있습니다.
학습률, dim/alpha, step은 모델과 데이터셋에 따라 달라집니다.
목표별 초기 파라미터
다음 값은 재현 가능한 출발점입니다. 저장한 epoch와 증상으로 조정합니다.
network dim과 alpha의 관계
network dim 또는 rank는 LoRA 행렬 용량을 정합니다. dim이 높으면 더 많은 디테일을 담지만 메모리와 시간이 늘어납니다.
network alpha는 학습된 가중치를 스케일링합니다. alpha가 dim보다 작으면 설정 학습률에 비해 효과가 감쇠됩니다.
단순화한 스케일: alpha / dim
예:
- alpha=16, dim=32 → 16/32=0.5
- alpha=32, dim=32 → 1
- alpha=1, dim=32 → 1/32≈0.03
학습률과 step을 고려하지 않고 dim=32, alpha=1만 복사하면 결과가 약할 수 있습니다.
출발점:
- 감쇠 없는 alpha=dim 또는 중간 감쇠의 alpha=dim/2를 시험합니다.
- alpha<dim이면 학습률과 step을 함께 비교합니다.
학습률, step, epoch
| 파라미터 | 캐릭터 | 화풍 | 설명 |
|---|---|---|---|
| U-Net LR | 4e-4 | 1e-4 | 증상과 alpha에 따라 조정할 시작값 |
| Text encoder LR | 5e-5 또는 1e-5 | 5e-5 이하 | 일반적으로 U-Net보다 낮음 |
| Step | 1000~2000 | 2000~3000 | epoch에서 추정하고 과적합 시 조기 종료 |
| Epoch | 10~20 | 20~30 | 작은 캐릭터 데이터는 더 적을 수 있음 |
step은 optimizer 업데이트이고 epoch는 데이터셋 1회 순회입니다. repeats, batch size, gradient accumulation, 분산 설정이 관계를 바꾸므로 trainer 카운터를 확인합니다.
베이스 모델 선택
학습 베이스가 호환성을 결정합니다.
| 모델 | 학습 해상도 | 호환 생성 모델 | 초기 VRAM |
|---|---|---|---|
| SD1.5 | 512×512 | SD1.5와 호환 파생 모델 | fp16과 checkpointing에서 약 8GB |
| SDXL | 1024×1024 | SDXL과 호환 파생 모델 | fp16과 checkpointing에서 약 12GB |
| FLUX.1 | 1024×1024 이상 | 해당 FLUX.1 계열 | 최적화 없이는 훨씬 높을 수 있음 |
FLUX.1 지원과 메모리 옵션은 계속 변합니다. 고정 숫자보다 현재 문서를 따릅니다.
초기 표
| 대상 | dim | alpha | U-Net LR | Text encoder LR | Step/epoch | 모델 |
|---|---|---|---|---|---|---|
| 캐릭터 SD1.5 | 32 또는 128 | 32 또는 1, 낮으면 보정 | 4e-4 | 5e-5 | 1000 | SD1.5 |
| 캐릭터 SDXL | 128 | 1 또는 128 | 4e-4 | 5e-5 | 1500 | SDXL |
| 화풍 SD1.5 | 128 또는 256 | 128 또는 1 | 1e-4 | 5e-5 이하 | 2000 | SD1.5 |
다음 적합도 검사로 시작값을 조정합니다.
과적합과 과소적합 판별 및 수정
잘못된 설정은 디테일을 망가뜨리거나 목표를 거의 학습하지 못하게 합니다.
과적합 증상
외형:
- 디테일이 섞이고 흐려지거나 변형됩니다.
- 새 배경과 각도에서 실패하고 학습 장면만 재현합니다.
- 데이터셋의 노이즈나 워터마크가 다시 나타납니다.
트리거:
- weight=0.3에서도 학습 데이터를 복사하며 제어되지 않습니다.
- 트리거 없이도 특징이 나타나 과도하게 결합됩니다.
과소적합 증상
외형:
- 대상과 닮지 않고 핵심 디테일이 약합니다.
- 트리거 반응이 약하거나 없습니다.
배경 테스트:
- 모든 장면에서 특징이 약해 핵심 개념이 충분히 학습되지 않았습니다.
비교표
| 증상 | 과적합 | 과소적합 | 수정 |
|---|---|---|---|
| 디테일 | 변형되거나 데이터 복사 | 닮지 않고 약함 | 과적합: LR/step 감소, 과소적합: LR/데이터 개선 |
| 배경 | 장면 변경 시 실패 | 어디서나 약함 | 과적합: 배경 태그 확인, 과소적합: 트리거 확인 |
| 트리거 | 너무 강함 | 약하거나 없음 | 과적합: LR/높은 dim 감소, 과소적합: LR, 데이터, dim 검토 |
| Weight | 0.3에서도 복사 | 1.0에서 겨우 보임 | 과적합: 이전 epoch, 과소적합: 신중히 계속하거나 데이터 개선 |
수정 우선순위
과적합:
- 비교를 위해 학습률을 약 50% 낮춥니다.
- step을 줄이거나 이전 epoch를 고릅니다.
- 캡션의 배경과 부차 특징을 확인합니다.
- 불필요하게 높은 dim을 낮춥니다.
과소적합:
- 학습률을 통제된 방식으로 높입니다.
- 데이터를 추가하거나 개선합니다.
- 모든 캡션의 트리거를 확인합니다.
- 용량이 부족하면 dim을 높입니다.
RTX 3060의 VRAM 요구와 저메모리 경로
VRAM이 적어도 학습할 수 있지만 해상도, 모델, 속도, 최적화에서 절충해야 합니다.
대략적인 최소 VRAM
| 모델 | fp16과 checkpointing 기준 | 추가 절약 | 옵션 |
|---|---|---|---|
| SD1.5 | 약 8GB | 제한적 구성에서 약 6GB | 낮은 dim, checkpointing, optimizer와 precision |
| SDXL | 약 12GB | 일부 구성에서 약 10GB | 낮은 dim, checkpointing, 블록 절약 |
| FLUX.1 | 절약 없이는 약 24GB 사례 | 강한 최적화에서 약 10GB 사례 | block swapping, checkpointing, 낮은 dim, 양자화 |
24GB에서 10GB라는 예는 2025년 외부 가이드의 수치입니다. 실제 사용량은 trainer, 모델, optimizer, cache, 데이터셋, GPU에 따라 달라집니다.
메모리 절약 기술
Fused 또는 memory-efficient backward는 구현에 따라 피크를 낮춥니다.
Gradient checkpointing은 activation을 다시 계산해 속도와 메모리를 교환합니다.
낮은 dim은 LoRA 파라미터와 보통 VRAM을 줄입니다.
Mixed precision과 양자화: fp16 또는 bf16이 일반적이며 일부 trainer는 FP8이나 양자화 구성요소를 지원합니다.
저VRAM 표
| VRAM | 현실적 대상 | 절충 | 권장 경로 |
|---|---|---|---|
| 6GB | SD1.5 캐릭터 | 낮은 dim, checkpointing, 느림 | 작은 batch의 SD1.5 |
| 8GB | SD1.5 캐릭터·화풍 | 낮은 dim과 checkpointing | 성숙한 SD1.5 절약 옵션 |
| 10GB | 일부 SDXL 구성 | 공격적 절약 | 문서화된 low-memory 설정 |
| 12GB+ | 더 많은 SDXL, 실험적 FLUX.1 | 여전히 절약 필요 가능 | SDXL 우선, FLUX.1은 설정 의존 |
VRAM이 빠듯하면 SD1.5부터 시작합니다. 요구량이 낮고 절약 기법이 성숙합니다.
완성된 LoRA를 ComfyUI에서 검증하기
이미지 한 장으로 판단하지 말고 트리거, 디테일, 배경 전환, weight 범위를 검사합니다.
LoRA 불러오기
Load LoRA로 .safetensors를 불러옵니다.
- 노드: ComfyUI 기본 Load LoRA
- 파라미터: 파일과 model·clip strength, 0.5 부근부터 시작
테스트 prompt 만들기
트리거와 핵심 속성을 넣습니다.
- 트리거 워드:
sks charname같은 학습 토큰을 앞부분에 둡니다. - 속성: 중요한 머리, 색상, 의상 표현을 씁니다.
- 장면: 배경 테스트에서 “in a forest”, “at night”로 바꿉니다.
예:
sks charname, blonde hair, blue eyes, white dress, simple background
배경 테스트:
sks charname, blonde hair, blue eyes, white dress, in a forest, at sunset
weight 범위 스캔
같은 조건에서 비교합니다.
- weight=0.3: 약하고 제어 가능한 효과.
- weight=0.5: 실용적 시작점에서 대상 식별.
- weight=1.0: 변형이나 제어 손실 없는 최대 효과.
0.3에서도 데이터에 고정되면 과적합, 1.0에서도 닮지 않으면 과소적합, 트리거, 호환성을 확인합니다.
검수 체크리스트
| 항목 | 합격 기준 | 실패 시 |
|---|---|---|
| 트리거 | 0.5에서 명확하고 0.3에서 제어 가능 | 무반응: 캡션/트리거, 너무 강함: LR 감소 또는 이전 epoch |
| 디테일 | 머리, 색상, 의상이 선명 | 변형: 과적합, 약함: 과소적합 |
| 배경 전환 | 새 장면에서도 대상 식별 | 배경 캡션과 데이터 다양성 확인 |
| Weight | 0.3~1.0에서 점진적 변화 | 학습 강도와 epoch 재검토 |
다음 단계와 관련 글
불러오기, weight, 중첩, 트리거는 ComfyUI에서 LoRA 사용하기: 가중치, 다중 중첩, 캐릭터 일관성에서 이어집니다.
베이스 모델과 호환성, shape mismatch의 관계는 Stable Diffusion 모델 선택: 베이스 모델과 LoRA 호환성에서 확인합니다.
반복 가능한 검증에는 LoRA 검증을 위한 Stable Diffusion Prompt 템플릿을 사용합니다.
재학습하지 않는 대안:
- FLUX.1 Kontext는 데이터가 적거나 학습 비용이 크면 LoRA 없이 캐릭터를 유지하는 선택지입니다.
- InstantID와 IPAdapter FaceID는 LoRA를 학습하는 대신 참조 이미지로 얼굴 일관성을 제어합니다.
나만의 LoRA를 학습하고 검증하는 방법
대상과 베이스 모델을 정하고 데이터와 캡션을 준비해 학습한 뒤 ComfyUI에서 트리거, 디테일, 배경 일반화를 확인합니다.
⏱️ Estimated time: 4 hr
- 1
Step 1: 학습 대상과 베이스 모델 선택
캐릭터, 화풍, 사물 중 대상을 정하고 SD1.5, SDXL, FLUX.1을 선택합니다. 학습 베이스가 생성 호환성을 결정합니다. - 2
Step 2: 데이터셋 선별과 정규화
주제가 분명하고 선명하며 각도와 배경이 다양한 이미지를 골라 목표 해상도로 통일합니다. - 3
Step 3: 캡션 생성과 수동 검토
적절한 도구로 캡션을 만들고 빈번한 배경어, 핵심 속성, 모든 파일의 트리거를 확인합니다. - 4
Step 4: 초기 파라미터 설정
목표에 맞춰 dim, alpha, 학습률, step 또는 epoch를 정하며 표는 보편적 정답이 아니라 재현 가능한 시작값으로 씁니다. - 5
Step 5: 중간 epoch 저장
일정 간격으로 가중치를 저장해 과적합 없이 일반화되는 시점을 나중에 비교합니다. - 6
Step 6: 고정 조건으로 ComfyUI 검증
prompt, seed, sampler, 크기를 고정하고 0.3, 0.5, 1.0 weight와 여러 배경을 비교합니다. - 7
Step 7: 증상에 따라 수정
과적합이면 학습률이나 step을 낮추고 배경 태그를 확인하며, 과소적합이면 트리거, 데이터, 학습률, dim을 점검합니다.
FAQ
LoRA 학습에는 이미지가 몇 장 필요한가요?
network dim과 alpha는 어떻게 설정하나요?
LoRA 학습률은 어느 정도가 적당한가요?
VRAM이 부족하면 어떻게 하나요?
ComfyUI에서 LoRA를 직접 학습할 수 있나요?
SDXL과 FLUX.1 LoRA 학습은 무엇이 다른가요?
2분 읽기 · 게시일: 2026년 8월 28일 · 수정일: 2026년 8월 28일
ComfyUI와 Stable Diffusion 실전 가이드
검색으로 들어왔다면 같은 시리즈의 이전 글이나 다음 글로 이동하는 것이 가장 빠릅니다.
이전
ComfyUI 인물 일관성: InstantID, FaceID, ReActor 선택법
ComfyUI에서 InstantID, IPAdapter FaceID, ReActor의 적용 단계와 모델 의존성을 비교하고 참조 이미지, 설치 경로, 조정, 오류 해결, 라이선스 경계를 설명합니다.
16편 중 9편
다음
ComfyUI 리전 프롬프트 사용법: Set Area, RegionalPrompt, Cutoff로 여러 피사체 분리하기
Set Area, RegionalPrompt, Cutoff로 ComfyUI 피사체를 분리하는 방법과 좌표, strength, 마스크 샘플링, ControlNet, 2차 패스 색상 번짐을 설명합니다.
16편 중 11편



댓글
GitHub로 로그인하여 댓글을 남기세요