Синергия Apache Airflow и Ray для MLOps-конвейеров: инженерия Data Science

Автор Категория , ,
Синергия Apache Airflow и Ray для MLOps-конвейеров: инженерия Data Science

MLOps и построение конвейеров машинного обучения – одни из самых актуальных задач современной Data Science. Сегодня рассмотрим, чем совместное использование Apache Airflow и Ray полезно для дата-инженера и ML-разработчика. Читайте далее про кластерное развертывание Python-кода ML-моделей и упрощение ETL-процессов с Apache Airflow и Ray.

Apache AirFlow для ML: возможности и недостатки

Современные ML-разработчики думают не только о точности создаваемых алгоритмов, но и заботятся о вопросах сопровождения готового решения. Удобство развертывания, эксплуатации и развития ML-продукта – одна из главных идей концепции MLOps, о чем мы писали здесь. Реализовать эти идеи помогают специальные инструменты, которые автоматизируют рутинные операции машинного обучения, строя единый конвейер от подготовки обучающей выборки до развертывания работающей модели. Apache AirFlow – популярный фреймворк построения конвейеров, применимый не только к задачам дата-инженерии типа ETL-процессов, но и для ML.

В частности, использование DAG для построения ML-моделей дает Data Science специалистам следующие преимущества:

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

Порог входа в AirFlow для ML-разработчиков практически отсутствует, т.к. операторы и другие компоненты этого фреймворка используют язык Python, знакомый каждому Data Scientist’у. А наличие графического веб-GUI еще более упрощает работу пользователя. Однако, для создания реальных ML-продуктов в AirFlow не хватает следующих возможностей:

  • простой перенос кода прямо из записных книжек Jupyter Notebook, Google Colab и других подобных сред разработки для запуска с минимальными изменениями;
  • не очевидная обработка больших наборов данных при переносе их между разными задачами;
  • возможность запрашивать и получать по требованию ресурсы для решения конкретной задачи, например, графические процессоры для PyTorch, оперативную память для датафреймов или ядра ЦП для XGBoost;
  • экосистемная интеграция средств записи, запроса и воспроизведения ML-экспериментов, регистрации и развертывания полученных моделей.

Поэтому Data Scientist’ы объединяются с дата-инженерами, комбинируя AirFlow с совместимыми фреймворками машинного обучения, одним из которых является Ray. Что это и как работает, мы поговорим далее.

Что такое Ray и зачем он в Data Science проектах

Ray – это платформа кластерных вычислений для распространения и запуска Python-кода, даже со сложными библиотеками или пакетами, на кластерах бесконечного размера. Помимо Python, также Ray предоставляет API для Java и C++ (пока в экспериментальном режиме). Фреймворк использует задачи (функции) и субъекты (классы), чтобы распараллеливать пользовательский код. В отличие от Apache Spark, который требует сложной настройки кластера и зависимостей Java, Ray может запускать один и тот же код на любой машине: от личного ноутбука разработчика до кластера в AWS.

После запуска пользователи могут распределять ресурсы Ray для каждой функции, например, чтобы предоставить одной из них 2 ядра ЦП и 1 графический процессор. При правильном использовании распределенные вычисления Ray в сочетании с надежным планированием и оркестровкой Airflow создают идеальную платформу быстрой разработки и надежного развертывания ML-моделей.

Ray предоставляет простой универсальный API для создания распределенных приложений:

  • простые примитивы для создания и запуска распределенных приложений;
  • распараллеливание пользовательского кода с минимальными изменениями или без них;
  • широкая экосистема приложений, библиотек и инструментов поверх ядра для поддержки сложных приложений.

Ray обладает высокой производительностью и написан на C++ для быстрого и автоматического перемещения объектов Python по кластеру с использованием gRPC-вызовов для новых функций, которым нужны данные из предыдущих. При этом пользователь просто пишет код на Python, не думая об особенностях платформы благодаря высокому уровню абстракции.

Хотя Airflow и Ray не нуждаются в специальных пакетах или настройках для совместной работы, сделать ее еще проще поможет провайдер от Astronomer. Эта компания, коммерциализирующая и продвигающая Apache Airflow, разработала множество подобных Python-пакетов, представив их в открытом каталоге – реестре провайдеров, о чем мы рассказывали здесь.

