الصورة الرمزية الخاصة بـ Orhon


تم إصدار Stable Diffusion XL بالأمس وهو رائع. يمكنه إنشاء صور كبيرة (1024 × 1024) عالية الجودة؛ تم تحسين الالتزام بالمطالبات من خلال بعض الحيل الجديدة؛ يمكنه إنتاج صور داكنة جدًا أو مشرقة جدًا بسهولة بفضل أحدث الأبحاث حول برامج جدولة الضوضاء؛ وانها مفتوحة المصدر!

الجانب السلبي هو أن النموذج أكبر بكثير، وبالتالي أبطأ وأكثر صعوبة في التشغيل على الأجهزة الاستهلاكية. باستخدام أحدث إصدار من مكتبة Hugging Face diffusers، يمكنك تشغيل Stable Diffusion XL على أجهزة CUDA بسعة 16 جيجابايت من ذاكرة الوصول العشوائي GPU، مما يجعل من الممكن استخدامها على الطبقة المجانية من Colab.

لقد أظهرت الأشهر القليلة الماضية أن الأشخاص مهتمون بشكل واضح بتشغيل نماذج التعلم الآلي محليًا لعدة أسباب، بما في ذلك الخصوصية أو الراحة أو سهولة التجربة أو الاستخدام غير المحدود. لقد عملنا بجد في كل من Apple وHugging Face لاستكشاف هذه المساحة. لقد أظهرنا كيفية تشغيل Stable Diffusion على Apple Silicon، أو كيفية الاستفادة من أحدث التطورات في Core ML لتحسين الحجم والأداء من خلال لوحة الألوان 6 بت.

بالنسبة لـ Stable Diffusion XL قمنا ببعض الأشياء:

  • تم نقل النموذج الأساسي إلى Core ML حتى تتمكن من استخدامه في تطبيقات Swift الأصلية.
  • تم تحديث مستودع التحويل والاستدلال الخاص بـ Apple حتى تتمكن من تحويل النماذج بنفسك، بما في ذلك أي تعديلات دقيقة تهمك.
  • تم تحديث التطبيق التجريبي لـ Hugging Face لإظهار كيفية استخدام نماذج Core ML Stable Diffusion XL الجديدة التي تم تنزيلها من Hub.
  • استكشاف لوحة الألوان المختلطة، وهي تقنية ضغط متقدمة تحقق تخفيضات مهمة في الحجم مع تقليل فقدان الجودة الذي تتكبده والتحكم فيه. يمكنك تطبيق نفس التقنية على نماذجك الخاصة أيضًا!

كل شيء مفتوح المصدر ومتاح اليوم، فلنبدأ في ذلك.

محتويات

استخدام نماذج SD XL من Hugging Face Hub

كجزء من هذا الإصدار، قمنا بنشر نسختين مختلفتين من Stable Diffusion XL في Core ML.

يمكن اختبار أي من النموذجين باستخدام تطبيق Apple Swift لاستدلال سطر الأوامر، أو التطبيق التجريبي لـ Hugging Face. هذا مثال على الأخير باستخدام خط أنابيب Stable Diffusion XL الجديد:

لقطة شاشة لـ Stable Diffusion XL الذي يعمل على نظام Mac

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

يعمل Stable Diffusion XL على أجهزة Apple Silicon Mac التي تعمل بالإصدار التجريبي العام من نظام التشغيل macOS 14. ويستخدم حاليًا ORIGINAL تنفيذ الاهتمام، وهو مخصص لوحدات حساب وحدة المعالجة المركزية + وحدة معالجة الرسومات. لاحظ أن مرحلة التصفية لم يتم نقلها بعد.

كمرجع، هذه هي أرقام الأداء التي حققناها على الأجهزة المختلفة:

جهاز --compute-unit --attention-implementation الكمون (الكمون) من النهاية إلى النهاية سرعة الانتشار (iter/s)
ماك بوك برو (M1 ماكس) CPU_AND_GPU ORIGINAL 46 0.46
ماك بوك برو (M2 ماكس) CPU_AND_GPU ORIGINAL 37 0.57
ماك ستوديو (M1 الترا) CPU_AND_GPU ORIGINAL 25 0.89
ماك ستوديو (M2 الترا) CPU_AND_GPU ORIGINAL 20 1.11

ما هو Palletization مختلط بت؟

ناقشنا الشهر الماضي لوحة الألوان 6 بت، وهي طريقة تكميم ما بعد التدريب تقوم بتحويل أوزان 16 بت إلى 6 بت فقط لكل معلمة. يؤدي هذا إلى انخفاض مهم في حجم النموذج، ولكن تجاوز ذلك أمر صعب لأن جودة النموذج تتأثر أكثر فأكثر مع انخفاض عدد البتات.

