В мире современного дата-инжиниринга и MLOps необходимость оркестрации распределенных конвейеров данных с применением платформ управления рабочими процессами (workflow management platforms) становятся все очевиднее. Инструменты оркестрации рабочих процессов могут взять на себя тяготы обработки и распределения данных между системами и задачами, что по-прежнему является довольно сложным процессом.
Оркестрация рабочих процессов является естественным ответом на растущую с течением времени сложность рабочих процессов и конвейеров. Очень часто команды разработчиков начинают с управления и обработки задач вручную, включая очистку данных, обучение, отслеживание результатов, развертывание и т. д. Но по мере усложнения задач и рабочих процессов ручная оркестрация становится все более трудоемкой.
Это стало причиной развития платформ управления рабочими процессами и оркестрации в последние годы.
Что из себя представляют инструменты управления рабочими процессами и оркестрации?
По мере усложнения конвейеров данных и связанного с ними разнообразия различных задач создание автоматизированных рабочих процессов, обрабатывающих эти задачи и их зависимости, со временем становится жизненно необходимым. Задачи и зависимости образуют сети, которые можно представить в виде ориентированного ациклического графа (directed acyclic graph - DAG). Эти графы моделируют совокупность задач и их зависимостей, отображая взаимосвязь между переменными (зачастую называемых узлами).
Инструменты оркестрации рабочих процессов позволяют дата-инженерам определять конвейеры в виде DAG’ов (которые включают зависимости), а затем выполнять эти задачи по порядку.
Кроме того, инструменты оркестрации рабочих процессов генерирую отчеты о выполнении и рассылают уведомления, которые позволяют команде следить за происходящим. Инструменты оркестрации рабочих процессов подключаются к широкому спектру источников данных, например к API, базам данных, хранилищам данных и т. д. Среди ключевых областей их применения можно выделить:
Мониторинг потоков данных между API, хранилищами и т.д.;
Управление конвейерами, которые изменяются с относительно медленными равными интервалами;
Извлечение пакетных данных из нескольких источников;
Обучение моделей машинного обучения;
DevOps-задачи, такие как запуск Spark-джобов.
Конечная цель — создать надежный, воспроизводимый, централизованный рабочий процесс для оркестрации конвейеров данных и MLOps-задач.
Это относительно новая категория инструментов, но в ней уже есть несколько хороших вариантов, среди которых можно выделить:
Apache Airflow: изначально разработанный Airbnb, Airflow был подарен проекту Apache Software Foundation в начале 2019 года. Airflow написан на Python и, по всей видимости, уже зарекомендовал себя “дежурным” инструментом для оркестрации рабочих процессов с простым в использовании пользовательским интерфейсом.
Luigi: Luigi — это Python-пакет для построения оркестрации данных и рабочих процессов. Для пользователей Python он в целом проще, чем Airflow.
Dagster: Dagster больше похож на Prefect, чем на Airflow, он работает с графами богатых метаданными функций, называемых ops, соединенных зависимостями с постепенной типизацией.
Prefect: Prefect стал ключевым конкурентом Airflow, но предлагает облачное решение с гибридной архитектурой.
KubeFlow: для пользователей Kubernetes, которые хотят определять задачи с помощью Python.
MLFlow: Оркестрация специально под проекты машинного обучения.
Сегодня же мы будем сравнивать Airflow и Prefect.
Airflow
Apache Airflow стал очень популярным инструментом оркестрации рабочих процессов, который хорошо подходит для средних и крупных предприятий и проектов.
Написанный на Python, Airflow очень популярен среди разработчиков. Он разработан таким образом, чтобы быть распределенным, гибким и масштабируемым решение для обработки сложной бизнес-логики. Airflow используют по крайней мере 10 000 крупных организаций, включая Disney и Zoom. Кроме того, Airflow подключается к облачным сервисам, таким как AWS, и имеет огромное сообщество.
Проблемы с Airflow
Airflow был разработан огромным предприятием (Airbnb) и поэтому больше ориентирован на крупные и корпоративные развертывания. Airflow долгое время был единственным реальным вариантом, доступным для масштабной оркестрации, но внедрение очень сложных проектов в Airflow может быть довольно сложным, особенно в случае проектов машинного обучения.
Prefect
Prefect достаточно молодой и современный проект с открытым исходным кодом. Однако есть и платная облачная версия, которая является одним из основных отличий от Airflow.
Это означает, что вы можете выполнять рабочие процессы на любом сервере и мониторить их с помощью облачного портала Prefect. Он намного проще, чем Airflow, и это серьезное преимущество для большинства. В целом, Prefect это более гладкий Airflow, так как его код похож на написание Python-функций, заключенных в оператор with.
1: Простота настройки
И Airflow, и Prefect можно установить с помощью pip, docker или других решений для контейнеризации. Тем не менее, Prefect очень хорошо организован и, вероятно, обладает большей расширяемостью “из коробки”. Для запуска Airflow вам понадобится планировщик и веб-сервер, но AWS и GCP предоставляют управляемые сервисы для этой платформы.
Prefect и Airflow работают через облачные сервисы, но Prefect содержит платную облачную версию, упрощающую мониторинг конвейеров с помощью интуитивно понятного пользовательского интерфейса в реальном времени. Доступ прост, но безопасен, пользователю требуется только учетная запись и ключ API.
2: Простота использования
Как я уже писал выше, Airflow использует DAG’и. Они довольно интуитивно понятны и описывают рабочие процессы визуально, но DAG’и также имеют свои собственные DAG-операторы, которые поначалу могут быть достаточно сложны в освоении, несмотря на простую структуру их синтаксиса.
Работа с Prefect похожа на написание Python-функций, а также в нем нет необходимости рефакторить код при создании новых рабочих процессов, что является большим преимуществом по сравнению с Airflow. Prefect также может похвастаться отличным функционалом модуляции кода, который значительно упрощает цикл тестирования.
Команда Prefect твердо убеждена в том, что их инструмент решает многие проблемы, о которых пользователи жалуются при работе с Airflow, в том числе:
DAG’и с одинаковым временем запуска.
DAG’и работают не по расписанию или вообще без расписания.
DAG’и которые зависят от круговорота данных.
DAG’и со сложной логикой ветвления.
DAG’и с большим количеством быстрых задач.
Динамические DAG’и.
Параметризованные DAG’и.
С Airflow многие предприятия прибегают к написанию пользовательских DSL или созданию собственных плагинов для удовлетворения своих внутренних потребностей, тогда как Prefect поддерживает эти функции более или менее “из коробки”. В конце концов, Prefect был создан, чтобы превзойти Airflow, а его разработчики прекрасно понимали, почему Airflow может быть ограничен в некоторых случаях использования.
Конечно, актуальны ли эти ограничения конкретно для вашего проекта — это уже другой вопрос.
3: UI/UX
Пользовательский интерфейс Airflow является частью веб-сервера и содержит множество интуитивно понятных фич после того, если пользователь разобрался DAG. Задачи, расписания и прогоны четко отображены. Несколько представлений, таких как календарное или графовое представление, упрощают навигацию по рабочим процессам после того, как все будет настроено.
Пользовательский интерфейс Prefect — это легко настраиваемая и простая в управлении панель инструментов, которая позволяет вам централизованно управлять рабочими процессами, а также позволяет вам мониторить работоспособность ваших конвейеров данных.
4: ИИ и машинное обучение
Airflow лучше поддерживается сообществом машинного обучения благодаря его интеграциям. Airflow может выполнять множество задач, таких как обучение моделей через определенные промежутки времени, переобучение моделей, пакетная обработка, сбор данных, отслеживание портфолио и т. д.
Поскольку сейчас Airflow более популярен, обычно можно найти решения даже для самых сложным MLOps.
В настоящее время Prefect не так хорошо оснащен для машинного обучения, но эта ситуация меняется (и, возможно, уже изменилась к тому времени, когда вы читаете эту статью). Дело не столько в том, что Prefect не способен обслуживать сложные конвейеры машинного обучения, сколько в том, что изначально ставка была сделана на то, для чего вы с большей вероятностью будете использовать этот инструмент. Тем не менее, Prefect создан с оглядкой на современный стек данных благодаря более чистому Python API.
5: Поддержка
Airflow на данный момент является более расширяемым инструментом и имеет более широкую базу поклонников и сообщество. Однако Prefect предоставляет поддержку через Slack-канал, который регулярно отслеживается. В конце концов, оба инструмента поддерживаются как профессиональными разработчиками, так и студентами, и энтузиастами с разным опытом работы в области обработки данных и машинного обучения.
Заключение: Airflow vs Prefect
Prefect по понятным причинам выглядит вполне оптимистично, если сравнивать его с Airflow. Пользовательский интерфейс Prefect превосходен, поддерживает множество функций и визуализаций в реальном времени. Кроме того, его API стал чище и проще в использовании без ущерба для гибкости.
Но чего сейчас не хватает Prefect, так это такой же массовой поддержки сообществом, как у Airflow, но это, вероятно, не изменится в течение нескольких лет. Однако Airflow предоставляет пользователям множество технических деталей своих рабочих процессов и конвейеров, что отлично подходит для технически подкованных пользователей.
Предположим, вы раньше не использовали ни один из этих инструментов. В этом случае вашим предпочтением, вероятно, является Prefect, просто потому, что он новый, он доступный, активно поддерживается и предлагает несколько отличных функций для современных MLOps.
В целом, однако, вы не можете легко выделить какой-либо из этих двух инструментов оркестрации рабочих процессов, не уйдя в область предпочтений.
Материал подготовлен в преддверии старта онлайн-курса "MLOps".