BleachNick's picture
upload required packages
87d40d2

A newer version of the Gradio SDK is available: 5.9.1

Upgrade

Apple Silicon (M1/M2)μ—μ„œ Stable Diffusion을 μ‚¬μš©ν•˜λŠ” 방법

DiffusersλŠ” Stable Diffusion 좔둠을 μœ„ν•΄ PyTorch mpsλ₯Ό μ‚¬μš©ν•΄ Apple μ‹€λ¦¬μ½˜κ³Ό ν˜Έν™˜λ©λ‹ˆλ‹€. λ‹€μŒμ€ Stable Diffusion이 μžˆλŠ” M1 λ˜λŠ” M2 컴퓨터λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 따라야 ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

μš”κ΅¬ 사항

  • Apple silicon (M1/M2) ν•˜λ“œμ›¨μ–΄μ˜ Mac 컴퓨터.
  • macOS 12.6 λ˜λŠ” 이후 (13.0 λ˜λŠ” 이후 μΆ”μ²œ).
  • Python arm64 버전
  • PyTorch 2.0(μΆ”μ²œ) λ˜λŠ” 1.13(mpsλ₯Ό μ§€μ›ν•˜λŠ” μ΅œμ†Œ 버전). Yhttps://pytorch.org/get-started/locally/의 지침에 따라 pip λ˜λŠ” conda둜 μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”λ‘  νŒŒμ΄ν”„λΌμΈ

μ•„λž˜ μ½”λ„λŠ” μ΅μˆ™ν•œ to() μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ mps λ°±μ—”λ“œλ‘œ Stable Diffusion νŒŒμ΄ν”„λΌμΈμ„ M1 λ˜λŠ” M2 μž₯치둜 μ΄λ™ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

**PyTorch 1.13을 μ‚¬μš© 쀑일 λ•Œ ** μΆ”κ°€ μΌνšŒμ„± 전달을 μ‚¬μš©ν•˜μ—¬ νŒŒμ΄ν”„λΌμΈμ„ "프라이밍"ν•˜λŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€. 이것은 λ°œκ²¬ν•œ μ΄μƒν•œ λ¬Έμ œμ— λŒ€ν•œ μž„μ‹œ ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€. 첫 번째 μΆ”λ‘  전달은 후속 전달와 μ•½κ°„ λ‹€λ₯Έ κ²°κ³Όλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이 전달은 ν•œ 번만 μˆ˜ν–‰ν•˜λ©΄ 되며 μΆ”λ‘  단계λ₯Ό ν•œ 번만 μ‚¬μš©ν•˜κ³  κ²°κ³Όλ₯Ό 폐기해도 λ©λ‹ˆλ‹€.

이전 νŒμ—μ„œ μ„€λͺ…ν•œ 것듀을 ν¬ν•¨ν•œ μ—¬λŸ¬ 문제λ₯Ό ν•΄κ²°ν•˜λ―€λ‘œ PyTorch 2 이상을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

# `huggingface-cli login`에 λ‘œκ·ΈμΈλ˜μ–΄ μžˆμŒμ„ 확인
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
pipe = pipe.to("mps")

# 컴퓨터가 64GB μ΄ν•˜μ˜ RAM 램일 λ•Œ μΆ”μ²œ
pipe.enable_attention_slicing()

prompt = "a photo of an astronaut riding a horse on mars"

# 처음 "μ›Œλ°μ—…" 전달 (μœ„ μ„€λͺ…을 λ³΄μ„Έμš”)
_ = pipe(prompt, num_inference_steps=1)

# κ²°κ³ΌλŠ” μ›Œλ°μ—… 전달 ν›„μ˜ CPU μž₯치의 결과와 μΌμΉ˜ν•©λ‹ˆλ‹€.
image = pipe(prompt).images[0]

μ„±λŠ₯ μΆ”μ²œ

M1/M2 μ„±λŠ₯은 λ©”λͺ¨λ¦¬ μ••λ ₯에 맀우 λ―Όκ°ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ€ ν•„μš”ν•œ 경우 μžλ™μœΌλ‘œ μŠ€μ™‘λ˜μ§€λ§Œ μŠ€μ™‘ν•  λ•Œ μ„±λŠ₯이 크게 μ €ν•˜λ©λ‹ˆλ‹€.

특히 μ»΄ν“¨ν„°μ˜ μ‹œμŠ€ν…œ RAM이 64GB λ―Έλ§Œμ΄κ±°λ‚˜ 512 Γ— 512픽셀보닀 큰 λΉ„ν‘œμ€€ ν•΄μƒλ„μ—μ„œ 이미지λ₯Ό μƒμ„±ν•˜λŠ” 경우, μΆ”λ‘  쀑에 λ©”λͺ¨λ¦¬ μ••λ ₯을 쀄이고 μŠ€μ™€ν•‘μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ–΄ν…μ…˜ μŠ¬λΌμ΄μ‹±μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ–΄ν…μ…˜ μŠ¬λΌμ΄μ‹±μ€ λΉ„μš©μ΄ 많이 λ“œλŠ” μ–΄ν…μ…˜ μž‘μ—…μ„ ν•œ λ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰ν•˜λŠ” λŒ€μ‹  μ—¬λŸ¬ λ‹¨κ³„λ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 일반적으둜 λ²”μš© λ©”λͺ¨λ¦¬κ°€ μ—†λŠ” μ»΄ν“¨ν„°μ—μ„œ ~20%의 μ„±λŠ₯ 영ν–₯을 λ―ΈμΉ˜μ§€λ§Œ 64GB 이상이 μ•„λ‹Œ 경우 λŒ€λΆ€λΆ„μ˜ Apple Silicon μ»΄ν“¨ν„°μ—μ„œ 더 λ‚˜μ€ μ„±λŠ₯이 κ΄€μ°°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

pipeline.enable_attention_slicing()

Known Issues