Shardy هو نظام تقسيم مصفوفات مستند إلى MLIR لجميع اللهجات. تم إنشاء هذه الخدمة من خلال تعاون فريقَي GSPMD و PartIR، وهي تجمع أفضل ما في كلا النظامَين، وتجربة الفريقَين والمستخدمين المشتركة.
المزايا
- مزيد من التحكّم وإمكانية التوقّع للمستخدمين من خلال الجمع بين الانتشار في GSPMD والتقسيم المتزايد في PartIR
- ميزات جديدة مستندة إلى التجربة المشتركة، مثل إتاحة إعادة التشكيل التي تؤدي إلى زيادة التواصل مع المستخدمين ما لم يعرفوا كيفية التعامل مع هذه الميزات
- سهولة الاستخدام وإمكانية تصحيح الأخطاء بشكل أفضل لزيادة سرعة المستخدم النهائي، على سبيل المثال، باستخدام تمثيل تقسيم مستند إلى محور
- قاعدة بيانات برمجية بسيطة ومفتوحة المصدر تستخدم MLIR، مع مجموعة أوسع من المساهمين النشطين (داخليين وخارجيين وفي مناطق زمنية مختلفة) لدعم المستخدِمين
المكونات
- تمثيل التجزئة: تمثيل تجزئة يستند إلى المحاور ومرتبط بشبكة منطقية معيّنة (من بين شبكات متعددة محتملة)، ويسمح بفرض قيود على تجزئات السمات والمحاور، وتقسيم المحاور لعمليات مثل إعادة التنسيق، وتحديد أولويات التقسيم المتزايد، وغير ذلك.
- واجهات برمجة تطبيقات المُجمِّع: مجموعة من مكوّنات المُجمِّع التي يمكن استخدامها إلى جانب
تمثيل التجزئة للتأثير في انتشار التجزئة
- تقسيمات الإدخال/الإخراج: يمكنك إرفاق تقسيم بأحد مدخلات الدالة الرئيسية أو مخرجاتها للإشارة إلى أنّه يجب تقسيم مصفوفة الإدخال/الإخراج بهذه الطريقة عند إرسالها إلى الدالة أو استلامها منها.
- قيد التجزئة: يمكنك إرفاق عملية تجزئة بعنصر مصفوفة وسيط (مثل نتيجة matmul) للإشارة إلى أنّ هذه هي الطريقة التي يجب بها تجزئة هذا العنصر المصفوفة أو مجموعة فرعية من استخداماته.
- تجزئة مثل/كـ: تجميع مصفوفات متعددة حسب معرّف للإشارة إلى أنّه ينبغي تجزئتها بالطريقة نفسها
- الحساب اليدوي: يُحيط بحساب فرعي يتم تقسيمه يدوياً باستخدام مجموعة فرعية من محاور الشبكة، حيث يتم تحديد عمليات التجزئة على طول تلك المحاور اليدوية لجميع المدخلات والمخرجات، وداخل الحساب الفرعي تكون أنواع الن tensors محلية بالنسبة إلى عمليات التجزئة هذه.
- نشر التجزئة: خوارزمية نشر تجمع بين أولويات المستخدمين
وقيود التجزئة، مع نماذج تكاليف المُجمِّع والاستدلالات:
- الأولويات التي يحدّدها المستخدم، مثل استخدام التوازي في الدُفعات ثم ZeRO
- الأولويات المستندة إلى العمليات، مثل العمليات على مستوى العنصر أولاً ثم عمليات ضرب المصفوفات، وما إلى ذلك
- أساليب حدسية أكثر دقة، مثل تفضيل سمات الحِزم
- أداة تقسيم SPMD: عنصر يقلل من قرارات نشر التجزئة من خلال
تقسيم البرنامج إلى برنامج SPMD، مع إضافة عمليات نقل/تنسيق البيانات اللازمة والعمليات الجماعية في هذه العملية.
- على المدى القصير، سيستخدم التنفيذ الأولي أداة تقسيم SPMD الحالية في GSPMD.
- على المدى الطويل، نخطّط لإنشاء أداة تقسيم جديدة لنموذج SPMD تستند إلى MLIR.
مستودع الرموز البرمجية
يجري تطوير مشروع Shardy بشكل نشط، ونسعى للحصول على ملاحظات من منتدى المفتوحة المصدر. يتوفّر رمز Shardy على الرابط https://github.com/openxla/shardy.