콘텐츠로 이동

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 추론 구현체입니다.

이 프로젝트는 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 바이너리를 사이드카 프로세스로 번들합니다. 디퓨전 모델을 로드하면:

  1. 앱이 sd-server를 전용 백그라운드 프로세스로 시작합니다.

  2. OpenAI 호환 /v1/images/generations API 엔드포인트를 제공합니다.

  3. 여러 디퓨전 모델을 동시에 로드할 수 있습니다 (LRU 제거 정책이 적용된 풀 관리).

  4. 헬스 체크와 자동 정리를 통해 프로세스가 완전히 관리됩니다.

포트 관리

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 커뮤니티의 혁신적인 작업을 통해 로컬 이미지 생성을 가능하게 합니다.