أحد الخيارات لتقليل حجم النموذج بشكل أكبر هو الاستخدام وقت التدريب التكميم، والذي يتكون من تعلم جداول التكميم بينما نقوم بضبط النموذج. يعمل هذا بشكل رائع، لكنك تحتاج إلى تشغيل مرحلة ضبط دقيقة لكل نموذج تريد تحويله.

لقد استكشفنا بديلاً مختلفًا بدلاً من ذلك: لوحة مختلطة بت. بدلاً من استخدام 6 بتات لكل معلمة، نقوم بفحص النموذج وتحديد عدد بتات التكمية التي سيتم استخدامها لكل طبقة. نحن نتخذ القرار بناءً على مقدار مساهمة كل طبقة في تدهور الجودة الإجمالي، والذي نقيسه من خلال مقارنة نسبة نسبة الإشارة إلى الضوضاء (PSNR) بين النموذج الكمي والنموذج الأصلي في float16 الوضع، لمجموعة من المدخلات قليلة. نستكشف عدة أعماق بت لكل طبقة: 1 (!)، 2, 4 و 8. إذا تدهورت الطبقة بشكل ملحوظ عند استخدام 2 بت، على سبيل المثال، فإننا ننتقل إلى 4 وهكذا. قد يتم الاحتفاظ ببعض الطبقات في وضع 16 بت إذا كانت ضرورية للحفاظ على الجودة.

باستخدام هذه الطريقة، يمكننا تحقيق عمليات تكميم فعالة، على سبيل المثال، 2.8 بت في المتوسط، ونقيس التأثير على التحلل لكل مجموعة نحاولها. يتيح لنا ذلك أن نكون على اطلاع أفضل حول أفضل تقدير يمكن استخدامه لميزانياتنا ذات الجودة والحجم المستهدفين.

لتوضيح الطريقة، دعونا نفكر في “وصفات” التكميم التالية التي حصلنا عليها من إحدى عمليات التحليل لدينا (سنشرح لاحقًا كيف تم إنشاؤها):

{
  "model_version": "stabilityai/stable-diffusion-xl-base-1.0",
  "baselines": {
    "original": 82.2,
    "linear_8bit": 66.025,
    "recipe_6.55_bit_mixedpalette": 79.9,
    "recipe_4.50_bit_mixedpalette": 75.8,
    "recipe_3.41_bit_mixedpalette": 71.7,
  },
}

ما يخبرنا به هذا هو أن جودة النموذج الأصلي، كما تم قياسها بواسطة PSNR في float16، تبلغ حوالي 82 ديسيبل. يؤدي إجراء تكميم خطي ساذج 8 بت إلى انخفاضه إلى 66 ديسيبل. ولكن لدينا بعد ذلك وصفة يتم ضغطها إلى 6.55 بت لكل معلمة، في المتوسط، مع الحفاظ على نسبة الإشارة إلى الضوضاء (PSNR) عند 80 ديسيبل. تعمل الوصفتان الثانية والثالثة على تقليل حجم النموذج بشكل أكبر، مع الحفاظ على نسبة PSNR أكبر من تلك الخاصة بالتكميم الخطي 8 بت.

بالنسبة للأمثلة المرئية، هذه هي النتائج عند المطالبة a high quality photo of a surfing dog تشغيل كل واحدة من الوصفات الثلاث بنفس البذرة:

3.41 بت 4.50 بت 6.55 بت 16 بت (الأصلي)
3.41 4.50 6.55 16 بت

بعض الاستنتاجات الأولية:

  • في رأينا، تتمتع جميع الصور بجودة جيدة من حيث مدى واقعية مظهرها. الإصدارات 6.55 و4.50 قريبة من الإصدار 16 بت في هذا الجانب.
  • تنتج نفس البذرة تركيبة مكافئة، ولكنها لن تحافظ على نفس التفاصيل. سلالات الكلاب قد تكون مختلفة، على سبيل المثال.
  • قد يتراجع الالتزام بالموجه مع زيادة الضغط. في هذا المثال، يفقد الإصدار 3.41 العدواني اللوحة. يقارن PSNR فقط مقدار اختلاف وحدات البكسل بشكل عام، ولكنه لا يهتم بالموضوعات الموجودة في الصور. تحتاج إلى فحص النتائج وتقييمها لحالة الاستخدام الخاصة بك.

