Open Source для MLOps: сравнение популярных решений
Здравствуй, Хабр! Меня зовут Александр Волынский, я занимаюсь разработкой ML Platform в VK Cloud. Наша ML-платформа стала доступна пользователям совсем недавно, некоторые из её компонентов сейчас находятся на этапе бета-тестирования. В этой статье я расскажу, как мы выбирали Open-Source-инструменты для MLOps-платформы, какие решения сравнивали, на каком варианте остановили выбор и почему.
Для начала посмотрим на типичный поток задач в работе с ML-моделями (ML WorkFlow). Их можно группировать по-разному, но для наших целей выделю два основных этапа: экспериментирование с данными и вывод ML-модели в продакшен.
Нам нужны инструменты, с помощью которых можно решить все эти задачи от Data Engineering до деплоя и доставки данных. И здесь необходимо выбрать из двух подходов к работе: использовать комплексный инструмент, закрывающий сразу множество задач, либо набор разнообразных инструментов, которые придётся интегрировать между собой и, возможно, как-то дорабатывать.
Мне кажется, что первый подход более универсальный и в перспективе приносит меньше неожиданных проблем. Поэтому сделаю акцент именно на комплексных решениях и коротко расскажу об одних из самых мощных: Kubeflow, MLflow и Pachyderm.
Kubeflow
Kubeflow — это большой и сложный инструментарий, полноценный комбайн. В него входят Seldon Core, KFServing, Kubeflow Pipelines и ещё множество решений, ставших стандартом в отрасли. К тому же в Kubeflow встроен Jupyter Notebook.
Этот инструментарий живёт внутри Kubernetes, а значит, позволяет сразу из коробки запускать всё в K8s, не углубляясь во внутренние механизмы этого оркестратора.
Таким образом, при помощи Kubeflow можно выполнять практически любые задачи. Он также решает проблему интеграции между различными инструментами сразу из коробки и, на первый взгляд, идеально подходит как комплексное решение MLOps. Однако этот инструмент очень большой и сложный, и наш опыт (в разных подразделениях VK используется Kubeflow) говорит, что из всего многообразия инструментов Kubeflow обычно используются только несколько компонентов.
В блоге Kubeflow опубликовали опрос о том, как пользователи применяют этот инструментарий. Выяснилось, что как целостную платформу его использует менее половины потребителей, обычно в ход идут один-два или меньше половины сервисов. А установка и настройка этого комбайна долгая и сложная.
Ещё одна существенная проблема с Kubeflow — слабость и пробелы в документации, что при установке и наладке сложного инструмента особенно заметно. По Kubeflow не хватает обучающих материалов, а значит, погружать в процесс новых дата-сайентистов может быть нелегко. В общем, Kubeflow — выбор мастеров, многопрофильных исследователей и экспериментаторов.
MLflow
Альтернативой Kubeflow выступает MLflow. Эта платформа состоит из меньшего количества элементов и выглядит более логично и упорядоченно. Вот её основные компоненты:
- MLflow Tracking решает задачи на этапе экспериментирования — обеспечивает логирование параметров, метрик, кода и других артефактов.
- MLflow Models отвечает за вывод в продакшен наших моделей: за упаковку в контейнеры и за деплой моделей.
- Model Registry — централизованное хранилище для различных ML-моделей. Здесь есть Lineage и возможность переводить модели на разные жизненные этапы, такие как Stage и Production.
- MLflow Projects — это формат организации кода и проекта для обеспечения воспроизводимости и повторного использования.
Как видите, с помощью MLflow можно закрыть большинство потребностей в MLOps.
Если установка и настройка Kubeflow может превратиться в эпическое приключение на N+дней, то с MLflow всё гораздо проще. Условно: у нас есть Localhost, с которого работают дата-сайентисты, и есть сервер, где расположен Tracking Server MLflow. Можно подключить S3-хранилище для моделей, артефактов, конфигураций. Можно также развернуть PostgreSQL. Этот элемент необязательный, но, если его установить, там будут храниться различные метаданные.
В команде разработки ML Platform мы выбрали MLflow. Этот инструмент сейчас доступен как преднастроенный сервис в рамках бета-тестирования платформы.
Pachyderm
Pachyderm, как и Kubeflow, живёт в Kubernetes. Это ещё одна комплексная платформа, однако по сравнению с Kubeflow у неё меньший спектр решаемых задач. Акцент здесь сделан на версионировании данных и пайплайнов, на воспроизводимости результатов. Так что этот инструмент особенно удобен для дата-сайентистов и ML-инженеров — здесь легко можно откатиться на любой этап, проверить результаты. Таким образом, проще добиться воспроизводимости экспериментов.
В Pachyderm всё упаковывается в контейнеры. Эта платформа глубоко интегрирована в Kubernetes, соответственно, она поддерживает автоматическое масштабирование всех своих пайплайнов. На схеме видно, что воркеры (Worker) этой платформы, запущенные внутри подов (Pod) в Kubernetes, в зависимости от нагрузки могут распараллеливать вычисления. Это ощутимо помогает при работе с большими данными либо конструировании высоконагруженных сервисов.
Архитектура Pachyderm выглядит довольно сложно. Для использования этого инструментария нужно неплохо разбираться в Kubernetes. Здесь используются etcd от Kuber, поэтому и базу придётся разворачивать в Kubernetes, и использовать различные инструменты от Kubernetes.
И ещё стоит упомянуть, что при работе с Pachyderm придётся учить новые понятия. Что касается версионирования данных, то есть здесь у нас известные дата-сайентистам Git-like-понятия, такие как Repository, Commit, Branch. Однако в пайплайнах придётся погружаться в особенности работы Pachyderm. Из-за этого могут возникнуть некоторые сложности с внедрением, и это нужно учитывать.
Что выбрать
Мы рассмотрели только три комплексные платформы для работы в MLOps, но их гораздо больше. А если говорить об отдельных инструментах, предназначенных для решения тех или иных узких задач, то их ещё больше.
Вот только некоторые наиболее популярные платформы, используемые при решении Data Engineering, Data-Science-задач. Пожалуй, чаще всего встречается Airflow. Эта платформа чаще всего используется при решении Data-Engineering-задач, однако может применяться и в MLOps-пайплайнах, так как DE можно считать составной частью комплексного MLOps Workflow. Если ориентироваться на число звёзд и Forks на GitHub, MLflow немного опережает Kubeflow по популярности. Возможно, всё дело в сложности последнего.
Если говорить о задачах оркестрации, то на первом месте Argo, который хорошо интегрируется с Kubernetes. В версионировании данных лидирует DVC. Для интерактивных экспериментов на первом месте JupyterHub (он также доступен как сервис в нашем облаке в Cloud ML Platform). А если брать деплой моделей и сравнивать между собой Seldon Core и KServe, то лидирует Seldon Core. Кстати, это не абстрактные рейтинги: популярность предполагает наличие большого объема обучающих материалов и ответов на различные вопросы.
Ещё при выборе инструментов нужно учитывать, используете ли вы Kubernetes и есть ли у вас специалисты по этой платформе. Если Kubernetes активно используется, то можно рассмотреть, например, Kubeflow. В противном случае лучше собрать свою MLOps-платформу или конвейер из таких инструментов, как MLflow, DVC и AirFlow.
И не нужно забывать о том, насколько легко будет изучить тот или иной инструмент. В MLOps легче всего начать работать с MLflow, а в случае с Kubeflow и Pachyderm придётся учиться дольше и больше.
Давайте вернёмся к упомянутому в начале статьи ML Workflow и посмотрим, какие инструменты будут удобнее для решения тех или иных задач.
- Для подготовки фич для сравнительно небольшого дата-сета оптимально выглядит связка Airflow плюс Pandas. В случае больших данных лучше подходит связка из Airflow и Spark.
- Для выбора алгоритмов и тестирования оптимальная связка — Jupyter плюс MLflow. Это относительно простые инструменты, с которыми легко начать работу и которые легко встроить в свои текущие процессы.
- Если говорить о продакшене, здесь важно, есть ли у нас Kuber или нет. Если есть, то хорошим решением будет Seldon Core; если нет, то стоит попробовать MLflow.
- Для обеспечения стабильности, воспроизводимости, версионирования пайплайнов и данных стоит присмотреться к DVC или Pachyderm. Для мониторинга нужно иметь в виду, есть ли встроенный мониторинг в инструментах или нет. Допустим, Seldon Core интегрируется с Prometheus и Grafana из коробки. То есть для решения задач мониторинга нужно смотреть, какие инструменты были выбраны на предыдущих этапах, и, исходя из этого, принимать решение.
Все перечисленные Open-Source-инструменты легко и удобно тестировать в облаке.
Что касается нашей новой Cloud ML Platform, то она построена на JupyterHub и MLflow, так что эти инструменты уже настроены и интегрированы в нашу инфраструктуру. Вы можете опробовать их, заявку на бета-тестирование Cloud ML Platform можно оставить тут.