WaveSpeed에서 Z-Image Turbo LoRA 훈련하기: 데이터셋, 단계, 일반적인 실수

WaveSpeed에서 Z-Image Turbo LoRA 훈련하기: 데이터셋, 단계, 일반적인 실수

안녕, 친구. 난 도라야.

지난주에 헤더 이미지 세트를 위한 작고 일관된 스타일이 필요했어. 스톡 이미지는 뭔가 어색했고, 프롬프트를 손으로 튜닝하면 계속 흔들렸어. 그래서 계속 피해왔던 걸 시도해봤어: WaveSpeed 내 Z-Image Turbo의 빠른 LoRA. 복잡한 설정과 많은 시행착오를 예상했어. 근데 예상보다 훨씬 간단했어. 별로 힘들지 않고, 그냥 깔끔했어. 2026년 1월 두 저녁 동안 WaveSpeed에서 Z-Image Turbo LoRA를 훈련시킨 방법, 뭐가 됐고 뭐가 안 됐는지, 그리고 다시 쓸 설정들을 여기 정리했어. 모든 마지막 성능을 짜내는 가이드는 아니야. 머리를 맑게 유지하고 결과를 예측 가능하게 만들어주는 꾸준한 기준선이야.

데이터셋 규칙

뭘 수집했나

작게 유지했어: 45개 이미지로 정의된 시각 스타일(차분함, 깔끔한 선, 부드러운 종이 질감). 30–120개 사이에서는 좋은 결과가 나왔어. 20개 미만이면 과적합 경향이 있고, 150개 이상이면 LoRA보다는 파인튠을 더 훈련하는 거라, Z-Image Turbo의 속도 장점이 줄어들어.

다양성이 양보다 중요해

세트를 나눴어:

  • 70% “핵심 스타일” 이미지 (내가 가르치려는 스타일),
  • 30% 컨텍스트 다양성 (다양한 물체/배경이라 LoRA가 스타일을 한 장면으로 한정하지 않게).

각도, 조명, 종횡비가 다양했어. 거의 똑같은 이미지는 피했어 (같은 물체를 5° 정도씩 회전시킨 세 장의 사진 같은 건 없었어).

크기와 포맷

  • 해상도: 짧은 쪽이 768px. 터보 모델은 1024를 다루지만, 768은 훈련을 가볍게 유지하고 내 테스트에서 아티팩트를 줄였어.
  • 포맷: PNG 또는 고품질 JPEG. 메타데이터는 제거했어. 큰 내장 프로필이 색을 약간 헷갈리게 할 수 있어.
  • 크로핑: 주제가 두드러지도록 크로핑했지만, 항상 중앙에 오게 하진 않았어. 대칭은 모델을 무너뜨려.

캡션 팁

두 번에 걸쳐 시도했어: 먼저 자동 태깅, 그 다음 가벼운 수정. 자동 캡션이 70%까진 가져다줬어. 남은 30%가 중요했어.

캡션은 짧고 일관되게

  • 1–2 문장 또는 간단한 태그 목록.
  • 스타일 토큰(아래 토큰에 대해 더 얘기할게) + 클래스 단어를 언급해.
  • 모든 걸 설명하지 마. 안정적이고 중요한 것만 이름 붙여.

내가 사용한 예:

  • “soka-style, minimalist illustration of a ceramic mug on a desk, soft paper texture, muted palette.”
  • “soka-style, simple plant in a clay pot, side light, clean negative space.”

클래스 단어가 도움이 돼

스타일을 가르치는 거면 클래스 단어를 써 (illustration, photo, portrait, product shot). 물체/캐릭터를 가르치는 거면 그게 뭔지 써 (mug, backpack, planner). 이게 LoRA가 일반화하는 걸 도와. 클래스 단어 없이는, 내 초기 실행에서 LoRA가 레이아웃에 집착했어.

형용사로 과적합하지 마

두 번째 패스 이후로 반복된 형용사는 제거했어. 모든 캡션이 “warm, cozy, soft”라고 하면, 모델이 당신이 원하지 않을 때도 그 분위기에 고착돼. 톤을 위해 하나의 형용사만 유지했어.

부정 신호

정말 중요한 몇 캡션에서 가벼운 부정을 추가했어: “no harsh shadows.” 어디든지가 아니라, 원본 이미지의 대비가 잘못된 곳에서만. 너무 많은 부정은 추론할 때 완고해지게 했어.

작은 참고: 캡션 없이 다섯 이미지로 테스트해봤어. 결과가 약간 더 노이즈했어. 끔찍하진 않지만, 일관성이 중요하면 캡션을 건너뛰지 마.

훈련 파라미터 기준

