ภาษาถิ่น VHLO

ดูขั้นตอนที่ต้องทำเมื่อทำการเปลี่ยนแปลง VHLO ได้ที่ vhlo_checklist.md

VHLO Dialect คืออะไร

รูปแบบ VHLO (Versioned 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 ที่ v0.11.0 จะมีเฉพาะ StableHLO_MyOp ที่มี operand และ attr ขณะที่ VHLO จะบันทึกแต่ละเฟสของวิวัฒนาการของโอเปอเรเตอร์

เหตุใด VHLO จึงมีประโยชน์

การมีรูปแบบเวอร์ชันช่วยให้เรากําหนดเป้าหมายชุดคำสั่ง StableHLO เวอร์ชันก่อนหน้าได้ ซึ่งจะรวมความเข้ากันได้แบบย้อนหลังและแบบไปข้างหน้าไว้ในการเปลี่ยนรูปแบบระหว่างการดำเนินการในภาษา VHLO

ความเข้ากันได้แบบย้อนหลัง: ความเข้ากันได้แบบย้อนหลังทำได้โดยการแปลงเป็น VHLO และดาวน์เกรดการดำเนินการเป็นเวอร์ชันเป้าหมาย หากการดําเนินการ/ประเภท/แอตทริบิวต์ทั้งหมดในโปรแกรม VHLO สามารถดาวน์เกรดเป็นเวอร์ชันเป้าหมายได้ ระบบจะรับประกันว่าจะถอดรหัสและแปลงเป็น StableHLO ได้ในผู้บริโภคที่ใช้เวอร์ชันที่มากกว่าหรือเท่ากับเวอร์ชันเป้าหมาย เนื่องจาก VHLO มีสแนปชอตของชุดคำสั่ง ณ ขณะนั้น

รูปภาพความเข้ากันได้แบบย้อนหลัง

การแปลงดาวน์เกรดนี้จะดำเนินการไม่สำเร็จหากมีการใช้การดำเนินการหรือฟีเจอร์ที่ไม่มีอยู่ในชุดการดำเนินการเวอร์ชันก่อนหน้า ซึ่งหมายความว่าระบบจะพบความเข้ากันได้แบบส่งต่อ ในผู้สร้าง ไม่ใช่ที่รันไทม์

ความเข้ากันได้แบบย้อนหลัง: ความเข้ากันได้แบบย้อนหลังนั้นทำได้โดยการอัปเกรดการดำเนินการ VHLO เป็นเวอร์ชันล่าสุด (หากจำเป็น) จากนั้นแปลงการดำเนินการกลับเป็น SttableHLO โปรแกรม VHLO ทั้งหมดภายในกรอบเวลาความเข้ากันได้จะอัปเกรดเป็น StableHLO ได้ ซึ่งหมายความว่าผู้บริโภคเวอร์ชันต่างๆ จะแยกวิเคราะห์เพย์โหลด VHLO เดียวกันจากเวอร์ชันก่อนหน้าได้

รูปภาพความเข้ากันได้แบบย้อนหลัง

และที่สำคัญกว่านั้น VHLO ยังเป็นรูปแบบนามธรรมที่อยู่เบื้องหลังการทำให้เป็นอนุกรม ซึ่งหมายความว่าเฟรมเวิร์ก ML (ผู้ผลิต) จะต้องกำหนดเป้าหมายไปที่การดำเนินการ StableHLO เท่านั้น และแบ็กเอนด์คอมไพเลอร์ (ผู้ใช้) จะต้องรองรับเวอร์ชันล่าสุดเท่านั้น ซึ่งเป็นชุดการดำเนินการ StableHLO การแปลงไปยังและจาก VHLO จะได้รับการจัดการด้วยเครื่องจักรที่เก็บรักษาไว้ในที่เก็บ StableHLO

เวอร์ชันรูปแบบไบต์โค้ด MLIR

เวอร์ชัน StableHLO จะมีรูปแบบไบต์โค้ด MLIR ที่เกี่ยวข้องเพื่อรักษาความเข้ากันได้ในอนาคต นอกจากนี้ StableHLO เวอร์ชันล่าสุดจะใช้รูปแบบ MLIR Bytecode Format เวอร์ชันล่าสุด เมื่อมีการอัปเกรดเวอร์ชันรูปแบบไบต์โค้ด MLIR เวอร์ชันถัดไปของ StableHLO จะอัปเกรดเวอร์ชันย่อยและอัปเดต Version.cpp เพื่อใช้รูปแบบไบต์โค้ด MLIR เวอร์ชันล่าสุด

โปรดดูรายละเอียดเกี่ยวกับรูปแบบไบต์โค้ด MLIR และเหตุผลในการใช้รูปแบบนี้ใน StableHLO ที่ bytecode.md