لهجة VHLO

اطّلِع على vhlo_checklist.md لمعرفة الخطوات التي يجب اتّباعها عند إجراء تغييرات على VHLO.

ما هي لهجة VHLO؟

يتم استخدام لهجة VHLO (Versioned StableHLO) لسلسلة الرسائل والاستقرار. ويقدّم هذا التقرير نبذة عن لهجة StableHLO في وقت معيّن من خلال تحديث عناصر البرنامج الفردية.

‫VHLO هي لهجة للإضافة فقط تتضمّن عمليات وأنواعًا وسمات ذات إصدارات، ما يعني أنّه بعد إضافة ميزة إلى اللهجة، لا يمكن تعديلها بأي طريقة تؤثر في الدلالات.

تتطلّب أي تغييرات على عملية أو نوع أو سمة إضافة إصدار جديد إلى اللهجة. على سبيل المثال، إذا تمّت إضافة قيمة my_op افتراضية إلى دالة StableHLO في 0.9.0، ولكن تم تغييرها في 0.11.0، سيكون لدينا ما يلي في VHLO:

// This represents the StableHLO version of the op from 0.9.0 -> 0.10.0
// Both the lower and the upper bound of versions are inclusive
def VHLO_MyOpV1 : VHLO_Op<"my_op_v1", "0.9.0", "0.10.0"> {
  let arguments = (ins
    VHLO_AnyType:$operand
  );
  let results = (outs VHLO_AnyType:$result);
}

// This represents the StableHLO version of the op from 0.11.0 -> current
def VHLO_MyOpV2 : VHLO_Op<"my_op_v2", "0.11.0", "current"> {
  let arguments = (ins
    VHLO_AnyType:$operand,
    VHLO_AnyAttr:$attr  // New attribute added to StableHLO in 0.11.0
  );
  let results = (outs VHLO_AnyType:$result);
}

لا تتضمّن لهجة StableHLO سوى أحدث إصدار من العمليات. في مثال المعالجة الجارية، لن تتضمّن لهجة StableHLO في الإصدار 0.11.0 سوى StableHLO_MyOp التي تحتوي على operand وattr، في حين تُسجِّل لهجة VHLO كل مرحلة من مراحل تطور الإجراء.

ما أهمية VHLO؟

يتيح لنا استخدام لهجة ذات إصدارات مختلفة استهداف الإصدارات السابقة من مجموعة العمليات StableHLO. ويشمل ذلك التوافق مع الإصدارات السابقة واللاحقة في عمليات التحويل بين العمليات في لهجة VHLO.

التوافق مع الإصدارات الأحدث: يتم توفير التوافق مع الإصدارات الأحدث من خلال تحويل إلى VHLO وخفض إصدار العمليات إلى إصدار مستهدَف. إذا كان من الممكن رجوع كل عملية تشغيل/نوع/حدث في برنامج VHLO إلى الإصدار المستهدف، يمكن ضمان إمكانية إعادة التوجيه وتحويله إلى StableHLO على المستهلك الذي يشغل إصدارًا أكبر من الإصدار المستهدف أو مساويًا له، لأنّ VHLO تحتوي على لقطة للتجربة في ذلك الوقت.

صورة متوافقة مع الإصدارات المستقبلية

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

التوافق مع الإصدارات السابقة: يتم توفير التوافق مع الإصدارات السابقة من خلال ترقية عمليات VHLO إلى أحدث إصدار (إذا لزم الأمر)، ثم تحويل عملية إلى StableHLO. يمكن ترقية جميع برامج VHLO ضمن فترة التوافق إلى StableHLO، ما يعني أنّه يمكن لإصدارات مختلفة من المستهلكين تحويل ترميز الحمولة VHLO نفسها من إصدار سابق.

صورة التوافق مع الإصدارات القديمة

والأهم من ذلك هو أن VHLO موجز وراء التسلسل. وهذا يعني أنّ منصّات ML البرمجيّة (المطوّرون) لا تحتاج إلا إلى استهداف عمليات StableHLO، وأنّ أنظمة معالجة compiler الخلفية (المستخدِمون) لا تحتاج إلا إلى التوافق مع أحدث إصدار، وهو مجموعة عمليات StableHLO. تتم معالجة عمليات التحويل من VHLO وإليه باستخدام آلية تتم صيانتها في مستودع StableHLO.

إصدارات تنسيق الرموز الثنائية في MLIR

للحفاظ على التوافق مع الإصدارات المستقبلية، تتضمّن إصدارات StableHLO إصدارًا مرتبطًا بتنسيق MLIR Bytecode. بالإضافة إلى ذلك، سيستخدم أحدث إصدار من StableHLO أحدث إصدار من تنسيق MLIR Bytecode. عند زيادة إصدار تنسيق MLIR للرمز الثنائي، سيزيد الإصدار التالي من StableHLO الإصدار الثانوي ويُعدِّل Version.cpp لاستخدام أحدث إصدار من تنسيق MLIR للرمز الثنائي.

للحصول على تفاصيل حول تنسيق MLIR Bytecode وأسباب استخدامه في StableHLO، يمكنك الاطّلاع على bytecode.md.