snow · 2026.5.18 00:00 · 조회 3

Stable Diffusion 3.5 설치 및 사용 가이드 (Mac)

Stable Diffusion

개요

이 가이드는 Apple Silicon(M1/M2/M3/M4) Mac에서 Stable Diffusion 3.5를 HuggingFace diffusers 라이브러리를 이용해 설치하고 로컬에서 실행하는 방법을 설명한다. Mac은 CUDA GPU가 없으므로 Apple의 Metal Performance Shaders(MPS) 백엔드를 통해 GPU 가속을 활용한다.

참고: SD 3.5 Large(8.1B)는 대용량 모델이라 Mac 통합 메모리 32GB 이상을 권장한다. 메모리가 부족한 경우 SD 3.5 Medium(2.5B) 사용을 권장한다.


사전 요구사항

하드웨어

  • Apple Silicon Mac (M1 / M2 / M3 / M4 계열)
  • 통합 메모리: SD 3.5 Medium — 최소 16GB (권장 24GB), SD 3.5 Large — 32GB 이상
  • 저장 공간: SD 3.5 Large 약 18GB, Medium 약 7GB

소프트웨어

  • macOS 12.6 이상 (macOS 13.0 이상 권장)
  • Python 3.9 이상 (arm64 네이티브 버전)
  • PyTorch 2.0 이상

Python 설치 확인

Homebrew로 설치한 Python 또는 공식 python.org arm64 인스톨러를 사용해야 한다. Rosetta(x86 에뮬레이션)로 실행되는 Python은 MPS 가속이 불가능하다.

1# Python 아키텍처 확인 (arm64 여야 함)2python3 -c "import platform; print(platform.machine())"3# 출력: arm64

HuggingFace 토큰 발급

SD 3.5 모델은 HuggingFace에서 라이선스에 동의한 후 다운로드할 수 있다.

  1. HuggingFace에 회원가입 또는 로그인
  2. 사용할 모델 페이지 접속 후 라이선스 동의:
  3. Settings → Access Tokens에서 Read 권한 토큰 발급
  4. 터미널에서 토큰 설정:
1pip install huggingface_hub2huggingface-cli login3# 프롬프트에 토큰 붙여넣기

설치 방법

1. 가상 환경 생성 (권장)

1python3 -m venv sd35-env2source sd35-env/bin/activate

2. PyTorch 설치

1# PyTorch (MPS 지원 포함)2pip install torch torchvision torchaudio

3. diffusers 및 의존성 설치

1pip install -U diffusers transformers accelerate safetensors

4. 설치 확인

1import torch2print(torch.__version__)3print("MPS 사용 가능:", torch.backends.mps.is_available())

Apple Silicon MPS 설정

Mac에서는 .to("cuda") 대신 .to("mps")를 사용한다. MPS 백엔드는 Apple의 Metal 프레임워크를 통해 Mac GPU를 활용한다.

1import torch2 3device = "mps" if torch.backends.mps.is_available() else "cpu"4print(f"사용 디바이스: {device}")

MPS를 사용할 때 torch.bfloat16 대신 torch.float16을 사용해야 한다. Mac MPS 백엔드는 bfloat16을 완전히 지원하지 않는 경우가 있다.


기본 이미지 생성

SD 3.5 Medium (메모리 절약형 권장)

1import torch2from diffusers import StableDiffusion3Pipeline3 4pipe = StableDiffusion3Pipeline.from_pretrained(5    "stabilityai/stable-diffusion-3.5-medium",6    torch_dtype=torch.float16,7)8pipe = pipe.to("mps")9 10# 메모리가 64GB 미만이면 반드시 활성화11pipe.enable_attention_slicing()12 13prompt = "A serene mountain landscape at golden hour, photorealistic, 8k"14negative_prompt = "blurry, low quality, distorted"15 16image = pipe(17    prompt=prompt,18    negative_prompt=negative_prompt,19    num_inference_steps=40,20    guidance_scale=4.5,21    height=1024,22    width=1024,23).images[0]24 25image.save("output.png")26print("이미지 저장 완료: output.png")

