تطوير خلفية جديدة للغة 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 ولكن يتوفر نوع آخر من أدوات إنشاء الرموز، من المفترض أن تتم إعادة استخدام معظم الواجهة الخلفية لوحدة المعالجة المركزية الحالية.

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

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

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

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

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

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