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

هذا الدليل الأولي مخصص للمتبنين الأوائل الذين يرغبون في إعادة توجيه TensorFlow بسهولة إلى أجهزتهم بطريقة فعالة. الدليل ليس خطوة بخطوة ويفترض معرفة بـ LLVM و Bazel و TensorFlow.

يوفر XLA واجهة مجردة يمكن للهندسة المعمارية الجديدة أو المسرع تنفيذها لإنشاء واجهة خلفية لتشغيل الرسوم البيانية TensorFlow. يجب أن تكون إعادة توجيه XLA أبسط وقابلة للتطوير بشكل ملحوظ من تنفيذ كل عمليات TensorFlow Op الحالية للأجهزة الجديدة.

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

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

السيناريو 1: بنية CPU الحالية التي لم يتم دعمها رسميًا بواسطة XLA بعد

في هذا السيناريو ، ابدأ بالنظر إلى الواجهة الخلفية لوحدة المعالجة المركزية XLA الحالية. تسهل XLA إعادة توجيه TensorFlow إلى وحدات معالجة مركزية مختلفة باستخدام LLVM ، نظرًا لأن الاختلاف الرئيسي بين واجهات XLA الخلفية لوحدات المعالجة المركزية هو الكود الذي تم إنشاؤه بواسطة LLVM. تختبر Google XLA لمعماريات x64 و ARM64.

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

إذا لم تكن هناك خلفية LLVM موجودة ولكن يوجد نوع آخر من مُنشئ الكود ، فمن الممكن إعادة استخدام معظم الواجهة الخلفية لوحدة المعالجة المركزية الحالية.

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

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

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

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

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

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