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

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

במהלך יישום ההפעלה

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

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

  1. ב-StablehloOps.td:

    1. צריך לוודא שה-summary ב-ODS של ההפעלה תואם לפורמט הסטנדרטי. (כרטיס קשור)
    2. מוסיפים תגובות שמפנות לתוויות אילוצים (למשל Cn או In) מהמפרט בפורמט xyz_cn או xyz_in, בפעולה XyzOp, כדי לזהות את ההתאמה בין האילוצים ב-ODS לבין המפרט. הדוגמה הבאה מראה איך להוסיף תוויות אילוצים כתגובות לצד תוויות האילוצים 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. יש להוסיף קובץ בשם interpret_<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.
    4. בוחרים את שם הפונקציה של הבדיקות באמצעות הפורמט xyz_cn_im_... עבור אילוצים לבדיקת פונקציה Cn, Im וכו' בהפעלה XyzOp. במקרים שבהם הפורמט המוצע לא חל, השאירו את השם הקיים.
    5. אחרי שמשלימים את השלב שלמעלה, ממיינים את כל הבדיקות שקשורות לפעולה לפי סדר אלפביתי לפי שם הפונקציה.
    6. ממשיכים להוסיף בדיקות עד שהעותק יופיע יותר מ-90% כיסוי של המבצע
  6. ב-infer_stablehlo.mlir:

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

    1. מוסיפים קישור אל interpret_<op_mnemonic>.mlir לקטע "דוגמאות" (למשל דוגמאות נוספות).
    2. חשוב לוודא שיש במפרט רק דוגמה אחת.
    3. מוודאים שדוגמה למפרט תואמת להנחיות הבדיקה.
    4. חשוב לוודא שהבדיקה לדוגמה של המפרט ניתנת לפענוח.
    5. מוודאים שדוגמה למפרט זהה לזו שב-ODS.
  8. בכתובת status.md:

    1. יש לעדכן את העמודה 'תרגום שיחה פעילה' לyes.