Обзор
MLIR, или многоуровневое промежуточное представление, представляет собой формат представления и библиотеку утилит компилятора, которые находятся между представлением модели и низкоуровневыми компиляторами/исполнителями, которые генерируют аппаратно-зависимый код.
MLIR по своей сути представляет собой гибкую инфраструктуру для современных оптимизирующих компиляторов. Это означает, что он состоит из спецификации промежуточных представлений (IR) и набора инструментов для выполнения преобразований в этом представлении. (На языке компилятора, когда вы переходите от представлений более высокого уровня к представлениям более низкого уровня, эти преобразования можно назвать «понижениями»)
MLIR находится под сильным влиянием LLVM и беззастенчиво повторно использует многие замечательные идеи из него. Он имеет гибкую систему типов и позволяет представлять, анализировать и преобразовывать графы, сочетая несколько уровней абстракции в одной и той же единице компиляции. Эти абстракции включают операции TensorFlow, области вложенных многогранных циклов и даже инструкции LLVM, а также фиксированные аппаратные операции и типы.
Мы ожидаем, что MLIR будет интересен многим группам, в том числе:
- Исследователи компиляторов и разработчики, стремящиеся оптимизировать производительность и потребление памяти моделей машинного обучения.
- Производители оборудования ищут способ подключения своего оборудования к TensorFlow, такого как TPU, портативное нейронное оборудование в телефонах и другие специализированные ASIC.
- Люди, пишущие языковые привязки, которые хотят воспользоваться преимуществами оптимизации компиляторов и аппаратного ускорения.
Экосистема TensorFlow содержит ряд компиляторов и оптимизаторов, которые работают на нескольких уровнях программного и аппаратного стека. Мы ожидаем, что постепенное внедрение MLIR упростит каждый аспект этого стека.