تعتبر هذه التقنية رائعة بالنسبة لـ Stable Diffusion XL لأنه يمكننا الاحتفاظ بنفس حجم UNet تقريبًا على الرغم من تضاعف عدد المعلمات ثلاث مرات مقارنة بالإصدار السابق. لكن الأمر لا يقتصر عليه! يمكنك تطبيق الطريقة على أي نموذج Stable Diffusion Core ML.

كيف يتم إنشاء وصفات مختلطة البت؟

يوضح المخطط التالي قوة الإشارة (PSNR بالديسيبل) مقابل تقليل حجم النموذج (% من حجم float16) لـ stabilityai/stable-diffusion-xl-base-1.0. ال {1,2,4,6,8}يتم إنشاء منحنيات -bit عن طريق تلوين المزيد من الطبقات تدريجيًا باستخدام لوحة ذات عدد ثابت من البتات. تم ترتيب الطبقات بترتيب تصاعدي من تأثيرها المعزول إلى قوة الإشارة من طرف إلى طرف، وبالتالي يتم تأخير تأثير الضغط التراكمي قدر الإمكان. يعتمد منحنى البت المختلط على التراجع إلى عدد أكبر من البتات بمجرد انخفاض التأثير المعزول للطبقة على سلامة الإشارة من طرف إلى طرف إلى ما دون العتبة. لاحظ أن جميع المنحنيات المستندة إلى لوحة الرسم تتفوق على التكميم الخطي 8 بت بنفس حجم النموذج باستثناء 1 بت.

مؤامرة PSNR مقابل تقليل الحجم

يتم تشغيل لوحة الألوان المختلطة على مرحلتين: تحليل و طلب.

الهدف من مرحلة التحليل هو العثور على نقاط في منحنى البت المختلط (النقطة البنية فوق جميع النقاط الأخرى في الشكل) حتى نتمكن من اختيار المقايضة بين الجودة والحجم المرغوبة. كما ذكرنا في القسم السابق، نقوم بالتكرار عبر الطبقات ونختار أدنى أعماق البت التي تؤدي إلى نتائج أعلى من عتبة PSNR المعينة. نكرر العملية لعتبات مختلفة للحصول على استراتيجيات تكميم مختلفة. وبالتالي فإن نتيجة العملية هي مجموعة من وصفات التكميم، حيث تكون كل وصفة مجرد قاموس JSON يوضح بالتفصيل عدد البتات المستخدمة لكل طبقة في النموذج. يتم تجاهل الطبقات ذات المعلمات القليلة ويتم الاحتفاظ بها في float16 من أجل البساطة.

تمر مرحلة التطبيق ببساطة بالوصفة وتطبق لوحة الألوان مع عدد البتات المحددة في بنية JSON.

التحليل عملية طويلة وتتطلب وحدة معالجة الرسومات (mps أو cuda)، حيث يتعين علينا تشغيل الاستدلال عدة مرات. بمجرد الانتهاء من ذلك، يمكن تنفيذ الوصفة في بضع دقائق.

نحن نقدم البرامج النصية لكل مرحلة من هذه المراحل:

تحويل النماذج المضبوطة بدقة

إذا قمت مسبقًا بتحويل نماذج Stable Diffusion إلى Core ML، فإن عملية XL باستخدام محول سطر الأوامر متشابهة جدًا. هناك علامة جديدة للإشارة إلى ما إذا كان الطراز ينتمي إلى عائلة XL، وعليك استخدامها --attention-implementation ORIGINAL إذا كان هذا هو الحال.

للحصول على مقدمة عن العملية، تحقق من التعليمات الموجودة في الريبو أو إحدى منشورات مدونتنا السابقة، وتأكد من استخدام العلامات أعلاه.

تشغيل لوحة الألوان المختلطة

بعد تحويل نماذج Stable Diffusion أو Stable Diffusion XL إلى Core ML، يمكنك اختياريًا تطبيق لوحة ألوان مختلطة باستخدام البرامج النصية المذكورة أعلاه.

ولأن عملية التحليل بطيئة، قمنا بإعداد وصفات للنماذج الأكثر شعبية:

يمكنك تنزيلها وتطبيقها محليًا للتجربة.

بالإضافة إلى ذلك، قمنا أيضًا بتطبيق أفضل ثلاث وصفات من تحليل Stable Diffusion XL على إصدار Core ML من UNet، ونشرناها هنا. لا تتردد في اللعب معهم ومعرفة كيف يعملون من أجلك!

أخيرًا، كما هو مذكور في المقدمة، قمنا بإنشاء خط أنابيب Stable Diffusion XL Core ML كاملًا يستخدم ملف 4.5-bit وصفة.

الموارد المنشورة

شاركها.
اترك تعليقاً