قائمة التحقق من مواصفات StableHLO

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

  1. تأكَّد من أنّ عمود "المواصفات" في الحقل status.md يشير إلى "نعم"، وأضِف صفًا في حال إضافة عملية جديدة.
  2. تحقَّق مما إذا كان عنوان القسم يتطابق مع تذكّر العملية في سياسة ODS.
  3. تحقَّق مما إذا كان قسم "الدلالات" يطابق دلالات العمليات في XLA.
  4. تحقَّق مما إذا كان قسما "الإدخالات" و "النتائج":
    1. أدرج نفس العناصر مثل ODS.
    2. أدرِج العناصر نفسها مثل HloInstruction::CreateFromProto.
    3. يتم ترتيبها تمامًا مثل ODS.
    4. في حال وجود أي حالات عدم تطابق، تأكَّد من أنّ هناك تذاكر مقابلة.
  5. تحقَّق مما إذا كان قسم "القيود":
    1. يطابق shape_inference.cc الخاصة بـ XLA.
    2. يطابق hlo_verifier.cc الخاصة بـ XLA.
    3. يطابق ODS.
    4. يطابق StablehloOps.cpp.
    5. في حال وجود أي حالات عدم تطابق، تأكَّد من أنّ هناك تذاكر مقابلة. اربط كل تلك التذاكر في المواصفات، في مواقع جغرافية محدّدة قدر الإمكان (على سبيل المثال، إذا كانت التذكرة تتعلق بقيد لم يتم تنفيذه، يمكنك ربط طلب الدعم مباشرةً في ذلك القيد).
    6. إذا كانت الأجزاء المكافئة من نظامَي ODS وStablehloOps.cpp تتطابق مع المواصفات، تأكَّد من أنّ عمودَي "التحقّق" و "استنتاج النوع" في status.md يتضمّنان كلمة "نعم".
  6. تحقَّق مما إذا كان قسم "أمثلة":
    1. لها مثال واحد فقط. (في المستقبل، سنضيف روابط إلى مزيد من الأمثلة من مجموعة اختبار الترجمة الفورية من StableHLO).
    2. استخدِم بنية MLIR صالحة من خلال تنفيذ stablehlo-opt على أمثلة الرموز البرمجية.
    3. تستخدم بنية MLIR العامة التي يمكن الحصول عليها من خلال تنفيذ stablehlo-opt -mlir-print-op-generic (نلتزم بالبنية العامة في المواصفات لتجنّب الحاجة إلى تغيير المواصفات في تغييرات الطابعات القصيرة).
  7. تحقَّق من أنّ description في ODS المتعلّق بالعملية:
    1. تتضمن الجملة الأولى من المواصفات.
    2. ثم تقوم بربط القسم المقابل من المواصفات.
    3. بعد ذلك، يستخدم المثال نفسه المستخدَم في المواصفات، ولكن من خلال بنية بسيطة يمكن الحصول عليها عن طريق تشغيل stablehlo-opt.
  8. تأكَّد من أنّ الملفات المتعلقة بتنفيذ قيود التحقّق واستنتاج النوع تتّبع الإرشادات المذكورة أدناه:
    1. اتّبِع الإرشادات #1 الخاصة بأداة StablehloOps.td.
    2. اتّبِع الإرشادات #2 التي تخصّ TypeInference.cpp وStablehloOps.cpp.
    3. اتّبِع الإرشادات رقم #5 بخصوص ops_stablehlo.mlir.
    4. اتّبِع الإرشادات الواردة في رقم 6 بخصوص infer_stablehlo.mlir.
  9. قيِّم العملية التشغيلية للاطّلاع على التأثيرات الجانبية وقابلية التوقُّع.
    1. إذا لم يكن للعملية آثار جانبية ويمكن توقّعها دائمًا، أضِف السمة Pure إليها. وهذا أمر نادر الحدوث، لأنّ معظم العمليات تسمح بالأشكال الديناميكية، ما قد يؤدي إلى عدم تطابق الأشكال في وقت التشغيل، وهو سلوك غير محدّد. قد يكون لبعض العمليات سلوك غير محدّد في مواقف أخرى أيضًا. الغالبية العظمى من العمليات ليس لها أي آثار جانبية (يجب أن تتضمّن السمة NoMemoryEffect).
    2. تندرج معظم العمليات ضمن إحدى سمات HLO_SpeculatableIf*. إذا لم تتوافق العملية مع أي من هذه القيم، أضِف السمة ConditionallySpeculatable ونفِّذ طرق الواجهة. يمكنك إضافة اختبارات إلى stablehlo/tests/ops_speculatability.mlir لتغطية منطق التوقُّع.