Diffusers documentation

كيفية تشغيل Stable Diffusion باستخدام Core ML

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

كيفية تشغيل Stable Diffusion باستخدام Core ML

Core ML هو تنسيق النماذج ومكتبة تعلم الآلة المدعومة من أطر عمل 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 أيضًا مزج محركات الحساب وتبديلها، بحيث قد تعمل بعض أجزاء النموذج على المعالج المركزي بينما تعمل أجزاء أخرى على معالج الرسوميات، على سبيل المثال.

يمكنك أيضاً تشغيل قاعدة أكواد بايثون الخاصة بـdiffusers على أجهزة Mac التي تعمل بمعالجات Apple Silicon باستخدام مُسرّع mps المدمج في PyTorch. يتم شرح هذا النهج بالتفصيل في دليل mps، لكنه غير متوافق مع التطبيقات الأصلية.

نقاط التفتيش لنواة Stable Diffusion

تُخزَّن أوزان Stable Diffusion (أو نقاط التفتيش) بتنسيق PyTorch، لذا تحتاج إلى تحويلها إلى تنسيق Core ML قبل أن نتمكن من استخدامها داخل التطبيقات الأصلية.

لحسن الحظ، طوّر مهندسو Apple أداة تحويل أداة تحويل مبنية على diffusers لتحويل نقاط التفتيش الخاصة بـ PyTorch إلى Core ML.

قبل تحويل نموذج، خذ لحظة لاستكشاف Hugging Face Hub – فمن المرجح أن النموذج الذي تهمك متوفر بالفعل بصيغة Core ML:

  • تشمل منظمة Apple إصدارات Stable Diffusion 1.4 و1.5 و2.0 الأساسية و2.1 الأساسية
  • يتضمن مجتمع coreml نماذج مُعدّلة خصيصًا
  • استخدم هذا مرشّح لإرجاع جميع نقاط التفتيش المتاحة لنواة Core ML

إذا لم تجد النموذج الذي تهمك، فننصحك باتباع التعليمات الخاصة بـ تحويل النماذج إلى Core ML من Apple.

اختيار متغير Core ML الذي سيتم استخدامه

يمكن تحويل نماذج Stable Diffusion إلى متغيرات مختلفة من Core ML مخصصة لأغراض مختلفة:

  • نوع كتل الانتباه المستخدمة. تُستخدم عملية الانتباه لـ “الانتباه” إلى العلاقة بين المناطق المختلفة في تمثيلات الصورة وفهم كيفية ارتباط تمثيلات الصورة والنص. نظرًا لأن الانتباه يتطلب جهدًا حسابيًا وذاكرة كبيرة، فإن هناك تنفيذاً مختلفاً يأخذ في الاعتبار خصائص الأجهزة المختلفة. بالنسبة لنماذج Core ML Stable Diffusion، هناك نوعان من الانتباه:

  • إطار الاستدلال المدعوم.

    • packages مناسبة للاستدلال باستخدام Python. يمكن استخدام ذلك لاختبار نماذج Core ML المحوّلة قبل محاولة دمجها داخل التطبيقات الأصلية، أو إذا كنت ترغب في استكشاف أداء Core ML دون الحاجة إلى دعم التطبيقات الأصلية. على سبيل المثال، يمكن لتطبيق بواجهة مستخدم ويب أن يستخدم بشكل مثالي خلفية Core ML مبنية على Python.
    • يتطلب كود Swift النماذج المُجمّعة compiled. تُقسّم النماذج المُجمّعة compiled في Hub أوزان نموذج UNet الكبير إلى عدة ملفات لضمان التوافق مع أجهزة iOS وiPadOS. يتوافق ذلك مع خيار التحويل --chunk-unet. إذا كنت ترغب في دعم التطبيقات الأصلية، فيجب عليك اختيار النسخة compiled.

تشمل النماذج الرسمية لنموذج Core ML Stable Diffusion هذه الإصدارات، لكن قد تختلف تلك الخاصة بالمجتمع:

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

يمكنك تنزيل النسخة التي تحتاجها واستخدامها كما هو موضح أدناه.

الاستدلال باستخدام Core ML في Python

قم بتثبيت المكتبات التالية لتشغيل الاستدلال عبر Core ML في Python:

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

تنزيل نقاط التفتيش للنموذج

لتشغيل الاستدلال في Python، استخدم إحدى الإصدارات المخزنة في مجلدات packages لأن الإصدارات compiled متوافقة مع Swift فقط. يمكنك اختيار ما إذا كنت تريد استخدام الانتباه original أو split_einsum.

هذه هي الطريقة التي يمكنك بها تنزيل متغير original للانتباه من Hub إلى مجلد يُسمى models:

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

الاستدلال

بمجرد تنزيل لقطة من النموذج، يمكنك اختباره باستخدام سكربت بايثون الخاص بشركة Apple.

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:

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:

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

الاستدلال

لتنفيذ الاستدلال، يرجى استنساخ مستودع Apple:

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

ثم استخدم أداة سطر الأوامر من Apple، وهي Swift Package Manager:

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.

الميزات المدعومة في Diffusers

لا تدعم نماذج Core ML وكود الاستدلال العديد من الميزات والخيارات والمرونة التي يوفرها 🧨 Diffusers. فيما يلي بعض القيود التي يجب وضعها في الاعتبار:

  • نماذج Core ML مناسبة للاستدلال فقط. لا يمكن استخدامها للتدريب أو الضبط الدقيق.
  • تم نقل جدولين فقط إلى Swift، الجدول الافتراضي المستخدم في Stable Diffusion وDPMSolverMultistepScheduler، والذي نقلناه إلى Swift من تطبيقنا في diffusers. ننصحك باستخدام DPMSolverMultistepScheduler، لأنه ينتج الجودة نفسها في حوالي نصف عدد الخطوات.
  • تتوفر الموجهات السلبية، ومقياس التوجيه الحر من التصنيف، ومهام تحويل الصورة إلى صورة في كود الاستدلال. أما الميزات المتقدمة مثل التوجيه العمق، وControlNet، ومُحسِّنات الدقة الكامنة، فليست متاحة بعد.

تُعد مستودعات التحويل والاستدلال الخاصة بشركة Apple ومستودعاتنا swift-coreml-diffusers كعروض تقنية تهدف إلى تمكين المطورين الآخرين من البناء عليها.

إذا كنت تشعر بأن هناك ميزات مفقودة مهمة، فلا تتردد في فتح طلب ميزة أو، بشكل أفضل، تقديم طلب مساهمة (PR) 🙂.

تطبيق Diffusers الأصلي بلغة Swift

من السهل تشغيل Stable Diffusion على أجهزة Apple الخاصة بك باستخدام مستودع Swift مفتوح المصدر الخاص بنا، المبني على diffusers ومستودع Apple للتحويل والاستدلال. يمكنك دراسة الكود وتجميعه باستخدام Xcode وتكييفه حسب احتياجاتك. ولتسهيل الأمر عليك، يتوفر أيضًا تطبيق Mac مستقل في App Store، مما يتيح لك تجربته دون الحاجة إلى التعامل مع الكود أو بيئة التطوير المتكاملة. إذا كنت مطورًا وقد حددت أن Core ML هو الحل الأمثل لبناء تطبيق Stable Diffusion الخاص بك، فيمكنك استخدام بقية هذا الدليل للبدء في مشروعك. نتطلع بشوق لرؤية ما ستبنيه 🙂.

Update on GitHub