이건 WaveSpeed에서 Z-Image Turbo로 꾸준한 결과를 준 설정들이야. 나 세 개의 짧은 훈련을 실행했어 (내 작업 공간의 기본 GPU에서 각각 약 18–22분). 너의 시간은 다를 수 있어.

다시 쓴 핵심 설정

  • Base: Z-Image Turbo (2026년 1월 기준 최신)
  • LoRA rank (dim): 미묘한 스타일은 16, 스타일이 더 강해야 하면 32. 나 16으로 정착했어.
  • Alpha: rank와 맞게 (16) 또는 절반 (8). 나 맞게 했어.
  • Learning rate: 시작은 1e-4. 스타일이 안 붙으면 2e-4. 1e-3은 내 테스트에서 빨리 과하게 조리됐어. Hugging Face의 LoRA 훈련 문서는 대부분의 stable diffusion 모델에 대해 1e-4부터 시작하기를 권장해.
  • Batch size: 2–4. 나 4를 사용해서 스텝을 합리적으로 유지했어.
  • Epochs/steps: 데이터의 1–2개 완전 패스를 목표로. 45개 이미지 × 10번 반복 ÷ 배치 4 ≈ 에포크당 112 스텝. 나 2 에포크(≈224 스텝) 훈련했어. 3 에포크 이상이면 배경을 암기하기 시작했어.
  • Scheduler: Cosine 또는 warmup이 있는 constant. 나 5% warmup으로 cosine을 사용했어.
  • Precision: 가능하면 bfloat16. 여기서 잘 작동했어.

정규화 이미지

스타일 LoRA로는 항상 정규화를 추가하지 않아. 물체나 캐릭터의 경우, 50–100개의 클래스 이미지 (평범한 “mug,” “portrait”) 추가해서 해부학과 형태를 정직하게 유지. 터보에서는 이게 식물 샷에서 이상한 손가락 같은 잎을 눈에 띄게 줄였어.

체크포인트와 저장

50–80 스텝마다 저장을 활성화했어. 나한테 그 가장 좋은 지점인 180번 스텝 정도로 되돌아갈 수 있게 했어. 나중 스텝들은 더 깔끔했지만 프롬프트에서 덜 유연했어.

빠른 정신 점검을 원하면: 먼저 60–90 스텝 실행을 해. 완벽하진 않지만, 데이터셋이 올바른 교훈을 가르치는지 알려줄 거야.

트리거 단어

스타일을 고정하기 위해 고유한 토큰을 사용했어: “soka-style”. “kavli-ark” 또는 “mivva” 같은 거 써도 돼. 짧고, 만들어낸 거, 그리고 실제 단어와 충돌할 가능성 없는 거.

캡션을 작성한 방법

  • 토큰으로 캡션 시작해, 한 번: “soka-style, minimalist illustration …”
  • 클래스 단어 추가: illustration, photo, render, 뭐든 맞는 거.
  • 데이터셋 전반에 걸쳐 일관되게 유지.

프롬프트를 작성한 방법

  • Positive: “a product photo of a ceramic mug on a wooden desk, soka-style, soft paper texture, muted colors”
  • Negative: “harsh shadows, heavy grain, text watermark, chromatic aberration”

트리거 단어를 피할 때

매우 구체적인 물체를 훈련하는 거면 (브랜드 병, 마스코트), 캡션에서 토큰 + 클래스 단어(“mivva-bottle”)를 써, 근데 추론 프롬프트에 토큰을 강제할 필요는 없어. 내 테스트에서 터보는 훈련 분포를 존중했어: 때론 클래스 단어만으로도 충분했어. 토큰은 장면이 복잡해질 때 도움이 됐어.

한 가지 이상한 점: 두 개의 스타일 토큰을 쌓으면 모델이 혼동했어 (“soka-style, nova-style”). 흐릿한 혼합을 얻었어. 한 번에 한 토큰이 더 깔끔했어.

검증 이미지

검증이 나를 유령을 쫓는 것에서 구했어.

고정 시드와 작은 그리드

세 개의 내가 신경 쓰는 프롬프트를 설정했고 여러 실행에서 고정으로 유지했어:

  1. “a ceramic mug on a desk, soka-style, soft paper texture, muted colors”
  2. “a leafy plant by a window, soka-style, side light, clean background”
  3. “a planner and pen, soka-style, top-down, gentle shadows”
  • Seed: 고정 (나 12345 사용). 프롬프트마다 한 시드.
  • Steps: 터보는 20–28. 30 이상이면 과하게 날카로워지기 시작.
  • CFG: 3.5–6. 나 균형을 위해 4.5를 좋아했어.
  • Sampler: DPM++ 2M Karras 또는 좋은 Euler 변형. 둘 다 잘 작동했어.
  • Size: 훈련 크로핑과 대등하게 768×768.