SD 3.5 Large Turbo (4스텝 고속 생성)

1import torch2from diffusers import StableDiffusion3Pipeline3 4pipe = StableDiffusion3Pipeline.from_pretrained(5    "stabilityai/stable-diffusion-3.5-large-turbo",6    torch_dtype=torch.float16,7)8pipe = pipe.to("mps")9pipe.enable_attention_slicing()10 11prompt = "A futuristic city at night, neon lights, cinematic"12 13# Turbo 모델은 4스텝, guidance_scale=1.0 사용14image = pipe(15    prompt=prompt,16    num_inference_steps=4,17    guidance_scale=1.0,18).images[0]19 20image.save("turbo_output.png")

파라미터 조절

파라미터기본값설명
num_inference_stepsMedium: 40, Large: 28, Turbo: 4생성 스텝 수. 높을수록 품질 향상, 속도 감소
guidance_scale3.5~4.5프롬프트 충실도. 높을수록 프롬프트에 충실 (Turbo는 1.0)
height / width1024출력 해상도. 64의 배수여야 함
negative_promptNone제외할 요소를 지정하는 역프롬프트
num_images_per_prompt1Mac MPS에서는 배치 생성 오류 가능성이 있어 1 권장
1# 다양한 해상도 예시2image = pipe(3    prompt="portrait of a woman, studio lighting",4    num_inference_steps=40,5    guidance_scale=4.0,6    height=1152,7    width=896,  # 세로형 (포트레이트)8).images[0]

메모리 최적화

Attention Slicing (필수)

메모리 64GB 미만 Mac에서는 반드시 활성화한다. 성능을 약 20% 향상시키고 메모리 스와핑을 방지한다.

1pipe.enable_attention_slicing()

T5 텍스트 인코더 비활성화

T5-xxl 텍스트 인코더는 많은 메모리를 차지한다. 간단한 프롬프트에서는 비활성화해도 품질 차이가 크지 않다.

1pipe = StableDiffusion3Pipeline.from_pretrained(2    "stabilityai/stable-diffusion-3.5-medium",3    torch_dtype=torch.float16,4    text_encoder_3=None,   # T5-xxl 비활성화5    tokenizer_3=None,6)7pipe = pipe.to("mps")

CPU 오프로딩

메모리가 부족한 경우 모델의 일부를 CPU RAM으로 오프로드한다. 속도는 느려지지만 메모리 초과를 방지할 수 있다.

1pipe.enable_model_cpu_offload()2# 주의: enable_model_cpu_offload()와 .to("mps")는 함께 사용하지 않는다

자주 발생하는 오류 해결

오류: NotImplementedError: The operator 'aten::...' is not currently implemented for the MPS device

MPS에서 지원되지 않는 연산자 사용 시 발생한다.

1# PyTorch 최신 버전으로 업데이트2pip install --upgrade torch torchvision torchaudio

그래도 해결되지 않으면 CPU 폴백을 설정한다:

1import os2os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

오류: 배치 생성 시 크래시 또는 오류

Mac MPS에서는 num_images_per_prompt > 1 배치 생성이 불안정하다. 반복문으로 대체한다:

1images = []2for i in range(4):3    img = pipe(prompt=prompt, num_inference_steps=40).images[0]4    img.save(f"output_{i}.png")5    images.append(img)

오류: bfloat16 관련 오류

torch_dtype=torch.bfloat16 대신 torch.float16을 사용한다:

1pipe = StableDiffusion3Pipeline.from_pretrained(2    "stabilityai/stable-diffusion-3.5-medium",3    torch_dtype=torch.float16,  # bfloat16 아닌 float164)

처음 실행이 두 번째보다 결과가 다를 때 (PyTorch 구버전)

PyTorch 1.13을 사용 중이라면 워밍업 패스를 한 번 실행한다:

1# 워밍업 (결과 버림)2_ = pipe(prompt, num_inference_steps=1)3 4# 실제 생성5image = pipe(prompt, num_inference_steps=40).images[0]

참고 링크

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.