Diffusers documentation

Core ML ile Stable Diffusion'ı nasıl çalıştırılır

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Core ML ile Stable Diffusion'ı nasıl çalıştırılır

Core ML, Apple framework'leri tarafından desteklenen model biçimi ve makine öğrenme kütüphanesidir. Stable Diffusion modellerini macOS veya iOS/iPadOS uygulamalarınızın içinde çalıştırmakla ilgileniyorsanız, bu kılavuz mevcut PyTorch checkpoint'lerini Core ML biçimine dönüştürmenizi ve bunları Python veya Swift ile çıkarım (inference) için kullanmanızı gösterecektir.

Core ML modelleri, Apple cihazlarında kullanılabilen tüm hesaplama motorlarından yararlanabilir: CPU, GPU ve Apple Neural Engine (veya ANE, Apple Silicon Mac'lerde ve modern iPhone/iPad'lerde bulunan, tensörler için optimize edilmiş bir hızlandırıcı). Modelin ve çalıştığı cihazın türüne bağlı olarak Core ML, hesaplama motorlarını karıştırıp eşleştirebilir; örneğin modelin bazı bölümleri CPU'da çalışırken diğerleri GPU'da çalışabilir.

diffusers Python kod tabanını, PyTorch’a yerleşik olan mps hızlandırıcısını kullanarak Apple Silicon Mac’lerde de çalıştırabilirsiniz. Bu yaklaşım mps kılavuzunda ayrıntılı olarak açıklanmıştır ancak yerel uygulamalarla uyumlu değildir.

Stable Diffusion Core ML Kontrol Noktaları

Stable Diffusion ağırlıkları (veya checkpoint'leri) PyTorch biçiminde saklanır, bu nedenle bunları yerel uygulamalarda kullanabilmemiz için önce Core ML biçimine dönüştürmeniz gerekir.

Neyse ki Apple mühendisleri, PyTorch kontrol noktalarını Core ML'ye dönüştürmek için diffusers tabanlı bir dönüştürme aracı geliştirdi.

Ancak bir modeli dönüştürmeden önce, Hugging Face Hub'ı keşfetmek için bir an ayırın – ilgilendiğiniz modelin büyük olasılıkla zaten Core ML biçiminde mevcut olması:

  • Apple kuruluşu Stable Diffusion 1.4, 1.5, 2.0 base ve 2.1 base sürümlerini içerir
  • coreml topluluğu özel olarak ince ayarlanmış modeller içerir
  • tüm mevcut Core ML denetim noktalarını döndürmek için bu filtreyi kullanın

İlgilendiğiniz modeli bulamıyorsanız, Apple'ın Modelleri Core ML'e Dönüştürme talimatlarını izlemenizi öneririz.

Kullanılacak Core ML Varyantını Seçme

Stable Diffusion modelleri, farklı amaçlara yönelik farklı Core ML varyantlarına dönüştürülebilir:

  • Kullanılan dikkat bloğu türü. Dikkat işlemi, görüntü temsillerindeki farklı bölgeler arasındaki ilişkiye “dikkat vermek” ve görüntü ile metin temsillerinin nasıl ilişkili olduğunu anlamak için kullanılır. Dikkat, hesaplama ve bellek açısından yoğun olduğundan, farklı cihazların donanım özelliklerini göz önünde bulunduran farklı uygulamalar mevcuttur. Core ML Stable Diffusion modelleri için iki dikkat varyantı vardır:

    • split_einsum (Apple tarafından tanıtıldı) modern iPhone, iPad ve M serisi bilgisayarlarda bulunan ANE cihazları için optimize edilmiştir.
    • “Orijinal” dikkat (dikkat) (diffusers içinde kullanılan temel uygulama) yalnızca CPU/GPU ile uyumludur, ANE ile değil. original dikkatini kullanarak modelinizi CPU + GPU üzerinde çalıştırmak, ANE’ye kıyasla hızlı olabilir. Ek ayrıntılar için bu performans kıyaslamasına ve topluluğun sağladığı bazı ek ölçümlere de bakın.
  • Desteklenen çıkarım çerçevesi.

    • packages, Python ile çıkarım için uygundur. Dönüştürülen Core ML modellerini yerel uygulamaların içine entegre etmeye çalışmadan önce test etmek veya Core ML performansını incelemek istiyorsanız ancak yerel uygulamaları desteklemeniz gerekmiyorsa bunu kullanabilirsiniz. Örneğin, web arayüzüne sahip bir uygulama, Python tabanlı bir Core ML arka ucunu sorunsuz bir şekilde kullanabilir.
    • Swift kodu için compiled modeller gereklidir. Hub’daki compiled modeller, büyük UNet model ağırlıklarını iOS ve iPadOS cihazlarıyla uyumluluk için birkaç dosyaya böler. Bu, --chunk-unet dönüştürme seçeneğine karşılık gelir. Yerel uygulamaları desteklemek istiyorsanız compiled varyantını seçmeniz gerekir.

Resmi Core ML Stable Diffusion modelleri bu varyantları içerir, ancak topluluk modelleri farklılık gösterebilir:

coreml-stable-diffusion-v1-4
├── README.md
├── original
│   ├── compiled
│   └── packages
└── split_einsum
    ├── compiled
    └── packages

Aşağıda gösterildiği gibi ihtiyacınız olan varyantı indirip kullanabilirsiniz.

Python'da Core ML Çıkarımı

Python'da Core ML çıkarımını çalıştırmak için aşağıdaki kütüphaneleri yükleyin:

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

Model Kontrol Noktalarını İndirin

Python'da çıkarım (inference) çalıştırmak için compiled olanların yalnızca Swift ile uyumlu olması nedeniyle packages klasörlerinde saklanan sürümlerden birini kullanın. original veya split_einsum dikkatini (attention) kullanmak isteyip istemediğinizi seçebilirsiniz.

Hub'dan original dikkat varyantını models adlı bir dizine indirmek için:

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}")

