برای مراحلی که باید در هنگام ایجاد تغییرات در VHLO دنبال کنید، به vhlo_checklist.md
مراجعه کنید.
لهجه VHLO چیست؟
گویش VHLO (Versioned StableHLO) برای سریال سازی و پایداری استفاده می شود. این یک عکس فوری از گویش StableHLO در یک نقطه زمانی معین با نسخهسازی عناصر برنامه جداگانه ارائه میکند.
VHLO یک گویش فقط افزودنی با عملیات، انواع و ویژگی های نسخه شده است، به این معنی که وقتی یک ویژگی به گویش اضافه می شود، نمی توان آن را به هیچ وجه تغییر داد که بر معناشناسی تأثیر بگذارد.
هر گونه تغییر در یک op، نوع یا ویژگی نیاز به یک نسخه جدید برای افزودن به گویش دارد. به عنوان مثال، اگر یک my_op
فرضی در 0.9.0 به StableHLO اضافه شود، اما در 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 در v0.11.0 فقط دارای StableHLO_MyOp
است که دارای operand
و attr
است، در حالی که VHLO هر مرحله از تکامل op را ثبت می کند.
چرا VHLO مفید است؟
داشتن یک گویش نسخه شده به ما امکان می دهد تا نسخه های قبلی Opset StableHLO را هدف قرار دهیم. این سازگاری رو به جلو و عقب را در تبدیل بین عملیات در گویش VHLO محصور می کند.
سازگاری فوروارد: سازگاری فوروارد با تبدیل به VHLO و تنزل رتبه عملیات به نسخه هدف ارائه می شود. اگر هر op/type/attr در یک برنامه VHLO را بتوان به نسخه هدف کاهش داد، تضمین میشود که در مصرفکنندهای که نسخهای بزرگتر یا مساوی با نسخه هدف را اجرا میکند، غیر سریالسازی و قابل تبدیل به StableHLO باشد، زیرا VHLO یک عکس فوری از آن دارد. opset در آن زمان
اگر از عملیاتها یا ویژگیهایی که در نسخه قبلی opset وجود ندارند استفاده شود، این تبدیل کاهشیافته با شکست مواجه میشود. این بدان معنی است که سازگاری رو به جلو در تولید کننده کشف می شود، نه در زمان اجرا.
سازگاری به عقب: سازگاری به عقب با ارتقای عملیات VHLO به آخرین نسخه آنها (در صورت نیاز) و سپس تبدیل مجدد یک op به StableHLO ارائه می شود. همه برنامههای VHLO در پنجره سازگاری قابل ارتقا به StableHLO هستند، به این معنی که نسخههای مختلف مصرفکنندهها میتوانند همان بار VHLO را از نسخه قبلی از حالت سریال خارج کنند.
مهمتر از آن، VHLO در پشت سریال سازی انتزاع شده است. این بدان معناست که فریمورکهای ML (تولیدکنندگان) فقط باید عملیات StableHLO را هدف قرار دهند و پشتیبانهای کامپایلر (مصرفکنندگان) فقط باید از آخرین نسخه پشتیبانی کنند که مجموعه عملیات StableHLO است. تبدیل به و از VHLO با ماشین آلات نگهداری شده در مخزن StableHLO انجام می شود.
نسخه های فرمت بایت کد MLIR
به منظور حفظ سازگاری رو به جلو، نسخه های StableHLO دارای یک نسخه با فرمت بایت کد MLIR مرتبط هستند. علاوه بر این، آخرین نسخه StableHLO از آخرین نسخه فرمت بایت کد MLIR استفاده می کند. هنگامی که نسخه MLIR Bytecode Format افزایش می یابد، نسخه بعدی StableHLO نسخه جزئی را افزایش می دهد و Version.cpp را برای استفاده از آخرین نسخه MLIR Bytecode Format به روز می کند.
برای جزئیات بیشتر در مورد فرمت بایت کد MLIR و دلیل استفاده از آن در StableHLO، به bytecode.md مراجعه کنید.