ภาษาถิ่น MLIR

ภาพรวม

เพื่อแยกเป้าหมายฮาร์ดแวร์และซอฟต์แวร์ที่แตกต่างกัน MLIR มี "ภาษาถิ่น" ซึ่งรวมถึง:

  • TensorFlow IR ซึ่งแสดงถึงทุกสิ่งที่เป็นไปได้ในกราฟ TensorFlow
  • XLA HLO IR ซึ่งออกแบบมาเพื่อใช้ประโยชน์จากความสามารถในการคอมไพล์ของ XLA (พร้อมเอาต์พุตไปยัง TPU เหนือสิ่งอื่นใด)
  • ภาษาถิ่นใกล้เคียงแบบทดลอง ซึ่งมุ่งเน้นไปที่ การแสดงหลายเหลี่ยม และการเพิ่มประสิทธิภาพ
  • LLVM IR ซึ่งมีการแมป 1:1 ระหว่างมันกับการเป็นตัวแทนของ LLVM เอง ทำให้ MLIR สามารถปล่อยรหัส GPU และ CPU ผ่าน LLVM
  • TensorFlow Lite ซึ่งจะแปลเป็นโค้ดที่ทำงานบนแพลตฟอร์มมือถือ

แต่ละภาษาประกอบด้วยชุดของการดำเนินการที่กำหนดซึ่งมีค่าคงที่วางไว้ เช่น: “นี่คือตัวดำเนินการไบนารี และอินพุตและเอาต์พุตมีประเภทเดียวกัน”

กำลังเพิ่มลงใน MLIR

MLIR ไม่มีรายการการดำเนินการที่รู้จักทั่วโลกแบบตายตัว/ในตัว (ไม่มี "ข้อมูลภายใน") ภาษาถิ่นสามารถกำหนดประเภทที่กำหนดเองได้ทั้งหมด ซึ่งเป็นวิธีที่ MLIR สามารถสร้างแบบจำลองสิ่งต่าง ๆ เช่น ระบบประเภท LLVM IR (ซึ่งมีการรวมชั้นหนึ่ง), นามธรรมโดเมนที่สำคัญสำหรับตัวเร่งความเร็วที่ปรับให้เหมาะสมกับ ML เช่น ประเภทเชิงปริมาณ และแม้แต่ระบบประเภท Swift หรือ Clang (ซึ่ง ถูกสร้างขึ้นโดยใช้โหนดประกาศ Swift/Clang) ในอนาคต

หากคุณต้องการเชื่อมต่อคอมไพเลอร์ระดับต่ำตัวใหม่ คุณจะต้องสร้างภาษาถิ่นใหม่และการลดระดับระหว่างภาษากราฟ TensorFlow กับภาษาถิ่นของคุณ สิ่งนี้ทำให้เส้นทางสำหรับผู้สร้างฮาร์ดแวร์และคอมไพเลอร์ราบรื่นขึ้น คุณสามารถกำหนดเป้าหมายภาษาถิ่นในระดับต่างๆ ในรูปแบบเดียวกันได้ เครื่องมือเพิ่มประสิทธิภาพระดับสูงกว่าจะเคารพส่วนที่ไม่คุ้นเคยของ IR และรอให้ระดับที่ต่ำกว่ามาจัดการ