나 또한 토큰 없이 같은 세트를 한 번 렌더링해서 스타일이 너무 지배적인지 보자. 내 두 번째 실행에서, 토큰 없이도 머그가 여전히 “papery”였어, 내가 스타일을 너무 밀었다는 힌트. LoRA 가중치를 0.6으로 낮추니 고쳤어.

가능하면, 훈련하는 동안 가벼운 검증 패널을 열어 두기. 같은 세 프롬프트가 업데이트되는 걸 보는 게 무작위 샘플을 쭉 보는 것보다 차분해.

수정

뭐가 잘못됐고 뭐가 고쳤는지.

배경 과적합

  • 증상: 같은 종이 질감이 무관한 장면에 나타나.
  • 해결: 이미지당 반복 줄이기 (10에서 6으로), 6–10개의 중립 배경 추가, 추론에서 LoRA 가중치 낮추기 (0.6–0.75).

베이지색으로 색이 변함

  • 증상: 모든 게 늦은 오후 필터처럼 따뜻해진다.
  • 해결: 캡션에서 반복적인 “warm/soft/cozy” 형용사 제거, 6개의 더 차가운 톤 이미지 추가, 데이터셋에서 화이트 밸런스 다양성 설정, 부정에 “overly warm tones” 추가.

깨지기 쉬운 프롬프트

  • 증상: 작은 프롬프트 변화로 구성이 무너진다.
  • 해결: 데이터셋의 물체 종류와 레이아웃 다양성 증가, 약간 낮은 LR로 훈련 (2e-4 대신 1e-4), 스타일이 복잡하면 rank 32 시도.

발행 및 재사용

이 LoRA를 훈련하는 게 관리 가능했던 건 대부분 우리가 WaveSpeed를 프로세스의 짜증나는 부분들을 없애도록 만들었기 때문이야. 스크립트를 연결하거나 GPU를 감시하는 대신, 작은 데이터셋을 업로드하고, 짧은 터보 LoRA 훈련을 실행하고, 체크포인트를 비교하고, 내 흐름을 깨지 않고 프로젝트 전반에서 모델을 재사용할 수 있었어.

스타일 드리프트, 과적합, 또는 “그 좋은 실행” 추적 잃기에 피곤하면, → WaveSpeed에서 Z-Image Turbo LoRA 훈련 세 번째 실행이 꾸준해 보였을 때, 나 WaveSpeed 안에서 LoRA를 발행했어, 평범한 모델 카드:

  • 뭐에 쓸 건지: 미묘한 종이 질감 스타일, 차분한 팔레트, 깔끔한 형태.
  • 뭐에 쓰면 안 되는지: 사실적인 초상화, 광택 있는 제품, 무거운 텍스트 오버레이.
  • 작동한 설정: 가중치 0.6–0.85, CFG ~4.5, 20–26 스텝, 768 출력.
  • 두 개의 좋은 프롬프트와 한 개의 주의.
  • 버전 노트: 2026년 1월 훈련, rank 16, LR 1e-4, ~224 스텝.

라이센스는 간단하게 유지했고 세 개의 검증 이미지를 추가했어. 미래의 나는 과거의 나가 세부 사항을 준 것에 감사할 거야.

재사용

  • 쌓기: 나 이 스타일 LoRA를 별도의 물체 LoRA와 쌓을 수 있었지만, 한 번에 하나의 스타일만 유지했어. 반드시 쌓아야 하면, 결합된 가중치를 1.0 아래로 유지.
  • 병합: 나 체크포인트로 구워 넣지 않았어. 전 목표가 유연성이었어.
  • : 나 LoRA 링크와 세 개의 고정 검증 프롬프트를 공유했어. 검토 왕복을 줄였어. 사람들이 같은 참고를 봤어.

WaveSpeed 또는 Z-Image Turbo가 처음이면, 첫 실행 전에 공식 문서를 훑어보는 것도 좋아, 특히 그들의 학습률과 rank에 대한 참고.나 첫 번째 패스 후에 훑어봤고, 더 일찍 했으면 좋았을 텐데.

너도 “그냥 작은 LoRA를 훈련시킬 거야”라고 맹세했다가, 이틀 밤 후 모든 이미지가 “eternal beige filter” 또는 “forced paper texture background” 입혀 있는 거 본 거 아닌가?

빠르게, 45개 이미지를 WaveSpeed에 갖다 놓고 Z-Image Turbo LoRA를 시도해 봐. 그 다음 돌아와서 말해 줄래: 헤더 일관성을 구했어, 아니면 모든 물체가 “mysterious textured tentacles”를 돋아내게 했어?