Инструменты для Machine Learning Operations (MLOps) на облачной платформе VK Cloud

Модуль 4

Машинное обучение

Тема 1

Машинное обучение в облаке

В прошлых модулях мы разобрали инструменты для работы с различными типами данных в облаке. Теперь перейдем к машинному обучению. Поговорим о том, как облачные технологии помогают проводить эксперименты с данными и работать с ML-моделями.

Концепция MLOps

MLOps (Machine Learning Operations) — это своего рода DevOps для машинного обучения. Этот подход помогает стандартизировать процесс разработки моделей и сокращает время их выкатки в продакшен, разбивая барьер между Data-Science-специалистами и дата-инженерами.

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

С MLOps любая новая модель передается в производство быстро и сразу начинает приносить пользу бизнесу. Также MLOps попутно решает задачи трекинга, версионирования экспериментов, датасетов и моделей, а также мониторинга поведения моделей в продакшен-среде.

Если кратко:

MLOps — это DevOps в сфере машинного обучения.
Главная задача — сократить время выкатки моделей в продакшен.
Помогает стандартизировать процесс разработки моделей машинного обучения.
Включает в себя задачи трекинга моделей, версионирования и мониторинга.

ML Workflow

Чтобы подробнее разобраться с прикладными аспектами MLOps, рассмотрим стандартный ML Workflow.

Существуют разные подходы к определению шагов. Выделим два основных этапа: экспериментирование и вывод ML-модели в продакшен:

Чтобы решать задачи от Data Engineering до деплоя, нужен набор инструментов. И здесь необходимо выбрать из двух подходов к работе:

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

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

Kubeflow

Kubeflow — это большой и сложный набор инструментов, полноценный комбайн. В него входят Seldon Core, KFServing, Kubeflow Pipelines и ещё множество решений, ставших стандартом в отрасли. К тому же в Kubeflow встроен Jupyter Notebook.

Kubeflow живёт внутри Kubernetes, а значит, позволяет сразу из коробки запускать всё в K8s, не углубляясь во внутренние механизмы оркестратора.

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

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

Ещё одна существенная проблема Kubeflow — слабость и пробелы в документации, что особенно критично при установке и наладке сложного инструмента. По Kubeflow не хватает обучающих материалов, следовательно, погружать в процесс новых дата-сайентистов может быть нелегко. В общем, Kubeflow — выбор мастеров, многопрофильных исследователей и экспериментаторов.

MLflow

Альтернативой Kubeflow выступает MLflow. Эта платформа состоит из меньшего количества элементов и выглядит более логично и упорядоченно. Вот её основные компоненты:

MLflow Tracking решает задачи на этапе экспериментов — обеспечивает логирование параметров, метрик, кода и других артефактов.
MLflow Models отвечает за вывод моделей в продакшен: упаковку в контейнеры и деплой.
Model Registry — централизованное хранилище для различных ML-моделей. Здесь есть Lineage и возможность переводить модели на разные жизненные этапы, такие как Stage и Production.
MLflow Projects — формат организации кода и проекта для обеспечения воспроизводимости и повторного использования.

С помощью MLflow можно закрыть большинство потребностей в MLOps.

Если установка и настройка Kubeflow может превратиться в эпическое приключение на неопределенное количество дней, то с MLflow всё гораздо проще. Есть Localhost, с которого работают дата-сайентисты, и есть сервер, где расположен Tracking Server MLflow. Можно подключить S3-хранилище для моделей, артефактов, конфигураций. Можно также развернуть PostgreSQL. Этот элемент необязательный, но, если его установить, там будут храниться различные метаданные.

Что выбрать

Мы рассмотрели только две комплексные платформы для работы в 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. Кстати, это не абстрактные рейтинги. Популярность на GitHub предполагает наличие большого объема обучающих материалов и ответов на различные вопросы.

Также при выборе инструментов нужно учитывать, используете ли вы Kubernetes и есть ли у вас специалисты по этой платформе. Если Kubernetes активно используется, то можно рассмотреть, например, Kubeflow. В противном случае лучше собрать свою MLOps-платформу или конвейер из таких инструментов, как MLflow, DVC и AirFlow.

Важно помнить о том, насколько легко будет изучить тот или иной инструмент. Легче всего запустить MLOps-процессы с MLflow. В случае с Kubeflow придётся учиться дольше и больше.

Давайте вернёмся к упомянутому в начале ML Workflow и посмотрим, какие инструменты будут удобнее для решения тех или иных задач.

Для подготовки фич при сравнительно небольшом датасете оптимально выглядит связка Airflow+Pandas. В случае больших данных лучше подходит связка из Airflow+Spark.
Для выбора алгоритмов и тестирования оптимальная связка — Jupyter+MLflow. Это относительно простые инструменты, с которыми легко начать работу и которые просто встроить в свои текущие процессы.
Если говорить о продакшене, важно учесть, используете ли вы Kubernetes. Если да, то хорошим решением будет Seldon Core. Если нет, стоит попробовать MLflow.
Для стабильности, воспроизводимости, версионирования пайплайнов и данных стоит присмотреться к DVC или Pachyderm. Также важно учитывать, есть ли в инструментах встроенный мониторинг. Допустим, Seldon Core интегрируется с Prometheus и Grafana из коробки. То есть для решения задач мониторинга нужно смотреть, какие инструменты были выбраны на предыдущих этапах, и, исходя из этого, принимать решение.

Все перечисленные Open-Source-инструменты легко и удобно тестировать в облаке.

В нашем облаке MLOps задачи решаются в связке JupyterHub + MLflow. В видео мы покажем, как развернуть эти инструменты, а также познакомим с основной функциональностью.

MLOps в ML Platform

JupyterHub

MLFlow

Запускаем первую ML-модель на ML Platform