تطوير خلفية جديدة لـ XLA

هذا الدليل موجه لمهندسي النظام الذين يريدون من XLA إخراج البرامج التي تستهدف أجهزتهم بكفاءة. لا يتضمّن الدليل شرحًا مفصّلاً ويفترض التعرّف على لغات LLVM وBazel وXLA.

يوفّر XLA واجهة مجردة يمكن لبنية أو مسرِّعة أعمال جديدة تنفيذها لإنشاء خلفية لتشغيل مخرجات برامج تعلُّم الآلة من XLA. ينبغي أن تكون إعادة استهداف XLA أبسط وأسهل بكثير من تنفيذ كل عملية قائمة من إطار عمل واجهة أمامية مثل PyTorch أو TensorFlow للأجهزة الجديدة.

تنقسم معظم عمليات التنفيذ إلى أحد السيناريوهات التالية:

  1. بنية وحدة المعالجة المركزية الحالية غير متوافقة رسميًا بعد من قِبل XLA، مع خلفية LLVM حالية أو بدونها.
  2. أجهزة لا تشبه وحدة المعالجة المركزية (CPU) مزودة بخلفية حالية من نوع LLVM.
  3. أجهزة لا تشبه وحدة المعالجة المركزية (CPU) بدون واجهة خلفية حالية LLVM

السيناريو 1: بنية وحدة المعالجة المركزية الحالية غير معتمدة رسميًا من قِبل XLA بعد

في هذا السيناريو، ابدأ بإلقاء نظرة على الخلفية الحالية لوحدة المعالجة المركزية XLA. تسهّل لغة XLA استهداف وحدات معالجة مركزية مختلفة باستخدام LLVM، لأنّ الفرق الرئيسي بين خلفيات XLA لوحدات المعالجة المركزية هو الرمز الذي تنشئه LLVM.

إذا كان مورد الجهاز لديه خلفية LLVM لجهازه، من السهل ربط الواجهة الخلفية بـ LLVM المصمَّم بتنسيق XLA. في وضع JIT، تصدر الواجهة الخلفية لوحدة المعالجة المركزية XLA رمزًا لوحدة المعالجة المركزية المضيفة. وبالنسبة إلى التجميع في وقت مبكر، يمكن أن توفّر xla::AotCompilationOptions نموذجًا ثلاثيًا للنموذج اللغوي الكبير (LLVM) لضبط البنية الهدف.

إذا لم تكن هناك واجهة خلفية LLVM، ولكن يتوفّر نوع آخر من أدوات إنشاء الرموز، سيكون من الممكن إعادة استخدام معظم الواجهة الخلفية الحالية لوحدة المعالجة المركزية (CPU).

السيناريو 2: أجهزة لا تشبه وحدة المعالجة المركزية (CPU) مزودة بخلفية حالية LLVM

من الممكن وضع نموذج لتنفيذ xla::Compiler جديد على فئتي xla::CPUCompiler وxla::GPUCompiler الحالية، لأنّ هاتين الفئتين تصدران حاليًا LLVM IR. واستنادًا إلى طبيعة الأجهزة، من المحتمل أن يلزم تغيير العديد من جوانب إنشاء LLVM IR، ولكن يمكن مشاركة الكثير من الرموز مع الخلفيات الحالية.

وخير مثال على ذلك هو الخلفية الخلفية لوحدة معالجة الرسومات في واجهة XLA. تستهدف الواجهة الخلفية لوحدة معالجة الرسومات ISA بخلاف وحدة المعالجة المركزية (CPU)، ولذا فإن بعض جوانب إنشاء الأكواد الخاصة بها فريدة من نوعها في نطاق وحدة معالجة الرسومات. يمكن للأنواع الأخرى من الأجهزة، مثل أنظمة وسيط عرض البيانات (DSP)، مثل Hexagon (التي تحتوي على خلفية LLVM متجهة المصدر)، إعادة استخدام أجزاء من منطق انبعاثات LLVM IR، لكن الأجزاء الأخرى ستكون فريدة من نوعها.

السيناريو 3: أجهزة لا تشبه وحدة المعالجة المركزية (CPU) بدون واجهة خلفية LLVM حالية

إذا لم يكن ممكنًا استخدام LLVM، الخيار الأفضل هو تنفيذ خلفية جديدة للغة XLA للأجهزة المطلوبة. يتطلب هذا الخيار أكبر جهد. وفي ما يلي الفئات التي يجب تنفيذها:

  • StreamExecutor: لا يلزم استخدام جميع طُرق StreamExecutor على العديد من الأجهزة. راجِع عمليات تنفيذ StreamExecutor الحالية للحصول على التفاصيل.
  • xla::Compiler: تضم هذه الفئة البيانات الحسابية لآلية HLO في xla::Executable.
  • xla::Executable: تُستخدم هذه الفئة لبدء عملية حاسوبية مجمّعة على النظام الأساسي.
  • xla::TransferManager: تتيح هذه الفئة للخلفيات توفير آليات خاصة بالنظام الأساسي لإنشاء بيانات حرفية XLA من مقابض ذاكرة الجهاز المحدّدة. بعبارة أخرى، يساعد هذا البرنامج على تغليف البيانات من المضيف إلى الجهاز ثم الرجوع إليه.