Apache Airflow — это широко распространенный инструмент, используемый для организации конвейеров данных и рабочих процессов во многих организациях. Его богатая экосистема операторов, инструментов и плагинов позволяет интегрировать и координировать практически все, что вы можете себе представить в области данных и машинного обучения (ML). Airflow успешно используется для организации рабочих процессов и конвейеров машинного обучения. Хотя этот вариант использования не так широко известен, Airflow идеально подходит для рабочих процессов ML и MLOps. Для меня, исходя из опыта работы с данными, изучение Airflow с самого начала казалось более сложным, чем оказалось. Если вы только начинаете использовать Airflow для ML Orchestration, вот 8 вещей, которые помогут вам быстро освоиться с Airflow и извлечь из него максимальную пользу.

1: Задачи могут выполняться где угодно

Реализация Airflow по умолчанию обычно запускает задачи, используя Local Executor или Celery Executor. Они будут ограничены как вычислительной средой, так и средой Python, в которой работает этот исполнитель. Для простых задач или задач, которые подключаются к внешнему ресурсу, это не проблема. Однако для некоторых задач машинного обучения могут потребоваться дополнительные вычислительные мощности и возможности, например. различные среды Python или возможность запускать совершенно разные языки программирования, такие как R или Julia. Airflow можно легко развернуть с помощью Kubernetes Executor и иметь операторов, поддерживающих Kubernetes (таких как KubernetesPodOperator). Это означает, что задачу можно запускать в определенной среде, имеющей требования к вычислительным ресурсам и библиотеки, необходимые для этой конкретной задачи. Этот репозиторий github показывает, как использовать KubernetesPodOperator с Airflow. Приведенный ниже код запускает задание обучения модели в модуле в отдельном кластере Kubernetes, в котором есть группа узлов с поддержкой графического процессора.

container_resources = k8s.V1ResourceRequirements(
  limits={
  'nvidia.com/gpu': '1'
  }
)

train_xray_model_on_gpu = KubernetesPodOperator(
  image="fletchjeffastro/tfmlflow:0.0.4",
  name="train_xray_model_on_gpu_pod",
  cmds=["/bin/bash", "-c", " - ",
    "python {}/model_training.py {} {{{{dag_run.logical_date.strftime('%Y%m%d-%H%M%S')}}}} {}".format(STORAGE_PATH, STORAGE_PATH, MLFLOW_SERVER)],
  task_id="train_xray_model_on_gpu",
  startup_timeout_seconds=600,
  container_resources=container_resources,
  **kpo_defaults
)

2: Происхождение модели и отслеживание кода могут быть реализованы с помощью OpenLineage.

Важным требованием для реализации рабочих процессов машинного обучения является воспроизводимость и отслеживание. Для этого требуется возможность отслеживать версии моделей, данные, используемые для обучения модели, а также любой код и параметры, используемые в процессе. В контексте законодательства, такого как GDPR, если ваша компания отклоняет заявку клиента на страхование, и клиент запрашивает причину, регулирующий орган может попросить вас предоставить подробную информацию о данных клиента, используемых при составлении прогноза; модель, которая сделала прогноз, и параметры; и, наконец, код и данные, используемые при обучении модели. Полная интеграция Airflow с OpenLineage позволяет отслеживать важные метаданные, связанные с каждой задачей в прогоне. OpenLineage в сочетании с интеграцией Airflow в рабочий процесс CI/CD предоставляет необходимую историю процессов и данных, используемых, чтобы позволить кому-то другому полностью воспроизвести модель машинного обучения.

3: Вы можете передавать большие наборы данных между задачами

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

4: Это Python (ic)

Люди, имеющие опыт разработки программного обеспечения, могут обнаружить, что способ написания кода в DAG не соответствует стандартным соглашениям о разработке программного обеспечения Python. В этом отношении DAG Airflow могут выглядеть как DSL. Чтобы решить эту проблему, сообщество Airflow реализовало TaskFlow API в Airflow 2, чтобы разрешить декорированные задачи Python (с использованием @task) в DAG, сделав их более похожими на тот тип Python, к которому привыкли инженеры-программисты и специалисты по данным. Ряд других библиотек Airflow, многие из которых предлагаются через Astro Python SDK с открытым исходным кодом от Astronomer, используют декораторы Python для поддержки широкого спектра типов задач.

Однако Airflow — это гораздо больше, чем просто DAG: он полностью основан на Pythonic. Когда у вас будет четкое представление о том, как создавать, запускать и отлаживать DAG Airflow, вам будет легче понять, как работает сам Airflow. Вы также обнаружите, что процесс создания собственных настраиваемых операторов Airflow тесно связан со стандартными соглашениями о разработке программного обеспечения Python.

5: вы можете отлаживать воздушный поток

Отладка Airflow в вашей среде IDE непроста. Процессы Python, которые запускают задачи, и сами задачи выполняются в своих отдельных средах и могут выполняться в совершенно отдельных кластерах Kubernetes, к которым у вас нет доступа. Более новые версии Airflow включают возможность проверить DAG, запустив процесс Python в вашей среде IDE для локального тестирования DAG. Вы можете сделать это, добавив следующий код в свою DAG:

if __name__ == "__main__":
  dag.test()

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

6. Запустить Airflow в продакшене очень просто

Запустить Airflow локально относительно просто, либо установив пакет Python, либо запустив Astro CLI. Однако запустить надежную производственную среду сложнее. В сообществе Airflow есть задокументированный процесс, которому вы можете следовать и который показывает, как установить Airflow на Kubernetes с помощью Helm. Есть также несколько поставщиков Airflow-as-a-Service, которые развернут для вас надежную, готовую к работе среду Airflow одним нажатием кнопки. Это самый простой способ запустить производственную систему Airflow.

7. Думайте об Airflow «и» не «Airflow» или «с другими инструментами машинного обучения»

Из-за того, как работает интернет-поиск, многие статьи, как правило, имеют формат «Воздушный поток против…». Это, а также тот факт, что несколько других инструментов в пространстве MLOps заканчиваются на «поток», создают впечатление, что вам нужно выбирать между ними. Но это не так. Airflow — это инструмент управления рабочим процессом, оркестратор, который интегрируется со многими широко используемыми инструментами машинного обучения. Для начала уже доступно множество операторов и хуков: например. Sagemaker, MLflow, Tecton и т. д. Если вы не найдете то, что вам нужно, гибкость Airflow означает, что вы всегда можете интегрироваться с любым инструментом любым удобным для вас способом. Используя декоратор задач Python (@task) или PythonOperator, практически нет ограничений на то, какие инструменты или ресурсы вы можете интегрировать.

8: Получить помощь проще, чем вы думаете

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