Buckets:

mishig's picture
|
download
raw
14.8 kB
# كيفية تشغيل Stable Diffusion باستخدام Core ML
[Core ML](https://developer.apple.com/documentation/coreml) هو تنسيق النماذج ومكتبة تعلم الآلة المدعومة من أطر عمل Apple. إذا كنت مهتمًا بتشغيل نماذج Stable Diffusion داخل تطبيقات macOS أو iOS/iPadOS الخاصة بك، فستوضح لك هذه الدليل كيفية تحويل نقاط التفتيش PyTorch الموجودة مسبقًا إلى تنسيق Core ML واستخدامها للاستدلال باستخدام Python أو Swift.
يمكن لنماذج Core ML الاستفادة من جميع محركات الحساب المتاحة في أجهزة Apple: المعالج المركزي (CPU)، ومعالج الرسوميات (GPU)، ومحرك Apple العصبي (أو ANE، وهو مُسرِّع مُحسَّن للمصفوفات متاح في أجهزة Mac المزودة بشريحة Apple Silicon وأجهزة iPhone/iPad الحديثة). اعتمادًا على النموذج والجهاز الذي يعمل عليه، يمكن لـ Core ML أيضًا مزج محركات الحساب وتبديلها، بحيث قد تعمل بعض أجزاء النموذج على المعالج المركزي بينما تعمل أجزاء أخرى على معالج الرسوميات، على سبيل المثال.
> [!TIP]
> يمكنك أيضاً تشغيل قاعدة أكواد بايثون الخاصة بـ`diffusers` على أجهزة Mac التي تعمل بمعالجات Apple Silicon باستخدام مُسرّع `mps` المدمج في PyTorch. يتم شرح هذا النهج بالتفصيل في [دليل mps](mps)، لكنه غير متوافق مع التطبيقات الأصلية.
## نقاط التفتيش لنواة Stable Diffusion
تُخزَّن أوزان Stable Diffusion (أو نقاط التفتيش) بتنسيق PyTorch، لذا تحتاج إلى تحويلها إلى تنسيق Core ML قبل أن نتمكن من استخدامها داخل التطبيقات الأصلية.
لحسن الحظ، طوّر مهندسو Apple أداة تحويل [أداة تحويل](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) مبنية على `diffusers` لتحويل نقاط التفتيش الخاصة بـ PyTorch إلى Core ML.
قبل تحويل نموذج، خذ لحظة لاستكشاف Hugging Face Hub – فمن المرجح أن النموذج الذي تهمك متوفر بالفعل بصيغة Core ML:
- تشمل منظمة [Apple](https://huggingface.co/apple) إصدارات Stable Diffusion 1.4 و1.5 و2.0 الأساسية و2.1 الأساسية
- يتضمن [مجتمع coreml](https://huggingface.co/coreml-community) نماذج مُعدّلة خصيصًا
- استخدم هذا [مرشّح](https://huggingface.co/models?pipeline_tag=text-to-image&library=coreml&p=2&sort=likes) لإرجاع جميع نقاط التفتيش المتاحة لنواة Core ML
إذا لم تجد النموذج الذي تهمك، فننصحك باتباع التعليمات الخاصة بـ [تحويل النماذج إلى Core ML](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) من Apple.
## اختيار متغير Core ML الذي سيتم استخدامه
يمكن تحويل نماذج Stable Diffusion إلى متغيرات مختلفة من Core ML مخصصة لأغراض مختلفة:
- نوع كتل الانتباه المستخدمة. تُستخدم عملية الانتباه لـ "الانتباه" إلى العلاقة بين المناطق المختلفة في تمثيلات الصورة وفهم كيفية ارتباط تمثيلات الصورة والنص. نظرًا لأن الانتباه يتطلب جهدًا حسابيًا وذاكرة كبيرة، فإن هناك تنفيذاً مختلفاً يأخذ في الاعتبار خصائص الأجهزة المختلفة. بالنسبة لنماذج Core ML Stable Diffusion، هناك نوعان من الانتباه:
* `split_einsum` ([الذي قدمته Apple](https://machinelearning.apple.com/research/neural-engine-transformers)) مُحسَّن لأجهزة ANE، وهي متوفرة في أجهزة iPhone وiPad الحديثة وأجهزة سلسلة M.
* الانتباه "الأصلي" (التنفيذ الأساسي المستخدم في `diffusers`) متوافق مع CPU/GPU فقط وليس مع ANE. قد يكون تشغيل النموذج على CPU + GPU باستخدام انتباه `original` *أسرع* من استخدام ANE. راجع [هذا المعيار المرجعي للأداء](https://huggingface.co/blog/fast-mac-diffusers#performance-benchmarks) بالإضافة إلى بعض [القياسات الإضافية التي قدمتها المجتمع](https://github.com/huggingface/swift-coreml-diffusers/issues/31) للحصول على تفاصيل إضافية.
- إطار الاستدلال المدعوم.
* `packages` مناسبة للاستدلال باستخدام Python. يمكن استخدام ذلك لاختبار نماذج Core ML المحوّلة قبل محاولة دمجها داخل التطبيقات الأصلية، أو إذا كنت ترغب في استكشاف أداء Core ML دون الحاجة إلى دعم التطبيقات الأصلية. على سبيل المثال، يمكن لتطبيق بواجهة مستخدم ويب أن يستخدم بشكل مثالي خلفية Core ML مبنية على Python.
* يتطلب كود Swift النماذج المُجمّعة `compiled`. تُقسّم النماذج المُجمّعة `compiled` في Hub أوزان نموذج UNet الكبير إلى عدة ملفات لضمان التوافق مع أجهزة iOS وiPadOS. يتوافق ذلك مع خيار التحويل [`--chunk-unet`](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml). إذا كنت ترغب في دعم التطبيقات الأصلية، فيجب عليك اختيار النسخة `compiled`.
تشمل [النماذج](https://huggingface.co/apple/coreml-stable-diffusion-v1-4/tree/main) الرسمية لنموذج Core ML Stable Diffusion هذه الإصدارات، لكن قد تختلف تلك الخاصة بالمجتمع:
```
coreml-stable-diffusion-v1-4
├── README.md
├── original
│ ├── compiled
│ └── packages
└── split_einsum
├── compiled
└── packages
```
يمكنك تنزيل النسخة التي تحتاجها واستخدامها كما هو موضح أدناه.
## الاستدلال باستخدام Core ML في Python
قم بتثبيت المكتبات التالية لتشغيل الاستدلال عبر Core ML في Python:
```bash
pip install huggingface_hub
pip install git+https://github.com/apple/ml-stable-diffusion
```
### تنزيل نقاط التفتيش للنموذج
لتشغيل الاستدلال في Python، استخدم إحدى الإصدارات المخزنة في مجلدات `packages` لأن الإصدارات `compiled` متوافقة مع Swift فقط. يمكنك اختيار ما إذا كنت تريد استخدام الانتباه `original` أو `split_einsum`.
هذه هي الطريقة التي يمكنك بها تنزيل متغير `original` للانتباه من Hub إلى مجلد يُسمى `models`:
```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}")
```
### الاستدلال[[python-inference]]
بمجرد تنزيل لقطة من النموذج، يمكنك اختباره باستخدام سكربت بايثون الخاص بشركة Apple.
```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
```
مرّر مسار نقطة التفتيش التي تم تنزيلها إلى السكربت باستخدام علم `-i`. يشير `--compute-unit` إلى العتاد الذي تريد السماح به للاستدلال. يجب أن يكون أحد الخيارات التالية: `ALL`، `CPU_AND_GPU`، `CPU_ONLY`، `CPU_AND_NE`. يمكنك أيضاً تقديم مسار مخرجات اختياري، وبذرة (seed) لإعادة الإنتاج.
يفترض سكربت الاستدلال أنك تستخدم النسخة الأصلية من نموذج Stable Diffusion، `CompVis/stable-diffusion-v1-4`. إذا كنت تستخدم نموذجًا آخر، فيجب عليك *تحديد* معرّفه على Hub في سطر أوامر الاستدلال، باستخدام خيار `--model-version`. يعمل هذا مع النماذج المدعومة مسبقًا والنماذج المخصصة التي دربتها أو ضبطتها بنفسك.
على سبيل المثال، إذا كنت ترغب في استخدام [`stable-diffusion-v1-5/stable-diffusion-v1-5`](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5):
```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
```
## استدلال Core ML في Swift
تكون عملية الاستدلال في Swift أسرع قليلاً من Python لأن النماذج مُجمّعة مسبقًا بصيغة `mlmodelc`. يكون هذا الفرق ملحوظًا عند بدء تشغيل التطبيق عند تحميل النموذج، لكنه لا ينبغي أن يكون ملحوظًا إذا قمت بتشغيل عدة عمليات توليد بعد ذلك.
### تنزيل
لتشغيل الاستدلال بلغة Swift على جهاز Mac الخاص بك، تحتاج إلى إحدى نسخ نقاط التفتيش `compiled`. ننصحك بتنزيلها محليًا باستخدام كود Python مشابه للمثال السابق، لكن مع إحدى النسخ `compiled`:
```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}")
```
### الاستدلال[[swift-inference]]
لتنفيذ الاستدلال، يرجى استنساخ مستودع Apple:
```bash
git clone https://github.com/apple/ml-stable-diffusion
cd ml-stable-diffusion
```
ثم استخدم أداة سطر الأوامر من Apple، وهي [Swift Package Manager](https://www.swift.org/package-manager/#):
```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"
```
يجب عليك تحديد في `--resource-path` أحد نقاط التفتيش التي تم تنزيلها في الخطوة السابقة، لذا تأكد من أنه يحتوي على حزم Core ML المُجمّعة بامتداد `.mlmodelc`. ويجب أن يكون `--compute-units` أحد هذه القيم: `all`، `cpuOnly`، `cpuAndGPU`، `cpuAndNeuralEngine`.
لمزيد من التفاصيل، يُرجى الرجوع إلى [التعليمات في مستودع Apple](https://github.com/apple/ml-stable-diffusion).
## الميزات المدعومة في Diffusers
لا تدعم نماذج Core ML وكود الاستدلال العديد من الميزات والخيارات والمرونة التي يوفرها 🧨 Diffusers. فيما يلي بعض القيود التي يجب وضعها في الاعتبار:
- نماذج Core ML مناسبة للاستدلال فقط. لا يمكن استخدامها للتدريب أو الضبط الدقيق.
- تم نقل جدولين فقط إلى Swift، الجدول الافتراضي المستخدم في Stable Diffusion و`DPMSolverMultistepScheduler`، والذي نقلناه إلى Swift من تطبيقنا في `diffusers`. ننصحك باستخدام `DPMSolverMultistepScheduler`، لأنه ينتج الجودة نفسها في حوالي نصف عدد الخطوات.
- تتوفر الموجهات السلبية، ومقياس التوجيه الحر من التصنيف، ومهام تحويل الصورة إلى صورة في كود الاستدلال. أما الميزات المتقدمة مثل التوجيه العمق، وControlNet، ومُحسِّنات الدقة الكامنة، فليست متاحة بعد.
تُعد مستودعات [التحويل والاستدلال](https://github.com/apple/ml-stable-diffusion) الخاصة بشركة Apple ومستودعاتنا [swift-coreml-diffusers](https://github.com/huggingface/swift-coreml-diffusers) مخصصة كعروض تقنية لتمكين المطورين الآخرين من البناء عليها.
إذا كنت تشعر بأن هناك ميزات مفقودة مهمة، فلا تتردد في فتح طلب ميزة أو، بشكل أفضل، تقديم طلب مساهمة (PR) 🙂.
## تطبيق Diffusers الأصلي بلغة Swift
من السهل تشغيل Stable Diffusion على أجهزة Apple الخاصة بك باستخدام [مستودع Swift مفتوح المصدر الخاص بنا](https://github.com/huggingface/swift-coreml-diffusers)، المبني على `diffusers` ومستودع Apple للتحويل والاستدلال. يمكنك دراسة الكود وتجميعه باستخدام [Xcode](https://developer.apple.com/xcode/) وتكييفه حسب احتياجاتك. ولتسهيل الأمر عليك، يتوفر أيضًا [تطبيق Mac مستقل في App Store](https://apps.apple.com/app/diffusers/id1666309574)، مما يتيح لك تجربته دون الحاجة إلى التعامل مع الكود أو بيئة التطوير. إذا كنت مطورًا وقد حددت أن Core ML هو الحل الأمثل لبناء تطبيق Stable Diffusion الخاص بك، فيمكنك استخدام بقية هذا الدليل للبدء في مشروعك. نتطلع بشوق لرؤية ما ستبنيه 🙂.

Xet Storage Details

Size:
14.8 kB
·
Xet hash:
68ba1d520bc8f4bad9f4df5269f027aba40477d2619851e645d70f029769ca8a

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