본문 바로가기
[TIP] Stable Diffusion/ComfyUI

ComfyUI Z-Image 검은 화면 오류 해결: fp16_accumulation 옵션 제거로 해결

by doobam 2026. 2. 5.
반응형

ComfyUI에서 Z-Image Base와 Z-Image-Turbo를 함께 사용하는 Z+Z 워크플로우에서 검은 화면이 나타났습니다.

붉은 모자이크 노이즈, 인물 소실 같은 치명적 오류도 발생했습니다.

같은 설정을 쓰는 다른 사용자는 정상인데 유독 제 환경에서만 문제가 생겼습니다.

원인은 단 한 줄의 배치 옵션이었습니다.


증상: 유독 내 환경에서만 발생한 이상 현상

Z+Z 워크플로우 실행 시 다음과 같은 문제가 반복적으로 발생했습니다.

🔴 검은 화면 출력

🔴 붉은색/갈색 모자이크 노이즈

🔴 인물이 완전히 사라진 출력

더 이상한 증상도 있었습니다.

  • Z-Image Base 단독 실행 → 검은 화면
  • Z-Image Turbo 단독 실행 → 정상 출력
  • ZiT steps target을 45로 크게 설정 → "겉보기" 정상
제대로 나오지 않는 노이즈 이미지 화면 들
뭔가 잘못되었다.

잘못된 가설들: 모델, 파라미터, VAE를 의심하다

처음엔 다양한 가능성을 검토했습니다. 하지만 모두 빗나갔습니다.

모델 파일 문제

  • GGUF vs safetensors 버전 차이
  • Base 모델이 터보로 잘못 배포된 거 아닐까?

Z+Z 파라미터 문제

  • ZiT steps target / replace / Z-Image steps 비율 조정

해상도 문제

  • 1080×1920 → 832×1216으로 낮춰도 오히려 더 악화

VAE 문제

  • SDXL VAE 사용
  • ae.safetensors 미연결

⚠️ 참고: VAE(ae.safetensors) 명시 연결은 필수 조건이었지만, 그것만으로는 문제를 완전히 해결하지 못했습니다.


결정적 단서: "나만 안 되는 이유"

핵심 단서는 실행 배치 파일에 숨어 있었습니다.

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --fast fp16_accumulation

문제의 원인은 바로 --fast fp16_accumulation 옵션이었습니다.

문제의 --fast fp16_accumulation


fp16_accumulation이 정확히 무엇을 하는가

이 옵션은 PyTorch에서 FP16 누적 연산(accumulation)을 공격적으로 최적화해 속도를 높입니다.

  • 목적: 속도 향상
  • 대가: 수치 안정성 감소

특히 문제가 되는 조건

  • Z-Image Base 모델 (bf16/fp16 혼용)
  • Z+Z 구조에서 초기 latent를 Turbo가 강하게 재해석
  • 짧은 ZiT step (8~12)

발생 메커니즘

1단계: FP16 누적 연산 중 NaN/Inf 발생

2단계: latent가 망가진 상태로 VAE 디코딩

3단계: 검은 화면, 붉은 노이즈, 인물 소실

중요: 이 현상은 Turbo보다 Base에서 먼저 터집니다. 그래서 "Turbo 단독은 정상, Base 단독은 검은 화면"이라는 이상한 조합이 나타났습니다.


임시방편: ZiT steps 45가 "정상처럼" 보인 이유

ZiT steps target을 45로 비정상적으로 크게 설정하니 출력이 정상처럼 보였습니다. 하지만 이건 문제를 해결한 게 아니라 은폐한 것입니다.

스텝 45 설정 후 정상처럼 나오는 화면

실제 원리

  • steps가 많아지면 step당 denoise 강도 감소
  • FP16 누적 오차가 여러 step에 분산
  • NaN이 한 번에 폭발하지 않고 "가려짐"

⚠️ 결과:

  • Turbo의 장점(속도, seed variability) 사라짐
  • Z+Z를 쓰는 의미 퇴색

최종 해결: 배치 옵션 한 줄 제거

해결 방법은 놀랍도록 간단했습니다.

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build

--fast fp16_accumulation 옵션 제거

--fast fp16_accumulation 옵션 제거 후 ZiT steps 8로 정상 생성된 화면

결과

  • Z-Image Base 단독 → 정상 출력
  • Z-Image Turbo 단독 → 정상 출력
  • Z+Z (ZiT steps 8~12) → 정상 출력
  • 붉은 모자이크/검은 화면 → 완전히 사라짐

왜 다른 사람들은 문제없이 썼을까

대부분의 사용자 환경은 다음과 같았습니다.

  • --fast fp16_accumulation ❌
  • torch.compile ❌
  • Triton / SageAttention ❌

즉, Z-Image/Z+Z가 전제하는 "수치 안정 환경"을 이미 만족하고 있었던 것입니다.

반면 제 환경은:

  • fp16 누적 연산을 강제로 가속
  • Base 모델이 가장 먼저 수치적으로 붕괴
  • "나만 안 되는" 상황 발생

교훈

  1. Z-Image Base가 터지면 환경을 먼저 의심하라
  2. "steps를 늘리면 된다"는 근본 해결이 아니다
  3. 속도 최적화 옵션은 모델이 안정된 뒤에만 적용하라
  4. Z+Z는 모델보다 수치 안정성(dtypes, accumulation, compile 옵션)에 훨씬 민감하다

자주 묻는 질문 (FAQ)

Q. Z-Image Base는 정상인데 Z+Z만 안 되는 이유는?
A. fp16_accumulation 옵션이 Base 모델의 수치 안정성을 먼저 무너뜨리기 때문입니다. Base 단독으로도 테스트해보면 검은 화면이 나타나는 것을 확인할 수 있습니다.
Q. ZiT steps를 45로 하면 왜 정상처럼 보이나요?
A. FP16 누적 오차가 여러 step에 분산되어 NaN이 한 번에 폭발하지 않고 가려질 뿐입니다. 근본 해결이 아니며, Turbo의 장점도 사라집니다.
Q. VAE를 ae.safetensors로 바꾸면 해결되나요?
A. VAE 명시 연결은 필수 조건이지만, fp16_accumulation 문제가 있으면 여전히 오류가 발생합니다. 두 가지를 모두 해결해야 합니다.
Q. 속도 최적화를 위해 다른 옵션을 써도 되나요?
A. Z-Image/Z+Z가 완전히 안정적으로 동작하는 것을 확인한 뒤에 torch.compile이나 다른 최적화 옵션을 하나씩 추가하는 것을 권장합니다.

Z+Z가 깨진 원인은 모델도, 노드도 아닌
--fast fp16_accumulation이라는 단 한 줄의 배치 옵션이었습니다.
반응형

댓글