실전 활용C-105Wed May 20 2026 09:00:00 GMT+0900 (대한민국 표준시)

캐릭터 하나가 13단계를 통과하는 데 걸린 것

AI 에디터가 실측 로그로 작성·Wed May 20 2026 09:00:00 GMT+0900 (대한민국 표준시)·4

P 는 캐릭터 한 종을 게임에 쓸 수 있는 품질로 만들고 싶었다. 그 "한 종"을 위해 13개의 Phase 가 필요했고, 그 13개는 거의 다 실패의 기록이었다.
캐릭터 하나가 13단계를 통과하는 데 걸린 것

그날의 숫자

지표
세션 코드 2412cf47 (02-10 ~ 03-04, 약 3주)
Phase 수 13 (Phase 0 백업 → Phase 13 production 파이프라인)
Phase 0 백업 파일 2,373 + creatures.json + generation_queue.json
Phase 1 무결성 감사 이슈 4,617건
Phase 2 파일 이동 / 중복 제거 / 고아 격리 1,725 / 58 / 320
Phase 3 시각 품질 스캔 1,974장 (손상 1 / 중복 82 제거 / 누락 533)
Phase 3 프롬프트 커버리지 복원 1,576개 → 100%
DoRA 학습 (Phase 6) 1,100 steps / 46.1분 / VRAM peak 2.73GB / 8GB
SDXL 전환 (Phase 8) 768×1344 / 20시간 18분
Grid Search (Phase 10) 54 combos

데이터 출처: P 의 게임 작업 로그 §A (2412cf47 세션 전체 기록). 모든 수치는 그 로그의 Phase별 실측.

무슨 일이 있었나

처음에 P 가 하려던 건 단순했다. 캐릭터 한 종을 일관된 화풍으로 양산하는 LoRA 를 학습시키는 것. 그런데 학습을 시작하기도 전에 Phase 1 의 감사 스크립트가 4,617건의 이슈를 뱉었다.

avmp_audit.py            → 4,617건 이슈
audit_prompt_generation.py → 174/256 프롬프트 전무, 80건 한국어 혼입

학습 데이터 자체가 엉망이었다는 뜻이다. 2,373장을 백업해 두고(Phase 0), P 는 학습이 아니라 청소부터 시작했다. Phase 2 에서 1,725 파일을 옮기고 58개 중복을 지우고 320개 고아 파일을 격리했다. flat file = 0 이 될 때까지. Phase 3 에서는 1,974장을 스캔해 손상 1건, 누락 533건을 찾아내고 프롬프트 커버리지를 100% 로 되돌렸다.

여기까지가 3 Phase다. 아직 학습은 한 줄도 안 돌렸다.

학습은 Phase 4 부터였다. SD 1.5 기반 LoRA → flatness(평면화) 한계에 부딪혀 Phase 6 에서 DoRA 로 갈아탔다.

Method: DoRA | Rank: 32 | bf16 | AdamW8bit
Dataset: 597 → 110장 (CLIP → WD14+BLIP 재캡션)
1,100 steps / 46.1분 / Best loss 0.087(E8)
VRAM Peak: 2.73GB / 8GB  ← 8GB 카드 한 장으로 버틴 기록

8GB 한 장으로 돌리려고 Sysmem Fallback 을 차단하고 Power Limit 을 80% 로 묶었다. 그렇게 Phase 7(Style Core), Phase 8(SDXL 전환, 20시간 18분), Phase 9(4-Loop 학습), Phase 10(54조합 Grid Search)까지 갔다.

실패

이 13 Phase 는 성공의 사다리가 아니라 실패의 목록에 가깝다.

세 번의 실패가 각각 다음 Phase 의 입력 조건이 됐다. flatness 실패 → DoRA. overfitting → epoch005 고정. 워터마크 → 재학습. 이게 evidence 카드 E001 이 말하는 그것이다 — AI 활용은 단발 답변이 아니라 실행 · 검증 · 실패 복구 · 기록화 루프다. 13 Phase 가 통째로 그 루프의 13바퀴였다.

그날의 깨달음

  1. 학습 전에 청소가 3 Phase 다. 모델을 잘 고르는 것보다, 4,617건 이슈가 박힌 데이터셋을 1,576 프롬프트 100% 커버리지로 되돌리는 게 먼저였다. 결과 품질의 대부분은 Phase 4 이전에 결정됐다.
  2. "더 돌리면 더 좋아진다"는 거짓이다. Loop 4 overfitting 이 그걸 score 로 증명했다. best 는 중간(epoch005)에 있었고, 그걸 멈출 줄 아는 게 학습의 실력이었다.
  3. 데이터셋의 출처는 결과물에 새겨진다. 워터마크 키워드가 따라 나온 건 우연이 아니라 데이터의 지문이었다. 그걸 지우는 데 40 Epoch 가 더 들었다.

다음 날

Phase 13 의 ComfyUI Ultimate Pipeline(Txt2Img → Hires.Fix → FaceDetailer)이 돌기 시작했을 때, P 는 캐릭터 한 종을 production 품질로 뽑을 수 있게 됐다. 그 "한 종"을 위해 3주와 13 Phase 가 들었다.

그런데 그 13 Phase 의 기록이 남아 있었기 때문에, 두 번째 캐릭터는 13 Phase 가 아니라 3 Phase 면 됐다. 첫 종의 노가다가 두 번째 종의 파이프라인이 된 것. 그게 이 3주의 진짜 산출물이었다 — 캐릭터가 아니라, 캐릭터를 만드는 법.


Editor's note: 모든 Phase 수치(파일 수 / 이슈 4,617 / steps / VRAM / 시간)는 P 의 게임 작업 로그 §A 2412cf47 세션 직접 인용. 캐릭터명은 캐릭터 A/B 로, 외부 게임 IP 명은 일반화. 학습 방법(DoRA/SDXL/Grid Search)은 공개 ML 기법이라 그대로 표기. [ASSET_PIPELINE_V3] 는 codename. 서사·감정선은 일반화이며 실제 작업은 더 단편적이었다.

캐릭터 하나가 13단계를 통과하는 데 걸린 것 다이어그램
캐릭터 하나가 13단계를 통과하는 데 걸린 것 차트