Обзор
Для разделения различных аппаратных и программных целей в MLIR есть «диалекты», в том числе:
- TensorFlow IR, который представляет все возможное в графах TensorFlow.
- XLA HLO IR, который предназначен для использования возможностей компиляции XLA (с выводом, среди прочего, на TPU).
- Экспериментальный аффинный диалект, ориентированный на многогранные представления и оптимизации.
- LLVM IR, который имеет сопоставление 1:1 между ним и собственным представлением LLVM, что позволяет MLIR генерировать код графического процессора и процессора через LLVM.
- TensorFlow Lite, который будет переводить код на мобильные платформы.
Каждый диалект состоит из набора определенных операций, к которым прикреплены инварианты, например: «Это бинарный оператор, входные и выходные данные имеют одинаковые типы».
Добавление в MLIR
MLIR не имеет фиксированного/встроенного списка всемирно известных операций (никаких «внутренних свойств»). Диалекты могут определять полностью пользовательские типы. Именно так MLIR может моделировать такие вещи, как система типов LLVM IR (которая имеет агрегаты первого класса), абстракции предметной области, важные для ускорителей, оптимизированных для ML, таких как квантованные типы, и даже системы типов Swift или Clang (которые строятся на основе узлов объявлений Swift/Clang) в будущем.
Если вы хотите подключить новый низкоуровневый компилятор, вам придется создать новый диалект и понижения между диалектом TensorFlow Graph и вашим диалектом. Это облегчает путь производителям оборудования и компиляторов. Вы даже можете ориентироваться на диалекты разных уровней в одной модели; оптимизаторы более высокого уровня будут учитывать незнакомые части IR и ждать, пока более низкий уровень обработает их.