Apple Silicon에서 Stable Diffusion Core ML – 실행 및 최적화 방법

TL;DR

Hugging Face는 Apple Silicon에서 로컬로 실행되는 Stable Diffusion (v1.4, v1.5, v2‑base, v2.1‑base)의 Core ML 버전을 공개했으며, Python 및 Swift 추론 스크립트와 바로 사용할 수 있는 Mac App Store 앱을 제공했습니다.


사용 가능한 Core ML 체크포인트

  • Stable Diffusion v1.4apple/coreml-stable-diffusion-v1-4에 변환된 모델.
  • Stable Diffusion v1.5apple/coreml-stable-diffusion-v1-5에 변환된 모델.
  • Stable Diffusion v2 baseapple/coreml-stable-diffusion-2-base에 변환된 모델.
  • Stable Diffusion v2.1 baseapple/coreml-stable-diffusion-2-1-base에 변환된 모델.

모든 체크포인트는 Hugging Face Hub에 호스팅되어 있으며, CPU, GPU 또는 Apple Neural Engine(NE)를 사용하는 모든 Apple Silicon 기기에서 실행할 수 있습니다. 하드웨어 및 언어별 요구에 맞게 다양한 변형(어텐션 구현 및 패키징)이 제공됩니다.


성능 변형 및 권장 사항

  • Attention 구현original(CPU/GPU 전용, 때때로 더 빠름)와 split_einsum(CPU, GPU, NE와 호환). 장치 성능에 따라 선택하세요.
  • 패키징 – Python 추론용 packages; Swift용 compiled(대형 UNet을 여러 .mlmodelc 파일로 분할하여 iOS/iPadOS와 호환).
  • 최상의 벤치마크 – macOS Ventura 13.1 Beta 4가 설치된 MacBook Pro (M1 Max, GPU 코어 32개, RAM 64 GB)에서 original 어텐션과 모든 연산 유닛을 사용하면 Stable Diffusion v1.4가 이미지를 18초에 생성합니다.

⚠️ Note macOS Ventura 13.1은 이러한 모델에 필요한 Core ML 개선 사항을 도입했으며, 이전 macOS 버전에서는 검은 이미지가 나오거나 실행 속도가 느릴 수 있습니다.


Python 추론 워크플로우

사전 요구 사항

pip install huggingface_hub
pip install git+https://github.com/apple/ml-stable-diffusion

체크포인트 다운로드

from huggingface_hub import snapshot_download
from pathlib import Path

repo_id = "apple/coreml-stable-diffusion-v1-4"
variant = "original/packages"
model_path = Path("./models") / (repo_id.split('/')[-1] + "_" + variant.replace('/', '_'))
snapshot_download(repo_id, allow_patterns=f"{variant}/*", local_dir=model_path, local_dir_use_symlinks=False)
print(f"Model downloaded at {model_path}")

추론 실행

python -m python_coreml_stable_diffusion.pipeline \
  --prompt "a photo of an astronaut riding a horse on mars" \
  -i models/coreml-stable-diffusion-v1-4_original_packages \
  -o ./output.png \
  --compute-unit ALL \
  --seed 93
  • --compute-unit 옵션: ALL, CPU_AND_GPU, CPU_ONLY, CPU_AND_NE.
  • 다른 체크포인트를 사용하려면 --model-version <hub-id>를 추가하세요(예: runwayml/stable-diffusion-v1-5).

Swift 추론 워크플로우

컴파일된 체크포인트 다운로드

from huggingface_hub import snapshot_download
from pathlib import Path

repo_id = "apple/coreml-stable-diffusion-v1-4"
variant = "original/compiled"
model_path = Path("./models") / (repo_id.split('/')[-1] + "_" + variant.replace('/', '_'))
snapshot_download(repo_id, allow_patterns=f"{variant}/*", local_dir=model_path, local_dir_use_symlinks=False)
print(f"Model downloaded at {model_path}")

추론 실행

git clone https://github.com/apple/ml-stable-diffusion
cd ml-stable-diffusion
swift run StableDiffusionSample \
  --resource-path models/coreml-stable-diffusion-v1-4_original_compiled \
  --compute-units all \
  "a photo of an astronaut riding a horse on mars"
  • --compute-units 값: all, cpuOnly, cpuAndGPU, cpuAndNeuralEngine.
  • 컴파일된 모델은 앱 시작 시 더 빠르게 로드되어 이후 이미지 생성 시 약간 낮은 지연 시간을 제공합니다.

커스텀 모델 변환 (Bring‑Your‑Own‑Model)

Fine‑tuned하거나 다른 방식으로 커스텀한 Stable Diffusion 모델(예: DreamBooth, Textual Inversion)이 있다면 Apple의 변환 스크립트를 직접 실행해야 합니다. Apple 저장소의 공식 안내를 따르세요: https://github.com/apple/ml-stable-diffusion#converting-models-to-coreml.


다음 단계 및 커뮤니티 기회

  • 이미지 생성을 완전히 온‑디바이스에서 수행하는 macOS, iPhone, iPad 네이티브 애플리케이션을 구축합니다.
  • Swift에서 추가 스케줄러를 통합하여 샘플링 속도를 높입니다.
  • 파이프라인을 다른 생성 작업(예: 인페인팅, 업스케일링)으로 확장합니다.
  • 양자화 및 기타 최적화를 탐색하여 지연 시간과 메모리 사용량을 더욱 줄입니다.

배포된 Core ML 체크포인트와 도구는 개발자가 Apple Silicon에서 Stable Diffusion을 활용하는 장벽을 낮추어, 프라이버시를 보호하고 오프라인에서 작동하는 생성 AI 경험을 가능하게 합니다.

Sources