Diffusers documentation
Metal Performans Gölgelleyicileri (MPS)
Metal Performans Gölgelleyicileri (MPS)
rozeti taşıyan Pipelines, Apple silikonlu cihazlarda MPS arka ucundan yararlanarak daha hızlı çıkarım yapabildiğini gösterir. Bu rozeti eksik olan pipelines'a eklemek için bir Pull Request açmaktan çekinmeyin.
🤗 Diffusers, MacOS cihazlarındaki GPU'yu kullanmak için Metal çerçevesini kullanan PyTorch mps cihazı ile Apple silikon (M1/M2 çipleri) ile uyumludur. Aşağıdaki gereksinimleri karşılamış olmanız gerekir:
- Apple silikon (M1/M2) donanımlı bir macOS bilgisayar
- macOS 12.6 veya üzeri (13.0 veya üzeri önerilir)
- arm64 sürümü Python
- PyTorch 2.0 (önerilen) veya 1.13 (
mpsiçin desteklenen en düşük sürüm)
mps arka ucu, Stable Diffusion hattını M1 veya M2 cihazınıza taşımak için PyTorch’un .to() arayüzünü kullanır:
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
pipe = pipe.to("mps")
# Recommended if your computer has < 64 GB of RAM
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
imagePyTorch mps arka ucu,
2**32'den büyük NDArray boyutlarını desteklemez. Bu sorunla karşılaşırsanız, inceleyebilmemiz için bir Issue açmanızı rica ederiz.
PyTorch 1.13 kullanıyorsanız, hattı (pipeline) bir kez daha ek geçişle “hazırlamanız” (prime) gerekir. Bu, ilk çıkarım (inference) geçişinin sonraki geçişlerden biraz farklı sonuçlar üretmesi sorununa geçici bir çözümdür. Bu geçişi yalnızca bir kez yapmanız yeterlidir ve tek bir çıkarım adımından sonra sonucu atabilirsiniz.
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5").to("mps")
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
# First-time "warmup" pass if PyTorch version is 1.13
+ _ = pipe(prompt, num_inference_steps=1)
# Results match those from the CPU device after the warmup pass.
image = pipe(prompt).images[0]Sorun Giderme
Bu bölüm, mps arka ucunu kullanırken karşılaşılan bazı yaygın sorunları ve bunların nasıl çözüleceğini listeler.
Attention dilimleme
M1/M2 performansı bellek baskısına karşı çok hassastır. Bu durum oluştuğunda sistem, ihtiyaç duyduğunda otomatik olarak takas (swap) yapar ve bu da performansı önemli ölçüde düşürür.
Bunun önüne geçmek için, çıkarım sırasında bellek baskısını azaltmak ve takaslamayı (swapping) önlemek amacıyla dikkat dilimleme (attention slicing) kullanmanızı öneririz. Bilgisayarınızın 64 GB'tan az sistem belleği olması veya 512×512 pikselden büyük, standart olmayan çözünürlüklerde görsel üretmeniz durumunda bu özellikle önemlidir. Hattınızda (pipeline) enable_attention_slicing() fonksiyonunu çağırın:
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True).to("mps")
pipeline.enable_attention_slicing()Attention slicing, maliyetli attention işlemini tek seferde yerine birden fazla adımda gerçekleştirir. Evrensel belleğe sahip olmayan bilgisayarlarda genellikle performansı ~%20 oranında iyileştirir; ancak 64 GB veya daha fazla RAM'a sahip olmadıkça, çoğu Apple silikonlu bilgisayarda daha iyi performans gözlemledik.
Toplu çıkarım
Bir partide birden çok istek üretmek çökmeye veya güvenilir şekilde çalışmamasına neden olabilir. Bu durumda, partileme yerine yineleme yapmayı deneyin.
Update on GitHub