يحتوي النظام البيئي TensorFlow على عدد من المجمعين والمحسّنين الذين يعملون على مستويات مختلفة من مجموعة البرامج والأجهزة. بالنسبة لأولئك الذين يستخدمون Tensorflow يوميًا ، يمكن أن ينتج عن هذا المكدس متعدد المستويات صعوبة في فهم الأخطاء ، سواء في وقت التجميع أو وقت التشغيل ، المقترن باستخدام أنواع مختلفة من الأجهزة (GPU ، TPU ، منصات متحركة ، إلخ)
يمكن تمثيل هذه المكونات ، بدءًا من رسم Tensorflow ، في شكل مثل هذا المخطط:
إنه في الواقع أصعبفي هذا المخطط ، يمكننا أن نرى أنه يمكن تشغيل الرسوم البيانية Tensorflow بعدة طرق مختلفة.
ملاحظةفي TensorFlow 2.0 ، يمكن أن تكون الرسوم البيانية ضمنية ؛ يمكن للتنفيذ الجشع تشغيل العمليات بشكل فردي أو في مجموعات أو على رسم بياني كامل. يجب تحسين وتنفيذ هذه الرسوم البيانية أو أجزاء من الرسم البياني.
على سبيل المثال:
- نرسل الرسوم البيانية إلى Tensorflow المنفذ ، الذي يدعو حبات المتخصصة مكتوبة بخط اليد
- قم بتحويلها إلى XLA HLO (تمثيل محسن عالي المستوى لـ XLA) - تمثيل رفيع المستوى لمحسن XLA ، والذي بدوره يمكنه استدعاء برنامج التحويل البرمجي LLVM لوحدة المعالجة المركزية (CPU) أو وحدة معالجة الرسومات (GPU) ، أو الاستمرار في استخدام XLA لـ TPU ، أو الجمع بينهما.
- نقوم بتحويلها إلى TensorRT أو nGraph أو تنسيق آخر لمجموعة تعليمات متخصصة يتم تنفيذها في الأجهزة.
- نقوم بتحويلها إلى تنسيق TensorFlow Lite أو تشغيلها في وقت تشغيل TensorFlow Lite أو تحويلها إلى كود لتشغيلها على GPU أو DSP عبر Android Neural Networks API (NNAPI) أو ما شابه ذلك.
هناك أيضًا طرق أكثر تعقيدًا ، بما في ذلك العديد من التحسينات التي يتم تمريرها على كل طبقة ، على سبيل المثال ، في إطار Grappler ، الذي يعمل على تحسين العمليات في TensorFlow.
على الرغم من أن هذه التطبيقات المختلفة للمترجمين والتمثيلات الوسيطة تعمل على تحسين الأداء ، فإن تنوعها يمثل مشكلة للمستخدمين النهائيين ، مثل رسائل الخطأ المربكة عند إقران هذه الأنظمة الفرعية. أيضًا ، يجب على منشئي البرامج وأكوام الأجهزة الجديدة ضبط مقاطع التحويل والتحويل لكل حالة جديدة.
وبفضل كل هذا ، يسرنا أن نعلن عن MLIR ، وهو تمثيل وسيط متعدد المستويات. هذا هو تنسيق طريقة عرض متوسطة ومكتبات تجميع للاستخدام بين طريقة عرض نموذج ومترجم منخفض المستوى يقوم بإنشاء تعليمات برمجية تعتمد على الأجهزة. نقدم MLIR ، نريد أن نفسح المجال لبحوث جديدة في تطوير تحسين المجمعين وتنفيذ المجمعين على أساس مكونات الجودة الصناعية.
نتوقع أن يكون MLIR موضع اهتمام العديد من المجموعات ، بما في ذلك:
- الباحثون المترجمون ، وكذلك الممارسون الذين يرغبون في تحسين الأداء واستهلاك الذاكرة لنماذج التعلم الآلي ؛
- يبحث مصنعو الأجهزة عن طريقة لدمج أجهزتهم مع Tensorflow ، مثل TPU ، والمعالجات العصبية المتنقلة في الهواتف الذكية ، وغيرها من ASICs المخصصة ؛
- الأشخاص الذين يرغبون في إعطاء لغات البرمجة الفوائد التي يوفرها تحسين برامج التحويل البرمجي ومسرعات الأجهزة ؛
ما هو MLIR؟
MLIR هي في الأساس بنية تحتية مرنة للمترجمين الأمثل الحديثة. هذا يعني أنه يتكون من مواصفات التمثيل الوسيط (IR) ومجموعة من الأدوات لتحويل هذا التمثيل. عندما نتحدث عن المترجمين ، فإن الانتقال من طريقة عرض ذات مستوى أعلى إلى طريقة عرض ذات مستوى أقل يُسمى انخفاض ، وسوف نستخدم هذا المصطلح في المستقبل.
بنيت MLIR تحت تأثير LLVM ويستعير بلا خجل العديد من الأفكار الجيدة منه. لديه نظام كتابة مرن ، وهو مصمم لتمثيل وتحليل وتحويل الرسوم البيانية ، ويجمع بين العديد من مستويات التجريد في مستوى تجميع واحد. تتضمن هذه التجريدات عمليات Tensorflow ومناطق حلقة متعددة السطوح متداخلة وتعليمات LLVM وعمليات وأنواع النقطة الثابتة.
لهجات MLIR
من أجل الفصل بين أهداف البرامج والأجهزة المختلفة ، يحتوي MLIR على "لهجات" ، بما في ذلك:
- TensorFlow IR ، والذي يتضمن كل ما يمكن القيام به في الرسوم البيانية TensorFlow
- XLA HLO IR ، المصممة للحصول على جميع المزايا التي يوفرها برنامج التحويل البرمجي XLA ، والذي يمكننا الحصول على كود الـ TPU الخاص به ، وليس فقط.
- لهجة تقارب تجريبية مصممة خصيصا لتمثيل متعدد السطوح والتحسينات
- LLVM IR ، 1: 1 يطابق عرض LLVM الأصلي ، مما يسمح لـ MLIR بإنشاء كود لوحدة معالجة الرسومات ووحدة المعالجة المركزية باستخدام LLVM.
- تم تصميم TensorFlow Lite لإنشاء رمز للمنصات المحمولة
تحتوي كل لهجة على مجموعة من العمليات المحددة ، باستخدام المتغيرات ، مثل: "إنه عامل ثنائي ، ومدخلاته وإخراجه من نفس النوع."
ملحقات MLIR
لا يحتوي MLIR على قائمة ثابتة ومضمنة من العمليات الداخلية الجوهرية. يمكن لللهجات أن تحدد أنواعًا مخصصة تمامًا ، وبهذه الطريقة يمكن لـ MLIR نمذجة أشياء مثل نظام LLVM IR type (الذي يحتوي على مجاميع من الدرجة الأولى) ، وتجريدات لغة المجال ، مثل الأنواع الكمية ، والمهمة لمسرعات ML المحسنة ، وفي المستقبل ، حتى نظام سويفت أو كلانج.
إذا كنت ترغب في إرفاق مترجم جديد منخفض المستوى بهذا النظام ، يمكنك إنشاء لهجة جديدة والنزول من لهجة الرسم البياني TensorFlow إلى لهجتك. هذا يبسط المسار لمطوري الأجهزة ومطوري الترجمة. يمكنك توجيه اللهجة إلى مستويات مختلفة من نفس النموذج ، سيكون المحسّنون رفيعو المستوى مسؤولين عن أجزاء معينة من IR.
للباحثين عن التحويل البرمجي ومطوري الإطار ، يتيح لك MLIR إنشاء تحويلات على كل مستوى ، ويمكنك تحديد العمليات الخاصة بك والتجريدات في IR ، مما يسمح لك بتصميم مهام التطبيق بشكل أفضل. وبالتالي ، فإن MLIR هي أكثر من مجرد بنية أساسية مترجمة خالصة ، وهي LLVM.
على الرغم من أن MLIR تعمل كمترجم لـ ML ، إلا أنها تتيح أيضًا استخدام تقنيات التعلم الآلي! هذا مهم جدًا للمهندسين الذين يطورون مكتبات رقمية ، ولا يمكنهم تقديم الدعم لمجموعة كاملة من طرز وأجهزة ML. تسهل مرونة MLIR في استكشاف استراتيجيات نزول الكود عند التنقل بين مستويات التجريد.
ما التالي
لقد فتحنا
مستودع GitHub وندعو جميع المهتمين (راجع دليلنا!). سنقوم بإصدار شيء أكثر من صندوق الأدوات هذا - مواصفات لهجة TensorFlow و TF Lite ، في الأشهر القادمة. يمكننا إخبارك أكثر ، لمعرفة المزيد ، راجع
العرض التقديمي الذي
قدمه كريس لوتنر و
README على جيثب .
إذا كنت ترغب في مواكبة كل الأشياء المتعلقة بـ MLIR ، فقم بالانضمام إلى قائمتنا
البريدية الجديدة ، والتي ستركز قريبًا على إعلانات الإصدارات المستقبلية لمشروعنا. ابق معنا