6.5. stable-diffusion.cpp 가속¶
stable-diffusion.cpp는 Backend.AI GO에 로컬 이미지 생성 기능을 제공합니다. llama.cpp가 로컬 LLM 추론에 혁신을 가져온 것처럼, stable-diffusion.cpp는 사용자의 하드웨어에서 직접 효율적이고 고품질의 이미지 생성을 가능하게 합니다.
stable-diffusion.cpp란?¶
stable-diffusion.cpp는 소비자 하드웨어에 최적화된 순수 C/C++ Stable Diffusion 추론 구현체입니다.
-
개발자: leejet (@leejet)
이 프로젝트는 llama.cpp와 동일한 철학을 이미지 생성에 적용합니다: 최소한의 의존성, 최대한의 효율성, 그리고 광범위한 하드웨어 호환성.
특별한 점¶
1. 크로스 플랫폼 효율성¶
llama.cpp처럼, stable-diffusion.cpp는 Python이나 대형 ML 프레임워크에 대한 의존성 없이 Windows, macOS, Linux에서 작동하는 자체 완결형 솔루션입니다.
2. 하드웨어 가속¶
다양한 가속 백엔드를 지원합니다:
| 플랫폼 | 백엔드 | 설명 |
|---|---|---|
| macOS | Metal | Apple Silicon (M1-M5) 최적화, 통합 메모리 지원 |
| Windows | CUDA | NVIDIA GPU로 고성능 발휘 |
| Windows | Vulkan | 크로스 벤더 GPU 지원 (AMD, Intel, NVIDIA) |
| Linux | CUDA / ROCm | NVIDIA 및 AMD GPU 지원 |
| CPU | AVX2 / AVX-512 | 모든 기기에서 작동하는 폴백 옵션 |
3. 메모리 효율성¶
메모리 맵핑 로딩과 효율적인 메모리 관리를 사용하여 제한된 VRAM을 가진 시스템에서도 디퓨전 모델을 실행할 수 있습니다.
지원 모델 유형¶
Backend.AI GO는 stable-diffusion.cpp를 통해 다양한 디퓨전 모델 아키텍처를 지원합니다:
| 모델 유형 | 설명 | 일반적인 크기 |
|---|---|---|
| SD 1.x | 오리지널 Stable Diffusion (1.4, 1.5) | ~2-4 GB |
| SD 2.x | Stable Diffusion 2.0, 2.1 | ~4-5 GB |
| SDXL | Stable Diffusion XL | ~6-7 GB |
| SD3 | Stable Diffusion 3 / 3.5 (다중 파일: CLIP-L + CLIP-G + T5-XXL) | ~10+ GB |
| Flux | Black Forest Labs의 Flux 아키텍처 (다중 파일: VAE + CLIP-L + T5-XXL) | ~12+ GB |
| Chroma | Flux 파생 아키텍처 (다중 파일: VAE + T5-XXL) | ~10+ GB |
| Qwen-Image | 알리바바의 Qwen 이미지 생성 모델 (다중 파일: VAE + Qwen2.5-VL 인코더) | 다양함 |
| Z-Image | Z-Image / Z-Image Turbo (다중 파일: VAE + Qwen3-4B 인코더) | ~5+ GB |
Backend.AI GO에서의 역할¶
통합 방식¶
Backend.AI GO는 sd-server 바이너리를 사이드카 프로세스로 번들합니다. 디퓨전 모델을 로드하면:
-
앱이
sd-server를 전용 백그라운드 프로세스로 시작합니다. -
OpenAI 호환
/v1/images/generationsAPI 엔드포인트를 제공합니다. -
여러 디퓨전 모델을 동시에 로드할 수 있습니다 (LRU 제거 정책이 적용된 풀 관리).
-
헬스 체크와 자동 정리를 통해 프로세스가 완전히 관리됩니다.
포트 관리¶
sd-server 풀은 llama-server 풀과 별도로 39100-39119 포트를 사용합니다. 이를 통해 포트 충돌 없이 텍스트 생성과 이미지 생성을 동시에 실행할 수 있습니다.
주요 설정¶
Backend.AI GO에서 이미지 생성을 설정할 때:
-
GPU 레이어: GPU로 오프로드할 레이어 수를 제어합니다. 최대 속도를 위해
-1을 사용하면 모든 레이어를 오프로드합니다. -
스레드: 사용할 CPU 스레드 수. 지정하지 않으면 자동 감지됩니다.
-
CFG 스케일: Classifier-Free Guidance 스케일 (일반적으로 7.0-8.0). 높은 값은 프롬프트를 더 충실히 따릅니다.
-
샘플링 스텝: 스텝이 많을수록 품질이 높아지지만 생성 속도가 느려집니다. 20-30이 좋은 균형점입니다.
-
샘플러: 샘플링 알고리즘 (euler, eulera, dpm++2m 등).
euler_a가 좋은 기본값입니다.
지원 포맷¶
Backend.AI GO는 다음 형식의 디퓨전 모델을 지원합니다:
-
.safetensors: 권장 형식. 안전하고, 빠르게 로드되며, 널리 지원됩니다. -
.ckpt: 레거시 체크포인트 형식. 작동하지만 safetensors를 권장합니다. -
.gguf: 메모리 사용량을 줄이기 위한 양자화 형식.
모델 구성 요소¶
다중 파일 모델(SD3, Flux, Chroma, Qwen-Image, Z-Image)은 메인 디퓨전 모델과 함께 하나 이상의 보조 파일을 로드합니다:
-
VAE: 이미지 인코딩/디코딩을 위한 Variational Auto-Encoder (Flux, Chroma, Qwen-Image, Z-Image).
-
CLIP-L: CLIP 텍스트 인코더 (SDXL, SD3, Flux).
-
CLIP-G: 두 번째 CLIP 텍스트 인코더 (SDXL, SD3).
-
T5-XXL: T5 텍스트 인코더 (SD3, Flux, Chroma).
-
LLM: LLM 텍스트 인코더 — Qwen-Image는 Qwen2.5-VL, Z-Image는 Qwen3-4B.
모델의 구성 요소(Components) 탭에서 Backend.AI GO는 각 다중 파일 모델에 필요한 보조 파일을 보여주고, 누락된 파일을 한 번의 클릭으로 다운로드하며, 모델을 로드하기 전에 필요한 모든 파일이 있는지 검증합니다.
공유 보조 파일 저장소¶
보조 파일은 단일 공유 저장소에 보관되며 한 번만 다운로드한 뒤 이를 필요로 하는 모든 모델에서 재사용됩니다. 예를 들어 VAE, CLIP-L, T5-XXL 인코더는 Flux, Chroma, SD3에서 공유되므로, 한 모델을 위해 t5xxl_fp16.safetensors를 한 번 다운로드하면 이를 필요로 하는 다른 모든 모델이 다시 다운로드하지 않고 같은 파일을 재사용합니다. 모델 옆 디스크에 직접 배치한 보조 파일을 지정할 수도 있습니다.
Backend.AI GO는 leejet과 stable-diffusion.cpp 커뮤니티의 혁신적인 작업을 통해 로컬 이미지 생성을 가능하게 합니다.