dialek MLIR

Ringkasan

Untuk memisahkan target perangkat keras dan perangkat lunak yang berbeda, MLIR memiliki “dialek”, antara lain:

  • TensorFlow IR, yang mewakili semua kemungkinan dalam grafik TensorFlow.
  • XLA HLO IR, yang dirancang untuk memanfaatkan kemampuan kompilasi XLA (dengan keluaran, antara lain, TPU).
  • Dialek affine eksperimental, yang berfokus pada representasi dan pengoptimalan polihedral .
  • LLVM IR, yang memiliki pemetaan 1:1 antara LLVM dan representasi LLVM sendiri, memungkinkan MLIR mengeluarkan kode GPU dan CPU melalui LLVM.
  • TensorFlow Lite, yang akan menerjemahkan kode yang berjalan pada platform seluler.

Setiap dialek terdiri dari serangkaian operasi tertentu yang memiliki invarian yang ditempatkan padanya, seperti: “Ini adalah operator biner, dan input serta outputnya memiliki tipe yang sama.”

Menambahkan ke MLIR

MLIR tidak memiliki daftar tetap/bawaan dari operasi yang dikenal secara global (tidak ada “intrinsik”). Dialek dapat mendefinisikan tipe khusus sepenuhnya, yang merupakan cara MLIR dapat memodelkan hal-hal seperti sistem tipe LLVM IR (yang memiliki agregat kelas satu), abstraksi domain yang penting untuk akselerator yang dioptimalkan ML seperti tipe terkuantisasi, dan bahkan sistem tipe Swift atau Clang (yang mana dibangun di sekitar node deklarasi Swift/Clang) di masa depan.

Jika Anda ingin menghubungkan compiler tingkat rendah yang baru, Anda akan membuat dialek baru dan penurunan antara dialek TensorFlow Graph dan dialek Anda. Hal ini memperlancar jalan bagi pembuat perangkat keras dan kompiler. Anda bahkan dapat menargetkan dialek pada tingkat berbeda dalam model yang sama; pengoptimal tingkat yang lebih tinggi akan menghormati bagian IR yang tidak dikenal dan menunggu tingkat yang lebih rendah untuk menanganinya.