Çıkarım

Modelin bir anlık görüntüsünü indirdikten sonra, Apple'ın Python betiğini kullanarak test edebilirsiniz.

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/original/packages -o </path/to/output/image> --compute-unit CPU_AND_GPU --seed 93

İndirilen checkpoint dosyasının yolunu betiğe -i bayrağıyla iletin. --compute-unit, çıkarım için izin vermek istediğiniz donanımı belirtir. Aşağıdaki seçeneklerden biri olmalıdır: ALL, CPU_AND_GPU, CPU_ONLY, CPU_AND_NE. Ayrıca isteğe bağlı bir çıktı yolu ve yeniden üretilebilirlik için bir tohum (seed) da sağlayabilirsiniz.

Çıkarım betiği, Stable Diffusion modelinin orijinal sürümünü, CompVis/stable-diffusion-v1-4 kullandığınızı varsayar. Başka bir model kullanıyorsanız, --model-version seçeneğini kullanarak çıkarım komut satırında Hub kimliğini belirtmeniz gerekir. Bu, zaten desteklenen modeller için de kendinizin eğittiği veya ince ayarladığı özel modeller için de geçerlidir.

Örneğin, stable-diffusion-v1-5/stable-diffusion-v1-5 kullanmak istiyorsanız:

python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" --compute-unit ALL -o output --seed 93 -i models/coreml-stable-diffusion-v1-5_original_packages --model-version stable-diffusion-v1-5/stable-diffusion-v1-5

Swift'te Core ML çıkarımı

Swift'te çıkarım (inference) çalıştırma, modellerin zaten mlmodelc biçiminde derlenmiş olması nedeniyle Python'dan biraz daha hızlıdır. Bu fark, modelin yüklendiği uygulama açılışında belirgin olabilir; ancak ardından birkaç üretim (generation) çalıştırırsanız fark edilmeyecek kadar azdır.

İndir

Mac'inizde Swift ile çıkarım (inference) çalıştırmak için compiled kontrol noktası sürümlerinden birine ihtiyacınız var. Önceki örneğe benzer Python kodu kullanarak bunları yerel olarak indirmenizi öneririz, ancak compiled varyantlarından birini kullanın:

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}")

Çıkarım

Çıkarım (inference) çalıştırmak için Apple'ın deposunu klonlayın:

git clone https://github.com/apple/ml-stable-diffusion
cd ml-stable-diffusion

Ve ardından Apple'ın komut satır aracını, Swift Package Manager'ı kullanın:

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"

Önceki adımda indirilen kontrol noktalarından birini --resource-path içinde belirtmeniz gerekir, bu nedenle .mlmodelc uzantılı derlenmiş Core ML demetlerini içerdiğinden emin olun. --compute-units değeri şu değerlerden biri olmalıdır: all, cpuOnly, cpuAndGPU, cpuAndNeuralEngine.

Daha fazla ayrıntı için lütfen Apple'ın deposundaki talimatlara başvurun.

Desteklenen Diffusers Özellikleri

Core ML modelleri ve çıkarım kodu, 🧨 Diffusers'ın birçok özelliğini, seçeneğini ve esnekliğini desteklemez. Aklınızda bulundurmanız gereken sınırlamaların bazıları şunlardır:

  • Core ML modelleri yalnızca çıkarım (inference) için uygundur. Eğitim veya ince ayar (fine-tuning) için kullanılamazlar.
  • Sadece iki zamanlayıcı Swift'e taşındı: Stable Diffusion tarafından kullanılan varsayılan zamanlayıcı ve diffusers uygulamasımızdan Swift'e taşıdığımız DPMSolverMultistepScheduler. Yaklaşık yarıda bir adımda aynı kaliteyi ürettiği için DPMSolverMultistepScheduler kullanmanızı öneririz.
  • Negatif istemler, sınıflandırıcı-ücretsiz yönlendirme ölçeği ve görüntüden görüntüye görevler çıkarım kodunda kullanılabilir. Derinlik yönlendirmesi, ControlNet ve gizli yükselticiler gibi gelişmiş özellikler henüz mevcut değil.

Apple’ın çevirme ve çıkarım deposu ile kendi swift-coreml-diffusers depolarımız, diğer geliştiricilerin üzerine inşa edebilmesi için teknoloji gösterimi olarak tasarlanmıştır.

Eksik özellikler konusunda güçlü bir görüşe sahipseniz, lütfen bir özellik isteği açmaktan veya daha iyisi, bir katkı PR'ı göndermekten çekinmeyin 🙂.

Yerel Diffusers Swift uygulaması

Kendi Apple donanımınızda Stable Diffusion’u çalıştırmak için kolay bir yol, diffusers ve Apple’ın dönüştürme ve çıkarım deposuna dayanan açık kaynaklı Swift depomuzu kullanmaktır. Kodu inceleyebilir, Xcode ile derleyebilir ve kendi ihtiyaçlarınıza göre uyarlayabilirsiniz. Kolaylığınız için, kodla veya IDE ile uğraşmadan deneme yapabileceğiniz bir de App Store’da bağımsız Mac uygulaması mevcuttur. Bir geliştiriciyseniz ve Stable Diffusion uygulamanızı oluşturmak için Core ML’in en iyi çözüm olduğunu belirlediyseniz, projenize başlamak için bu rehberin geri kalanını kullanabilirsiniz. Ne inşa edeceğinizi görmek için sabırsızlanıyoruz 🙂.

Update on GitHub