רשימת משימות לתרגום StableHLO

במסמך הזה נסכם את ההנחיות להטמעה ולבדיקה של הכלי לתרגום. אנחנו כוללים בכוונה כמה פעולות משניות שקשורות למאמת ולהסקת טיפוסים, כדי להתקדם בנושאים האלה במקביל להטמעת המתורגמן.

במהלך הטמעת הפעולה

  1. עליכם לכתוב אסטרטגיית בדיקה כתובה במפורש (בתיאור של ה-PR) שדומה לזו, ולהשתמש בה כחומר עזר כשבודקים את שיטות האימות והסוג להסקת המסקנות, ואת הבדיקות המתאימות. הבודק יבדוק שוב שהתיאור מקיף.
  2. כדאי להיעזר ב-hlo_evaluator כדי לזהות פרטי הטמעה מורכבים וחוסרים פוטנציאליים בפונקציונליות.
  3. אם מצאתם באגים או פונקציונליות חסרה, תוכלו לשלוח כרטיסים לרכיבי התוכנה המתאימים.

אחרי הטמעת הפעולה

  1. ב-StablehloOps.td:

    1. צריך לוודא שהשדה summary בגוף ליישוב מחלוקות מחוץ לכותלי בית המשפט תואם לפורמט הסטנדרטי. (כרטיס קשור)
    2. מוסיפים תגובות שמתייחסות לתוויות האילוצים (למשל Cn או In) מהמפרט בפורמט xyz_cn או xyz_in, עבור הפעולה XyzOp, כדי לזהות את ההתאמה בין האילוצים ב-ODS לבין המפרט. בדוגמה הבאה מוסבר איך מוסיפים את תוויות האילוצים כתגובות לצד mlir Traits ו-TypeConstraints. הערה xyz_c4 מתייחסת למגבלות שהוגדרו בכיתה StableHLO_FooOp (למשל StableHLO_ShapedInterfaceOp,‏ StableHLO_UnaryElementwiseOp,‏ StableHLO_Op וכו').

       def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1,
           Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/
            ...
         let summary = "Xyz operation";
         let arguments = (ins
            1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/
            HLO_Tensor:$b, /*xyz_i2*/
            ....
         );
      );
      
  2. בקובצי TypeInference.cpp ו-StablehloOps.cpp:

    1. מוחקים תגובות עם הכיתוב "אימות המאפיינים הבאים: ...".
    2. מוסיפים תגובות שמתייחסות לתוויות האילוצים (למשל Cn או In) מהמפרט בפורמט xyz_cn או xyz_in, עבור הפעולה XyzOp, כדי לזהות אילו חלקים של מאמתים ופונקציות לעיצוב תואמים לאילו אילוצים במפרט.
      1. אפשר להוסיף לתגובה כמה תוויות אילוצים או כמה תגובות עם אותה תווית אילוצים. הכל תלוי באופן שבו האילוצים מוטמעים. אם יש אילוצים רצופים, אפשר לצמצם אותם ל-xyz_cn...xyz_cm, xyz_in...xyz_jn.
      2. אם יש חוסר התאמה בין המגבלות בהטמעה לעומת המגבלות במפרט, צריך לוודא שיש בעיה פתוחה שמשקפת את הפער הזה.
  3. בבדיקות של מתורגמים:

    1. אפשר להוסיף קובץ בשם <op_mnemonic>.mlir.
    2. כותבים בדיקות בהתאם להנחיות לבדיקה.
  4. בספריית testdata:

    1. מריצים את כל הבדיקות המושבתות שנכללות בפעולה החדשה שנוספה.
    2. אם הבדיקות עוברות, מפעילים אותן על ידי המרת RUN-DISABLED ל-RUN.
    3. אם בדיקה נכשלת מסיבה כלשהי שאינה אי-התאמה ברמת הדיוק, צריך לתקן את ההטמעה או את הבדיקה.
    4. במקרים של אי-התאמות מדויקות, מתייגים את הבדיקה באמצעות RUN-DISABLED(#1278) (אם עדיין לא עשיתם זאת).
  5. ב-ops_stablehlo.mlir:

    1. חשוב לוודא שיש לפחות בדיקה אחת (חיובית או שלילית) לכל אילוץ במאמת ובשיטות להסקת הטיפוס. אילוצים שכלולים ב-ODS לא ייבדקו. רוב הבדיקות האלה יהיו שליליות, כדי לבדוק שהאילוצים לא מתקיימים, או חיוביות, כדי לבדוק שהצורה המשוערת נכונה.
    2. מוודאים שכל הבדיקות שקשורות לפעולה שנבדקה נמצאות יחד.
    3. חשוב לוודא שכל הבדיקות שקשורות לפעולה שנבדקת מתחילות במאקרו CHECK-LABEL lit.
    4. בוחרים את שם הפונקציה של הבדיקות לפי הפורמט xyz_cn_im_... לבדיקת אילוצים של פונקציה Cn, Im וכו' עבור הפעולה XyzOp. במקרים שבהם הפורמט המוצע לא רלוונטי, משאירים את השם הקיים.
    5. אחרי השלמת השלב שלמעלה, ממיינים את כל הבדיקות שקשורות לפעולה שנבדקת לפי סדר אלפביתי על סמך שם הפונקציה.
    6. ממשיכים להוסיף בדיקות עד שמדד ccov מראה כיסוי של 90% או יותר של הפעולה.
  6. בקובץ infer_stablehlo.mlir:

    1. חשוב לוודא שכל האילוצים שקשורים לבדיקות של הסקת הצורה נמצאים בקובץ הזה, בהתאם לאותן הנחיות למתן שמות שצוינו למעלה.
    2. מעבירים את כל הבדיקות של מסקנות הצורה מהקובץ ops_stablehlo.mlir לקובץ הזה.
  7. בקובץ spec.md:

    1. מוסיפים קישור אל stablehlo/tests/interpret/<op_mnemonic>.mlir לקטע 'דוגמאות' (למשל, דוגמאות נוספות).
    2. מוודאים שבמפרט יש רק דוגמה אחת.
    3. חשוב לוודא שדוגמת המפרט עומדת בהנחיות לבדיקה.
    4. מוודאים שאפשר להבין את הבדיקה לדוגמה של המפרט.
    5. צריך לוודא שהדוגמה למפרט זהה לזו שמופיעה בגוף ליישוב מחלוקות מחוץ לכותלי בית המשפט.
  8. בקובץ status.md:

    1. מעדכנים את העמודה 'מתרגם' לערך yes.