Buckets:

mishig's picture
|
download
raw
12.3 kB
# Core ML ile Stable Diffusion'ı nasıl çalıştırılır
[Core ML](https://developer.apple.com/documentation/coreml), 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.
> [!TIP]
> `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](mps) 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ı](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) 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](https://huggingface.co/apple) kuruluşu Stable Diffusion 1.4, 1.5, 2.0 base ve 2.1 base sürümlerini içerir
- [coreml topluluğu](https://huggingface.co/coreml-community) özel olarak ince ayarlanmış modeller içerir
- tüm mevcut Core ML denetim noktalarını döndürmek için bu [filtreyi](https://huggingface.co/models?pipeline_tag=text-to-image&library=coreml&p=2&sort=likes) kullanın
İlgilendiğiniz modeli bulamıyorsanız, Apple'ın [Modelleri Core ML'e Dönüştürme](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) 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ı](https://machinelearning.apple.com/research/neural-engine-transformers)) 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](https://huggingface.co/blog/fast-mac-diffusers#performance-benchmarks) ve topluluğun sağladığı bazı [ek ölçümlere](https://github.com/huggingface/swift-coreml-diffusers/issues/31) 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ı keşfetmek 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](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) karşılık gelir. Yerel uygulamaları desteklemek istiyorsanız `compiled` varyantını seçmeniz gerekir.
Resmi Core ML Stable Diffusion [modelleri](https://huggingface.co/apple/coreml-stable-diffusion-v1-4/tree/main) 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:
```bash
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:
```Python
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[[python-inference]]
Modelin bir anlık görüntüsünü indirdikten sonra, Apple'ın Python betiğini kullanarak test edebilirsiniz.
```shell
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`](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) kullanmak istiyorsanız:
```shell
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:
```Python
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[[swift-inference]]
Çıkarım (inference) çalıştırmak için lütfen Apple'ın deposunu klonlayın:
```bash
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](https://www.swift.org/package-manager/#)'i kullanın:
```bash
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](https://github.com/apple/ml-stable-diffusion) 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](https://github.com/apple/ml-stable-diffusion) ile kendi [swift-coreml-diffusers](https://github.com/huggingface/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 deposu üzerine kurulu [açık kaynaklı Swift depomuzu](https://github.com/huggingface/swift-coreml-diffusers) kullanmaktır. Kodu inceleyebilir, [Xcode](https://developer.apple.com/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ı](https://apps.apple.com/app/diffusers/id1666309574) bulunmaktadır. Bir geliştiriciyseniz ve Stable Diffusion uygulamanızı oluşturmak için Core ML'in en iyi çözüm olduğuna karar verdiyseniz, projenize başlamak için bu kılavuzun geri kalanını kullanabilirsiniz. Ne inşa edeceğinizi görmek için sabırsızlanıyoruz 🙂.

Xet Storage Details

Size:
12.3 kB
·
Xet hash:
3768461ced766d4953d7bbb5bf5eba991e90f7687ce0ec385ecf5b27003292ae

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.