FLUX
FLUX
FLUX는 Black Forest Labs의 rectified-flow 이미지 모델 제품군이에요. FLUX.1-dev는 더 작은 12B 텍스트-이미지 체크포인트이고, FLUX.2-dev는 명령 기반 편집과 단일·다중 레퍼런스 합성을 추가한 32B 모델이에요. 프롬프트 준수, 세련된 이미지 품질, 레퍼런스 일관성이 중요할 때 FLUX는 강력한 기본 선택이에요.
트레이드오프는 배포 무게예요. FLUX.2는 FLUX.1보다 훨씬 많은 메모리가 필요하고, dev 체크포인트는 FLUX 비상업 라이선스를 사용하므로 프로덕션 사용 전에 모델 라이선스를 검토하세요. SGLang은 NVIDIA B200, H200, H100, AMD MI355X, MI325X, MI300X GPU, Ascend A2/A3 NPU, Intel Arc B-series에서 FLUX 서빙을 지원해요.
출처: 문서
본문
1. 모델 소개
FLUX는 Black Forest Labs의 rectified-flow 이미지 모델 제품군이에요. FLUX.1-dev는 더 작은 12B 텍스트-이미지 체크포인트이고, FLUX.2-dev는 명령 기반 편집과 단일·다중 레퍼런스 합성을 추가한 32B 모델이에요.
프롬프트 준수, 세련된 이미지 품질, 레퍼런스 일관성이 중요할 때 FLUX는 강력한 기본값이에요. 트레이드오프는 배포 무게예요. FLUX.2는 FLUX.1보다 훨씬 많은 메모리가 필요하며, dev 체크포인트는 FLUX 비상업 라이선스를 사용하므로 프로덕션 사용 전에 모델 라이선스를 검토하세요.
| Checkpoint | Best fit | Main limitation |
|---|---|---|
black-forest-labs/FLUX.1-dev |
더 가벼운 FLUX 배포로 고품질 텍스트-이미지 | 네이티브 다중 레퍼런스 편집 경로 없음 |
black-forest-labs/FLUX.2-dev |
하나의 모델로 텍스트-이미지, 편집, 레퍼런스 유도 합성 | 더 큰 메모리 풋프린트의 32B 모델 |
2. SGLang-diffusion 설치
SGLang-diffusion은 여러 설치 방법을 제공해요. 하드웨어 플랫폼과 요구사항에 따라 가장 적합한 방법을 선택할 수 있어요.
설치 지침은 공식 SGLang-diffusion 설치 가이드를 참조하세요.
3. 모델 배포
이 절은 하드웨어 플랫폼과 사용 사례별로 최적화된 배포 구성을 제공해요.
3.1 기본 구성
FLUX 모델은 고품질 이미지 생성에 최적화되어 있어요. 권장 실행 구성은 하드웨어와 모델 버전에 따라 달라져요.
인터랙티브 명령 생성기: 아래 구성 선택기를 사용해 하드웨어 플랫폼과 모델 버전에 맞는 배포 명령을 자동 생성하세요. SGLang은 NVIDIA B200, H200, H100, AMD MI355X, MI325X, MI300X GPU, Ascend A2/A3 NPU 시리즈, Intel Arc B-series(codename: BMG (Battlemage))에서 FLUX 서빙을 지원해요.
3.2 구성 팁
가속 기능과 런타임 요구사항은 Performance Optimization을 참조하세요.
--vae-path: 커스텀 VAE 모델이나 HuggingFace 모델 ID 경로 (예: fal/FLUX.2-Tiny-AutoEncoder). 지정하지 않으면 VAE가 메인 모델 경로에서 로드돼요.--num-gpus: 사용할 GPU 수--tp-size: 텐서 병렬 처리 크기 (인코더 전용. 텍스트 인코더 오프로드가 활성화되면 레이어별 오프로드 + prefetch가 더 빠르므로 1보다 크면 안 됨)--sp-degree: 시퀀스 병렬 처리 크기 (보통 GPU 수와 일치해야 함)--ulysses-degree: USP에서 DeepSpeed-Ulysses 스타일 SP의 정도--ring-degree: USP에서 ring attention 스타일 SP의 정도
3.3 FLUX.1-dev용 Breakable CUDA graph
반복적인 quality=lossless 요청에서 FLUX.1-dev는 네이티브 백엔드로 breakable CUDA graph(BCG) 실행을 지원해요. BCG는 시작 시 DiT 세그먼트를 캡처하고 워밍업된 해상도에 대해 이를 재생해요. torch.compile을 켜지 않고도 반복적인 호스트 실행 오버헤드를 줄일 수 있어요.
다음 구성은 BF16 가중치, PyTorch 2.13, CUDA 13.0으로 두 NVIDIA H200 GPU에서 검증됐어요. 다운로드 전에 체크포인트 접근 권한이 있는 Hugging Face 토큰으로 HF_TOKEN을 설정하세요.
CUDA_VISIBLE_DEVICES=0,1 sglang generate \
--model-path black-forest-labs/FLUX.1-dev \
--backend sglang \
--num-gpus 2 --tp-size 2 \
--component-residency dit=resident \
--enable-torch-compile false \
--enable-breakable-cuda-graph \
--warmup-resolutions 1024x1024 \
--quality lossless \
--width 1024 --height 1024 \
--num-inference-steps 50 --guidance-scale 3.5 --seed 42 \
--prompt "A futuristic cyberpunk city at night, neon lights reflecting on wet streets"
로그에서 [Diffusion BCG] captured를 확인한 다음, 같은 GPU에서 eager 실행과 워밍업된 요청 지연 시간을 비교하세요. 캡처 시간과 그래프 메모리는 추가 시작 비용이에요. 다른 서빙 해상도를 --warmup-resolutions에 추가하세요. 캡처되지 않은 서명의 요청은 eager로 폴백돼요.
FLUX.1-dev는 고정 512-token T5 conditioning 시퀀스를 사용하므로 --bcg-text-buckets를 바꿔도 추가 프롬프트 길이 그래프가 생기지 않아요. quality=high와 extra-high에서 요청 게이트 DiT 퓨전은 BCG와 결합할 수 없어요. 캡처된 그래프가 lossless 브랜치를 사용하므로 런타임이 그 요청들을 거부해요. FLUX.2와 양자화 트랜스포머 오버라이드는 별도 검증이 필요해요.
4. API 사용
전체 API 문서는 공식 API 사용 가이드를 참조하세요.
4.1 이미지 생성
from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://localhost:3000/v1")
response = client.images.generate(
model="black-forest-labs/FLUX.1-dev",
prompt="A cat holding a sign that says hello world",
size="1024x1024",
n=1,
response_format="b64_json",
)
# Save the generated image
image_bytes = base64.b64decode(response.data[0].b64_json)
with open("output.png", "wb") as f:
f.write(image_bytes)
4.2 고급 사용
4.2.1 Cache-DiT 가속
SGLang은 Diffusion Transformer(DiT)용 캐싱 가속 엔진인 Cache-DiT를 통합해 최소한의 품질 손실로 최대 7.4배 추론 가속을 달성해요. SGLANG_CACHE_DIT_ENABLED=True를 설정해 활성화할 수 있어요. 자세한 내용은 SGLang Cache-DiT 문서를 참조하세요.
기본 사용
SGLANG_CACHE_DIT_ENABLED=true sglang serve --model-path black-forest-labs/FLUX.1-dev
고급 사용
- DBCache 파라미터: DBCache는 블록 단위 캐싱 동작을 제어해요:
| Parameter | Env Variable | Default | Description |
|---|---|---|---|
| Fn | SGLANG_CACHE_DIT_FN |
1 | 항상 계산할 첫 블록 수 |
| Bn | SGLANG_CACHE_DIT_BN |
0 | 항상 계산할 마지막 블록 수 |
| W | SGLANG_CACHE_DIT_WARMUP |
4 | 캐싱 시작 전 warmup step 수 |
| R | SGLANG_CACHE_DIT_RDT |
0.24 | 잔차 차이 임계값 |
| MC | SGLANG_CACHE_DIT_MC |
3 | 최대 연속 캐시 step 수 |
- TaylorSeer 구성: TaylorSeer는 테일러 전개로 캐싱 정확도를 높여요:
| Parameter | Env Variable | Default | Description |
|---|---|---|---|
| Enable | SGLANG_CACHE_DIT_TAYLORSEER |
false | TaylorSeer calibrator 활성화 |
| Order | SGLANG_CACHE_DIT_TS_ORDER |
1 | 테일러 전개 차수 (1 또는 2) |
결합 구성 예제:
SGLANG_CACHE_DIT_ENABLED=true \
SGLANG_CACHE_DIT_FN=2 \
SGLANG_CACHE_DIT_BN=1 \
SGLANG_CACHE_DIT_WARMUP=4 \
SGLANG_CACHE_DIT_RDT=0.4 \
SGLANG_CACHE_DIT_MC=4 \
SGLANG_CACHE_DIT_TAYLORSEER=true \
SGLANG_CACHE_DIT_TS_ORDER=2 \
sglang serve --model-path black-forest-labs/FLUX.1-dev
4.2.2 CPU 오프로드
--dit-cpu-offload: DiT 추론에 CPU 오프로드 사용. 메모리가 부족하면 활성화.--text-encoder-cpu-offload: 텍스트 인코더 추론에 CPU 오프로드 사용.--vae-cpu-offload: VAE에 CPU 오프로드 사용.--pin-cpu-memory: CPU 오프로드용 메모리 고정. "CUDA error: invalid argument"가 발생할 때만 임시 해결책으로 추가.
4.2.3 알려진 LoRA 예제
시작 시 --lora-path 또는 LoRA 관리 API로 어댑터를 로드하세요. 알려진 FLUX 예제:
5. 벤치마크
5.1 속도 향상 벤치마크
5.1.1 이미지 생성
테스트 환경:
- 하드웨어: NVIDIA B200 GPU (1x)
- 모델: black-forest-labs/FLUX.1-dev
- sglang diffusion 버전: 0.5.6.post2
NVIDIA B200:
서버 명령:
sglang serve --model-path black-forest-labs/FLUX.1-dev --port 30000
벤치마크 명령:
python3 -m sglang.multimodal_gen.benchmarks.bench_serving \
--dataset vbench --task text-to-image --num-prompts 1 --max-concurrency 1
결과:
================= Serving Benchmark Result =================
Model: black-forest-labs/FLUX.1-dev
Dataset: vbench
Task: text-to-image
--------------------------------------------------
Benchmark duration (s): 50.97
Request rate: inf
Max request concurrency: 1
Successful requests: 1/1
--------------------------------------------------
Request throughput (req/s): 0.02
Latency Mean (s): 50.9681
Latency Median (s): 50.9681
Latency P99 (s): 50.9681
--------------------------------------------------
Peak Memory Max (MB): 27905.19
Peak Memory Mean (MB): 27905.19
Peak Memory Median (MB): 27905.19
============================================================
Ascend A3 Series:
서버 명령:
#One A3 Series card has 2 npu chips
sglang serve --tp-size 2 --sp-degree 1 --model-path black-forest-labs/FLUX.1-dev --num-gpus 2
벤치마크 명령:
python -m sglang.multimodal_gen.benchmarks.bench_serving --dataset vbench --task text-to-image --num-prompts 1 --max-concurrency 1
결과:
================= Serving Benchmark Result =================
Task: text-to-image
Model: black-forest-labs/FLUX.1-dev
Dataset: vbench
--------------------------------------------------
Benchmark duration (s): 16.30
Request rate: inf
Max request concurrency: 1
Successful requests: 1/1
Completed outputs: 1
Outputs per prompt: 1
--------------------------------------------------
Request throughput (req/s): 0.06
Output throughput (outputs/s): 0.06
Latency Mean (s): 16.30
Latency Median (s): 16.30
Latency P90 (s): 16.30
Latency P95 (s): 16.30
Latency P99 (s): 16.30
--------------------------------------------------
Peak Memory Max (MB): 19972.00
Peak Memory Mean (MB): 19972.00
Peak Memory Median (MB): 19972.00
------------------------------------------------------------
5.1.2 고동시성 이미지 생성
NVIDIA B200 :
서버 명령 :
sglang serve --model-path black-forest-labs/FLUX.1-dev --port 30000
벤치마크 명령 :
python3 -m sglang.multimodal_gen.benchmarks.bench_serving \
--dataset vbench --task text-to-image --num-prompts 20 --max-concurrency 20
결과 :
================= Serving Benchmark Result =================
Model: black-forest-labs/FLUX.1-dev
Dataset: vbench
Task: text-to-image
--------------------------------------------------
Benchmark duration (s): 111.79
Request rate: inf
Max request concurrency: 20
Successful requests: 20/20
--------------------------------------------------
Request throughput (req/s): 0.18
Latency Mean (s): 67.0646
Latency Median (s): 66.9691
Latency P99 (s): 110.8949
--------------------------------------------------
Peak Memory Max (MB): 27917.19
Peak Memory Mean (MB): 27916.59
Peak Memory Median (MB): 27917.19
============================================================
Ascend A3 Series :
서버 명령 :
#One A3 Series card has 2 npu chips
sglang serve --tp-size 2 --sp-degree 1 --model-path black-forest-labs/FLUX.1-dev --num-gpus 2
벤치마크 명령 :
python -m sglang.multimodal_gen.benchmarks.bench_serving --dataset vbench --task text-to-image --num-prompts 20 --max-concurrency 20
결과 :
================= Serving Benchmark Result =================
Task: text-to-image
Model: black-forest-labs/FLUX.1-dev
Dataset: vbench
--------------------------------------------------
Benchmark duration (s): 300.85
Request rate: inf
Max request concurrency: 20
Successful requests: 18/20
Completed outputs: 18
Outputs per prompt: 1
--------------------------------------------------
Request throughput (req/s): 0.06
Output throughput (outputs/s): 0.06
Latency Mean (s): 155.16
Latency Median (s): 155.11
Latency P90 (s): 266.30
Latency P95 (s): 280.15
Latency P99 (s): 291.23
--------------------------------------------------
Peak Memory Max (MB): 19972.00
Peak Memory Mean (MB): 19972.00
Peak Memory Median (MB): 19972.00
------------------------------------------------------------