Многоуровневое промежуточное представление - новая инфраструктура компилятора

В настоящее время разные области программного и аппаратного обеспечения машинного обучения имеют разные инфраструктуры компиляторов. Эта динамика создает ряд проблем, в том числе:

  • высокая стоимость сборки предметно-ориентированных компиляторов
  • инновации в одной области не приносят пользы в других областях
  • соединить существующие компиляторы вместе - проблема

MLIR стремится решить эту проблему фрагментации программного обеспечения путем создания многоразовой и расширяемой инфраструктуры компилятора. В этой статье мы рассмотрим концептуальное представление о MLIR.

Потребность в MLIR

MLIR стремится продвигать разработку и реализацию генераторов кода, оптимизаторов и трансляторов на различных этапах абстракции в разных доменах приложений. Потребность в MLIR возникла из осознания того, что современные фреймворки машинного обучения имеют разные среды выполнения, компиляторы и технологии графов. Например, у самого TensorFlow есть разные компиляторы для разных фреймворков.

Такой дизайн ставит перед конечным пользователем различные задачи:

  • плохие сообщения об ошибках
  • непредсказуемая производительность
  • сбои в крайних случаях
  • трудности с поддержкой нового оборудования

Как показано ниже, разные языки имеют разные конвейеры компиляции с несколькими промежуточными представлениями среднего уровня. LLVM - это набор технологий модульных и многоразовых компиляторов и инструментальных цепочек.

Принципы проектирования MLIR

Чтобы создать глобальную инфраструктуру компилятора, MLIR построен на следующих принципах.

Мало встроенного, все настраивается

Система построена таким образом, что большая часть промежуточного представления полностью настраивается. Наиболее распространенные типы, операции и атрибуты в промежуточных представлениях используются для выражения всего остального.

Возможность настройки позволяет системе адаптироваться к меняющимся потребностям и желаниям. Это позволяет выражать различные абстракции, такие как графы машинного обучения, математические абстракции и промежуточные представления на уровне инструкций, такие как LLVM IR.

Статическое одиночное назначение (SSA) и регионы

SSA - широко используемый метод в промежуточных представлениях компилятора. Это выгодно, потому что делает анализ потока данных простым и разреженным. Несколько существующих промежуточных представлений используют плоский линеаризованный граф потока управления (CFG).

Однако представление абстракций более высокого уровня привело к введению вложенных регионов в качестве первоклассной концепции в промежуточном представлении. Для поддержки гетерогенной компиляции система поддерживает выражение структурированного потока управления, конструкций параллелизма и замыкания на исходных языках. Для этого необходимо выполнить анализ и преобразования на основе CFG для компоновки по вложенным регионам. Чтобы это стало реальностью, потребовалось принести в жертву свойства нормализации и канонизации LLVM.

Прогрессивное понижение

Система поддерживает понижение представления высокого уровня до самого низкого уровня. Это делается поэтапно на нескольких уровнях абстракции и особенно важно, потому что компилятор должен поддерживать разные модели и платформы программирования.

Поддерживайте семантику более высокого уровня

Система сохраняет семантику более высокого уровня и структуры вычислений, которые необходимы для анализа и оптимизации производительности. Это гарантирует, что операции (например, циклы) и их структуры поддерживаются во время различных преобразований.

Проверка промежуточного представления

Поскольку это открытая экосистема, наличие надежного механизма проверки имеет решающее значение. Это обеспечивает обнаружение ошибок компилятора и захват промежуточных инвариантов представления.

Декларативные шаблоны перезаписи

Для этой системы общие преобразования должны быть реализованы как правила перезаписи, которые выражаются декларативно. Моделирование программных преобразований как систем перезаписи помогает обеспечить расширяемость и возможности постепенного снижения. Правила перезаписи и описания машин построены так, что работают на нескольких уровнях абстракции.

Отслеживание местоположения источника и прослеживаемость

Чтобы устранить недостаток прозрачности, характерный для систем компиляции, исходное местоположение и примененные преобразования операции отслеживаются внутри системы. Эта возможность помогает отправлять конечным пользователям более актуальные и содержательные сообщения об ошибках.

MLIR и TensorFlow

В TensorFlow MLIR будет иметь решающее значение для обеспечения взаимодействия всей экосистемы. Модели будут работать быстрее, и их будет легче отлаживать. MLIR также предоставит стандартную инфраструктуру для исследователей и упростит интеграцию для партнеров по оборудованию.

Вот некоторые места, в которых инфраструктура MLIR будет применяться в TensorFlow.

Приложение MLIR в TensorFlow

В настоящее время MLIR используется в конвертере TF Lite. В результате пользователи получают более качественные сообщения об ошибках преобразования.

Поддержка MLIR

MLIR поддерживается 95% отрасли. Это означает, что применять машинное обучение станет все проще, даже с изобретением новых аппаратных ускорителей.

Что будет дальше с MLIR

Забегая вперед, мы можем ожидать большего использования MLIR в оптимизации графов TensorFlow и привлечения в проект новых партнеров по оборудованию. MLIR также будет очень тесно интегрироваться с новой средой выполнения TensorFlow. Ожидается, что новая среда выполнения появится в новых версиях TensorFlow позже в этом году.

Надеюсь, эта статья даст вам некоторую справочную информацию о MLIR и ее использовании. Если вы хотите узнать больше, ознакомьтесь с приведенными ниже ресурсами.









Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.