
가장 많이 다운로드된 모델이 잘못된 의존성이었던 이유
요약
모델 라이브러리에서 높은 다운로드 수와 긍정적인 리뷰라는 지표만 믿고 모델을 선택했을 때 발생하는 의존성 문제를 다룹니다. 모델 교체 시 발생하는 런타임 설정 변화와 프롬프트 언어 체계의 차이로 인해 발생하는 기술적 오류를 분석합니다.
핵심 포인트
- 단순 인기도 지표가 항상 올바른 모델 선택을 보장하지 않음
- 모델 변경 시 런타임 설정(샘플러, CFG 스케일 등)의 변화 주의
- 모델별로 요구하는 프롬프트 언어(태그 방식 등)의 차이 고려 필요
모델 라이브러리는 패키지 레지스트리 (package registries)와 유사하게 작동합니다. 검색하고, 인기도 순으로 정렬하고, 별점을 확인한 뒤, 최상단 결과를 선택합니다. 이러한 휴리스틱 (heuristic)은 거의 모든 곳에서 충분히 유효하기 때문에 저도 이를 사용했지만, 결과적으로는 아무것도 하지 않았을 때보다 더 나쁜 결과를 초래했습니다.
실행 과정은 다음과 같습니다.
사양 (The spec)
테스트 대상인 아티팩트 (artifact)는 캐릭터입니다. 캐릭터는 글로 작성되었으며 이미지로 존재하지 않고, 설명이 유일한 진실의 원천 (source of truth)입니다. 일곱 가지 단언 (assertions):
character: bram
role: lockmaker
age: 40s
...
두 가지 환경, 동일한 사양, 동일한 목표 출력물입니다.
환경 A: 의존성 (dependency)을 직접 해결하기
생성기는 이미 선택된 모델과 함께 시작됩니다. 모델 라이브러리에서 "anime"를 검색하면 결과가 0건이 나옵니다. 검색 범위가 현재 활성화된 에코시스템 (ecosystem)으로 제한되어 있으며, 기본 에코시스템에는 해당 모델이 없기 때문입니다. 해당 범위를 설정하는 드롭다운 (dropdown) 메뉴가 있습니다. 이를 찾기 전까지 모든 쿼리는 잘못된 인덱스 (index)를 대상으로 실행됩니다.
범위가 수정되면, 최상위 애니메이션 체크포인트 (checkpoint)는 모든 버전을 통틀어 450,000회 이상의 다운로드 수를 기록하고 있으며, 약 1,500명의 리뷰어로부터 "압도적으로 긍정적 (Overwhelmingly Positive)"이라는 리뷰 점수를 받았습니다. 레지스트리가 제공할 수 있는 모든 신호에 따르면, 이것이 올바른 해결책입니다.
해당 모델로 전환하자 내부의 런타임 설정 (runtime config)이 변경되었습니다. 부정 프롬프트 (negative prompt) 필드가 나타났고, 샘플러 (sampler), 스텝 수 (step count), 그리고 CFG 스케일 (CFG scale)이 모두 새로운 기본값으로 이동했습니다.
두 번째 이미지 이전에 필요한 결정 사항들:
| # | 결정 사항 | UI에서 발견 가능한가? |
|---|---|---|
| 1 | 에코시스템 드롭다운 찾기 | 검색 실패 후에만 가능 |
| ... |
3번 항목이 흥미로운 부분입니다. 인터페이스가 도움을 줄 수 없는 유일한 단계이며, 동시에 이후의 모든 과정을 결정짓는 단계입니다.
또한 클릭 한 번 없이 비용이 들지 않으면서도, 앞서 언급한 10가지 항목 중 그 무엇보다 중요한 프롬프트 언어(prompt-language)의 변화도 존재합니다. 이 계열의 커뮤니티 애니메이션 체크포인트(checkpoints)들은 SDXL 기반이며 쉼표로 구분된 태그(comma-separated tags)를 기대합니다. 따라서 사양(spec)을 다시 작성해야 했습니다.
1boy, solo, male dwarf, adult man, 40 years old, stocky build,
broad shoulders, barrel chest, short stature, bald head,
dark geometric head tattoo on left side, long copper red beard,
...
부정 프롬프트 (Negative prompt):
child, kid, young boy, teenager, youthful face, beardless,
tall, slender, thin body, feminine, 1girl, bad hands, bad anatomy
결과 (Results)
| 단언 (Assertion) | 환경 A, 기본 모델 (Environment A, default model) | 환경 A, 상위 체크포인트 (Environment A, top checkpoint) | 환경 B (Environment B) |
|---|---|---|---|
| 체형: 단신, 넓은 체격 (build: short, broad) | 통과 (pass) | 실패 (fail) | 통과 (pass) |
| ... |
상위 체크포인트에서 두 가지 종횡비(aspect ratios)로 두 번 실행했습니다. 체형 단언(build assertion)은 두 번 모두 실패했습니다. 세 개의 긍정 태그(positive tags)가 이를 단언했고, 두 개의 부정 태그(negative tags)가 반대되는 특징을 제외했습니다.
아무도 선택하지 않은 기본 모델은 첫 번째 실행에서 이를 충족했습니다.
휴리스틱(heuristic)이 깨진 이유
인기 순위는 중앙값(median) 요청에 최적화됩니다. 450,000회의 다운로드를 기록한 체크포인트는 대부분의 사용자가 생성하는 것에 맞춰 미세 조정(fine-tuned)되어 있으며, 체격이 건장한 40세의 기술자는 그 분포(distribution) 밖에 위치합니다. 레지스트리(registry)는 올바르게 정렬되었습니다. 제 입력값은 샘플 외(out of sample) 데이터였으며, 메타데이터 중 그 어떤 것도 이를 드러내지 않습니다. 왜냐하면 메타데이터는 커버리지(coverage)가 아닌 채택률(adoption)을 설명하기 때문입니다.
이는 유지 관리자가 전혀 목표로 하지 않은 사용 사례를 위해 GitHub 스타(stars) 수만 보고 라이브러리를 선택하는 것과 동일한 실패 모드(failure mode)입니다. 신호(signal)는 실제입니다. 다만 그것은 다른 누군가의 요구사항을 측정하고 있을 뿐입니다.
환경 B: 기본값 유지 (Environment B: keep the default)
PixAI는 생성기(generator)가 열릴 때 애니메이션 모델을 로드합니다. 저는 이를 그대로 유지한 채, 태그 대신 산문(prose) 형태로 스펙을 작성하고, 종횡비(aspect ratio)를 설정한 뒤 생성했습니다. 세 가지 결정 사항이 있었으며, 그중 하나는 이미지 크기였습니다.
두 환경 사이를 이동하는 분들이라면 주목할 점이 있습니다. 이 모델은 SDXL이 아닌 DiT (Diffusion Transformer) 아키텍처이므로, 부정 프롬프트(negative prompt) 필드가 없으며 (tag:1.3)과 같은 괄호 가중치(bracket weight) 구문도 지원하지 않습니다. 제외 사항은 긍정 프롬프트(positive prompt)에 일반적인 문장으로 작성해야 합니다. 만약 SDXL 프롬프트를 변경 없이 그대로 가져온다면, 가중치는 아무런 경고 없이 무시됩니다.
일곱 가지의 모든 주장(assertions)이 통과되었습니다. 그 후, 장면 절(scene clause)만 교체하여 무작위 시드(random seeds)로 세 가지 장면 변형(scene variants)을 실행했으며, 참조 이미지(reference image)나 고정된 시드(locked seed) 없이도 캐릭터가 모든 장면에서 일관되게 유지되었습니다.
40대의 대머리 드워프 남성, 작고 넓은 체구, 구리빛 붉은 수염
황동 고리로 묶인 두 갈래 땋은 머리, 어두운 기하학적 문신...
- 단순한 따뜻한 회색 스튜디오 배경, 균일한 중립 조명.
...
LoRA에 대한 추가 관찰 사항이 하나 있는데, 이는 동일한 유형의 버그이기 때문입니다. 제가 첫 번째로 선택한 것은 전체 색상 팔레트(palette)를 틀어버렸는데, 해당 페이지에 그 이유가 설명되어 있었습니다. 제가 실행 중인 모델과 다른 베이스 모델 (base model)로 학습되었기 때문입니다. 베이스 모델은 호환성(compatibility) 필드입니다. 그것을 먼저 읽으세요. 두 번째로 선택한 것은 일치하면서도 고유의 미학(aesthetic)을 유지했으며, 이는 강도(strength) 값을 통해 완화할 수 있는 부분입니다.
시사점 (Takeaway)
레지스트리 순위(Registry rank)는 "대부분의 사람들이 무엇을 사용하는가"에 답합니다. 하지만 "나의 스펙을 무엇이 만족시키는가"에 답하지는 않습니다. 입력값이 특이할 때, 도구와 함께 제공되는 기본값(default)은 정당한 기준점(baseline)이 됩니다. 그리고 당신이 할 수 있는 가장 저렴한 실험은, 열 가지의 결정을 내려 그것을 교체하기 전에 먼저 기본값을 시도해 보는 것입니다.
완성된 결과물은 캐릭터 시트(character sheet)였습니다. 세 가지 뷰(views), 세 가지 장면(scenes), 세 가지 세부 크롭(detail crops)이 모두 단 하나의 문단으로부터 도출되었습니다.
자신만의 캐릭터로 이를 시도해보고 싶다면, 여기에서 시작할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

