Python에서 FLUX.1-dev GGUF Q8 실행
GGUF 양자화로 FLUX.1-dev 가속화
FLUX.1-dev 은 텍스트에서 이미지를 생성하는 강력한 모델로, 놀라운 결과를 제공하지만 24GB 이상의 메모리 요구 사항으로 인해 많은 시스템에서 실행하기 어렵습니다. GGUF quantization of FLUX.1-dev 은 메모리 사용량을 약 50% 줄이며 우수한 이미지 품질을 유지하는 해결책을 제공합니다.
이 이미지는 GGUF 형식으로 Q8 양자화된 FLUX.1-dev 모델을 사용하여 생성되었으며, 메모리 사용량이 줄어든 상태에서도 품질이 유지됨을 보여줍니다.
GGUF 양자화란 무엇인가요?
GGUF(GPT-Generated Unified Format)는 언어 모델을 위해 처음 개발된 양자화 형식이지만, FLUX와 같은 확산 모델에도 지원됩니다. 양자화는 가중치를 8비트, 6비트, 또는 4비트와 같은 더 낮은 정밀도 형식으로 저장함으로써 모델 크기를 줄입니다. 이는 전체 16비트 또는 32비트 정밀도 대신 사용됩니다.
FLUX.1-dev의 경우, 모델의 가장 큰 부분인 트랜스포머 구성 요소를 양자화할 수 있으며, Q8_0 양자화를 사용하면 메모리 사용량이 약 24GB에서 12GB로 줄어들고, 더 강력한 양자화 수준을 사용하면 더 낮은 수준으로 줄어들 수 있습니다.
GGUF 양자화의 이점
GGUF 양자화된 FLUX 모델을 사용하는 주요 이점은 다음과 같습니다:
- 메모리 사용량 감소: VRAM 요구 사항을 절반으로 줄여, 더 많은 하드웨어에서 FLUX.1-dev를 사용할 수 있습니다.
- 품질 유지: Q8_0 양자화는 거의 눈에 띄지 않는 차이를 보이며 이미지 품질을 유지합니다.
- 빠른 로딩: 파일 크기가 작아지므로 양자화된 모델이 더 빠르게 로드됩니다.
- 전력 소비 감소: 메모리 사용량이 줄어들면 추론 중 전력 소비도 줄어듭니다.
우리의 테스트에서 양자화된 모델은 전체 모델에 비해 약 12-15GB의 VRAM을 사용하지만, 생성 시간은 유사합니다.
설치 및 설정
GGUF 양자화된 FLUX.1-dev를 사용하려면 표준 diffusers 의존성 외에도 gguf 패키지가 필요합니다. 이미 FLUX for text-to-image generation을 사용하고 있다면 기본 설정에 익숙할 것입니다.
uv as your Python package manager를 사용 중이라면 다음 명령어로 필요한 패키지를 설치할 수 있습니다:
uv pip install -U diffusers torch transformers gguf
또는 표준 pip를 사용하여 설치할 수 있습니다:
pip install -U diffusers torch transformers gguf
구현
GGUF 양자화된 모델을 사용할 때의 주요 차이점은 FluxTransformer2DModel.from_single_file()을 사용하여 트랜스포머를 별도로 로드하고 GGUFQuantizationConfig를 전달하는 것입니다. 이후 파이프라인에 전달합니다. Python 구문에 대한 빠른 참조가 필요하다면 Python Cheatsheet를 확인하세요. 다음은 완전한 작동 예시입니다:
import os
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig
# 경로
gguf_model_path = "/path/to/flux1-dev-Q8_0.gguf"
base_model_path = "/path/to/FLUX.1-dev-config" # 구성 파일만
# GGUF 양자화된 트랜스포머 로드
print(f"Loading GGUF quantized transformer from: {gguf_model_path}")
transformer = FluxTransformer2DModel.from_single_file(
gguf_model_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
config=base_model_path,
subfolder="transformer",
torch_dtype=torch.bfloat16,
)
# 양자화된 트랜스포머와 파이프라인 생성
print(f"Creating pipeline with base model: {base_model_path}")
pipe = FluxPipeline.from_pretrained(
base_model_path,
transformer=transformer,
torch_dtype=torch.bfloat16,
)
# CPU 오프로딩 활성화 (GGUF 사용 시 필수)
pipe.enable_model_cpu_offload()
# 참고: enable_sequential_cpu_offload()는 GGUF와 호환되지 않습니다.
# 이미지 생성
prompt = "A futuristic cityscape at sunset with neon lights"
image = pipe(
prompt,
height=496,
width=680,
guidance_scale=3.5,
num_inference_steps=60,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(42)
).images[0]
image.save("output.jpg")
중요한 고려 사항
모델 구성 파일
GGUF 양자화를 사용할 때 원래 FLUX.1-dev 모델의 구성 파일이 여전히 필요합니다. 이는 다음과 같습니다:
model_index.json- 파이프라인 구조- 구성 파일 (트랜스포머, text_encoder, text_encoder_2, vae, scheduler)
- 토크나이저 파일
- 텍스트 인코더 및 VAE 가중치 (이들은 양자화되지 않음)
트랜스포머 가중치는 GGUF 파일에서 가져오지만, 다른 구성 요소는 원래 모델 파일이 필요합니다.
CPU 오프로딩 호환성
중요: enable_sequential_cpu_offload()는 GGUF 양자화된 모델과 호환되지 않으며 KeyError: None 오류를 발생시킵니다. 저는 양자화된 트랜스포머를 사용할 때 enable_model_cpu_offload()만 사용하고 있습니다.
양자화 수준
FLUX.1-dev에 사용 가능한 양자화 수준은 다음과 같습니다:
- Q8_0: 최고 품질, 약 14-15GB 메모리 (추천)
- Q6_K: 좋은 균형, 약 12GB 메모리
- Q4_K: 최대 압축, 약 8GB 메모리 (품질에 악영향을 줄 것으로 추정)
대부분의 사용 사례에서 Q8_0은 메모리 절약과 이미지 품질 사이에서 최적의 균형을 제공합니다.
성능 비교
동일한 프롬프트와 설정으로 테스트한 결과는 다음과 같습니다:
| 모델 | VRAM 사용량 | 생성 시간 | 품질 |
|---|---|---|---|
| 전체 FLUX.1-dev | 24GB | 큰 GPU가 없음 | 우수 (추정) |
| 전체 FLUX.1-dev | ~3GB (sequential_cpu_offload() 사용) | ~329s | 우수 |
| GGUF Q8_0 | ~14-15GB | ~98s !!! | 우수 |
| GGUF Q6_K | ~10-12GB | ~116s | 매우 좋음 |
양자화된 모델은 이제 더 적은 CPU 오프로딩이 필요하기 때문에, 메모리 사용량이 크게 줄어들면서 생성 속도가 3배 이상 빨라져, 제한된 VRAM을 가진 시스템에서도 실용적으로 사용할 수 있습니다.
다음 프롬프트로 두 모델 모두 테스트했습니다:
A futuristic close-up of a transformer inference ASIC chip with intricate circuitry, glowing blue light emitting from dense matrix multiply units and low-precision ALUs, surrounded by on-chip SRAM buffers and quantization pipelines, rendered in hyper-detailed photorealistic style with a cold, clinical lighting scheme.
FLUX.1-dev Q8의 샘플 출력은 이 게시물의 표지 이미지입니다 - 위에 보입니다.
비양자화된 FLUX.1-dev의 샘플 출력은 다음과 같습니다:

