ניב VHLO

ב-vhlo_checklist.md מוסבר איך לבצע שינויים ב-VHLO.

מהו הדיאלקט VHLO?

הדיאלקט של VHLO (גרסה 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 יש קובץ snapshot של קבוצת הפעולות באותו זמן.

קובץ אימג&#39; עם תאימות קדימה

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

תאימות לאחור: כדי לספק תאימות לאחור, משדרגים את הפעולות של Vhlo לגרסה האחרונה שלהן (אם צריך), ואז ממירים את הפעולה חזרה ל-StableHLO. כל תוכניות ה-VHLO בחלון התאימות ניתנות לשדרוג ל-StableHLO, כלומר גרסאות שונות של צרכנים יכולות לבצע דה-סריאליזציה של אותו עומס נתונים של VHLO מגרסה קודמת.

תמונה של תאימות לאחור

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

גרסאות של פורמט MLIR בייטים

כדי לשמור על תאימות קדימה, לגרסאות StableHLO משויכת גרסה של MLIR Bytecode Format. בנוסף, הגרסה האחרונה של StableHLO תשתמש בגרסה האחרונה של פורמט ה-Bytecode של MLIR. כשהגרסה של MLIR Bytecode Format תתווסף, הגרסה הבאה של StableHLO תוסיף את הגרסה המשנית ותעדכן את Version.cpp כך שישתמש בגרסה האחרונה של MLIR Bytecode Format.

ב-bytecode.md תוכלו לקרוא פרטים נוספים על פורמט MLIR Bytecode ולהבין מה הסיבה לשימוש בו ב-StableHLO.