Синергия Ray и Apache Airflow для машинного обучения

В Ray Provider для Apache Airflow специалисты Astronomer инкапсулировали весь специфичный код настройки и инициализации Ray в декораторы, а не в операторы, расширяя API TaskFlow. Этот декоратор позволяет пользователям Airflow сохранять весь свой код Ray в функциях Python и определять зависимости задач, перемещая данные через них. В результате пользователи Airflow и Ray могут видеть код, который они запускают, и иметь гибкость изменения шаблонов своих DAG, пользуясь возможностями распределенных вычислений Ray.

Благодаря возможностям Airflow создавать шаблоны и динамически менять параметры задач DAG, в сочетании с Ray Tune можно организовать и масштабировать настройку пространства поиска машинного обучения с использованием любой ML-инфраструктуры: PyTorch, XGBoost, MXNet и Keras, объединяя инструменты записи и запросов, тиражирование экспериментов, регистрацию и развертывание полученных моделей.

Так менее чем за полчаса работы Data Scientist может превратить локальный Python-скрипт в крупномасштабный воспроизводимый конвейер с мощью распределенных вычислений Ray и оркестровки Airflow. Далее можно воспользоваться переменными Airflow, соединениями, интервалами планирования и многими другими функциями этого оркестратора задач дата-инженерии.

Например, Airflow и Ray позволяют пользователям повторно запускать задачи с помощью отказоустойчивого резидентного объектного хранилища данных Plasma In-Memory Object Store. Ray использует это локальное хранилище для каждого рабочего процесса, чтобы хранить данные в памяти для быстрой обработки. Эта система отлично работает, но может отказать, если возникнет проблема с кластером Ray.

С помощью механизма контрольных точек, пользователи Airflow и Ray могут указывать на задачи в DAG, где данные сохраняются в надежном внешнем хранилище, например, AWS S3. Это обеспечит отказоустойчивость, позволяя в случае сбоя повторно запустить задачу с нужными данными. При этом можно передавать целые датафреймы между задачами без явной отправки их во внешнее хранилище. С традиционным XCom это довольно сложно, т.к. Airflow хранит каждый фрагмент данных, передаваемых между задачами, в одной ячейке базы данных метаданных. Но эта проблема легко решается с помощью Ray, его внутреннего хранилища объектов в памяти.

Чтобы обеспечить эффективную обработку данных для машинного обучения, Ray использует резидентную систему хранилища объектов, которая обеспечивает быструю передачу данных и чтение с нулевым копированием. С помощью Ray-декоратора Airflow может использовать это хранилище объектов в качестве системы кэширования, позволяя крупным объектам данных оставаться в оперативной памяти worker’ов при выполнении нескольких задач. Это экономит время на передачу данных и деньги на обращение к AWS S3, поскольку теперь не нужно писать и читать данные из этого облачного хранилища для их передачи между задачами.

Если требуется еще более снизить операционные издержки, разработчики предлагают управляемое решение для размещения кластеров Ray, а также API/SDK для программного управления ML-инфраструктурой с высокой пропускной способностью.

В перспективе разработчики планируют создать функцию для простой передачи данных из локальной задачи Airflow в задачу Ray и обратно, чтобы работать с любым пользовательским сервером Xcom, включая пользовательский сервер Ray Custom Xcom, и полностью обеспечить пользователям Airflow нативный интерфейс Python. Также ожидается добавление других внутренних хранилищ объектов, помимо Plasma In-Memory Object Store, и расширение пользовательского Backend Xcom Ray для перемещения данных между задачами с использованием разных операторов AirFlow. Про совместное использование AirFlow с Apache NiFi читайте в нашей новой статье.

Узнайте больше про организацию ETL/ELT-процессов и разработку MLOps-конвейеров на Apache AirFlow для эффективной аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://www.astronomer.io/blog/airflow-ray-data-science-story
  2. https://docs.ray.io/en/master/
  3. https://registry.astronomer.io/providers/ray/