품질 차이를 거의 보지 못했습니다.
결론
GGUF 양자화는 모델이 알려진 고품질 이미지 생성을 유지하면서도 더 넓은 범위의 하드웨어에 FLUX.1-dev를 사용할 수 있도록 합니다. 메모리 요구 사항을 약 50% 줄임으로써, 고성능 텍스트에서 이미지 생성을 더 저렴한 하드웨어에서도 실행할 수 있습니다.
diffusers 라이브러리와 함께 구현은 표준 FLUX 파이프라인 설정에 대한 약간의 변경만 필요합니다. 대부분의 사용자에게 Q8_0 양자화는 메모리 효율성과 이미지 품질 사이에서 최적의 균형을 제공합니다.
FLUX.1-Kontext-dev for image augmentation을 사용 중이라면, 미래에는 유사한 양자화 기술이 제공될 수 있습니다.
관련 기사
- Flux text to image - guide to using FLUX.1-dev for text-to-image generation
- FLUX.1-Kontext-dev: Image Augmentation AI Model
- uv - New Python Package, Project, and Environment Manager
- Python Cheatsheet
참고문헌
- HuggingFace Diffusers GGUF Documentation - diffusers와 함께 GGUF를 사용하는 공식 문서
- Unsloth FLUX.1-dev-GGUF - FLUX.1-dev를 위한 사전 양자화된 GGUF 모델
- Black Forest Labs FLUX.1-dev - 원래 FLUX.1-dev 모델 저장소
- GGUF Format Specification - GGUF 형식에 대한 기술적 세부 정보