MLOps с открытым исходным кодом: TL;DR
Эта статья служит целенаправленным руководством для специалистов по исследованию данных и инженеров ML, которые хотят перейти от экспериментального машинного обучения к готовым к производству конвейерам MLOps. Мы выявим ограничения традиционных систем ML и познакомим вас с основными инструментами с открытым исходным кодом, которые помогут вам создать более надежную, масштабируемую и поддерживаемую систему ML.

Среди обсуждаемых инструментов — Feast для управления функциями, MLflow для отслеживания и версионирования моделей, Seldon для развертывания моделей, Evidently для мониторинга в реальном времени и Kubeflow для оркестровки рабочих процессов.

Введение


Ландшафт машинного обучения постоянно меняется, и переход от разработки моделей к их внедрению в производство сопряжен с рядом трудностей. Хотя блокноты Jupyter и изолированные скрипты полезны для экспериментов, им часто не хватает функций, необходимых для системы производственного уровня. Эта статья призвана помочь вам справиться с этими проблемами, познакомив с концепцией MLOps и набором инструментов с открытым исходным кодом, которые могут облегчить создание готового к производству ML-конвейера.

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

Чем отличается ML производственного класса


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

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

Дрейф данных. Производственные системы нуждаются в постоянном мониторинге изменений в распределении данных, известных как дрейф данных, который может повлиять на производительность модели.

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

Традиционная система машинного обучения


В традиционных системах машинного обучения основное внимание часто уделяется экспериментам и проверке концепции, а не готовности к производству. Рабочий процесс, как правило, является линейным и ручным, ему не хватает автоматизации и масштабируемости, необходимых для производственной среды.

Давайте разберемся, что обычно включает в себя эта традиционная установка, на примере модели прогнозирования кредитного риска:

  • Предварительная обработка данных и разработка функций обычно выполняются наобум с помощью таких инструментов, как блокноты Jupyter. Обычно отсутствует контроль версий для преобразований данных или функций, что затрудняет воспроизведение результатов.
  • Модель обучается и проверяется с помощью одной и той же среды Jupyter notebook. Гиперпараметры часто настраиваются вручную, а в процессе обучения отсутствует систематическое отслеживание версий модели, показателей производительности и метаданных эксперимента.
  • После обучения модели прогнозы запускаются в пакетном режиме. Это ручной этап, на котором модель применяется к набору данных для создания прогнозов, которые затем сохраняются для дальнейшего анализа или отчетности.
  • Результаты прогнозирования, а также все артефакты модели вручную сохраняются в сервисе хранения данных, например в облачном хранилище данных. При этом, как правило, отсутствует версионирование и отслеживание, что затрудняет управление обновлениями и откатами моделей.

Эту настройку можно представить на следующем изображении.



Путешествие от ноутбуков к производству: Интегрированная система ML


В то время как существует огромное количество информации о жизненном цикле MLOps, эта статья призвана предоставить сфокусированный обзор, который преодолеет разрыв между моделью в блокноте Jupyter и полноценной ML-системой производственного уровня.

Наша основная цель — изучить, как можно оркестровать конкретные инструменты с открытым исходным кодом для создания надежной, готовой к производству системы ML. Хотя мы не будем подробно обсуждать Kubernetes, стоит отметить, что рассматриваемая нами архитектура все же может быть развернута на контейнерных оркестраторах для дополнительной масштабируемости и надежности.

Чтобы обосновать наши рассуждения, давайте рассмотрим реальный сценарий: специалист по анализу данных разрабатывает модель прогнозирования кредитного риска. Модель опирается на финансовые и поведенческие данные, которые хранятся в базе данных Snowflake, но с тем же успехом могут находиться и в других источниках данных.

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


Схема интегрированной системы ML

Управление данными и разработка характеристик

Управление и разработка функций для моделей машинного обучения — критически важный этап, который часто определяет качество модели. Хранилище функций служит централизованным узлом для этих функций, обеспечивая их последовательное управление, хранение и обслуживание.

Что такое магазин функций?


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

  • Offline Feature Store — используется в основном для пакетной обработки признаков. Здесь хранятся исторические данные о признаках, которые можно использовать для обучения моделей машинного обучения. Автономное хранилище оптимизировано для аналитических нагрузок, позволяя эффективно запрашивать большие объемы данных. Обычно автономное хранилище признаков поддерживается хранилищем данных или распределенной файловой системой типа S3.
  • Онлайн-хранилище признаков — в режиме реального времени предоставляет признаки для вывода модели. Когда поступает запрос на прогнозирование, онлайновое хранилище признаков быстро извлекает соответствующие признаки для ввода в модель. Это очень важно для приложений, требующих прогнозирования с малой задержкой. Онлайн-хранилища признаков часто поддерживаются высокопроизводительными базами данных, такими как Redis, чтобы обеспечить быстрое получение данных.

Инструмент: Feast

Feast (Feature Store) — это платформа с открытым исходным кодом, которая управляет функциями как для обучения, так и для вывода. В отличие от традиционных систем, в которых разработка функций часто осуществляется по отдельности и изолированно, Feast предоставляет единую платформу, которая устраняет дрейф данных и обеспечивает согласованные шаги по предварительной обработке данных как при обучении, так и при выводе.

Что нам нравится в Feast:

  • Последовательность. Обеспечивает использование одних и тех же признаков и этапов предварительной обработки данных как при обучении, так и при выводе, что снижает риск перекоса модели.
  • Прослеживаемость. Предлагает версионирование функций, что позволяет отследить точное состояние функций, использованных для обучения конкретной версии модели.
  • Модульность. Хорошо сочетается с другими инструментами MLOps, предлагая удобные точки интеграции для обучения, развертывания и мониторинга моделей.
  • Поддержка в реальном времени и в пакетном режиме: Обеспечивает как онлайн, так и офлайн хранилища функций, удовлетворяя как потребности в выводах в режиме реального времени, так и потребности в пакетном обучении.


Дополнительные соображения:
  • Требования к инфраструктуре: Feast — это не движок для обработки данных, а слой абстракции, который интегрируется с существующей инфраструктурой данных. Для пакетных вычислений характеристик задачи можно переложить на кластер Apache Spark, а вычисления характеристик в реальном времени могут выполняться приложением Kafka Streams.
  • Отслеживание и версионирование моделей


Отслеживание и версионирование моделей


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

Инструмент: MLflow

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

Кроме того, функция реестра моделей MLflow пригодится вам при выполнении нескольких моделей. Она позволяет хранить сериализованные модели и связанные с ними артефакты в централизованном хранилище. Это облегчает определение того, какая модель соответствует конкретному запуску, и отслеживание статусов развертывания в различных средах.

Что нам нравится в MLflow


  • Простота. MLflow дружественен к Python и позволяет легко регистрировать артефакты модели и метаданные, часто всего в нескольких строках кода.
  • Комплексное отслеживание. Он предлагает централизованную панель для всех ваших экспериментов по машинному обучению, что упрощает процесс сравнения.
  • Управление версиями. Функция реестра моделей неоценима для управления различными версиями ваших моделей, что облегчает откат или переход от стадии к производству.


Дополнительные соображения:
  • Контроль доступа. Хотя MLflow предоставляет базовые функции управления доступом, вам может понадобиться интегрировать его со сторонними поставщиками идентификационных данных для получения более детальных разрешений, особенно в больших командах или организациях.
  • Эксплуатационные накладные расходы. Запуск MLflow на централизованном сервере требует внимания к времени работы сервера, резервному копированию и масштабируемости. Эти эксплуатационные аспекты не являются уникальными для MLflow и применимы к любому централизованному инструменту в вашем стеке.


import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split


# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Start a new MLflow run
with mlflow.start_run() as run:
    # Train a RandomForest model
    clf = RandomForestClassifier()
    clf.fit(X_train, y_train)
    
    # Log parameters and metrics
    mlflow.log_param("criterion", clf.criterion)
    mlflow.log_metric("accuracy", clf.score(X_test, y_test))
    
    # Log the trained model
    mlflow.sklearn.log_model(clf, "RandomForestModel")
    # Register the model to the MLflow Model Registry
    mlflow.register_model(f"runs:/{run.info.run_id}/RandomForestModel", "IrisClassifier")‍


Развертывание и обслуживание моделей


После обучения и регистрации ML-модели следующим важным шагом является развертывание. Если пакетные прогнозы часто выполняются в автономном режиме, где задержка не так важна, то прогнозы в реальном времени требуют низкой задержки ответов на HTTP-запросы. Без развертывания модель ML остается лишь теоретической конструкцией; именно развертывание позволяет оживить ее в реальном мире.

Инструмент: Seldon

Что нам нравится в Seldon:
  • Гибкость. Поддерживает множество фреймворков машинного обучения, включая модели MLflow, и хорошо совместим с Python.
  • Персонализация. Позволяет создавать индивидуальные конвейеры предсказаний, позволяя настраивать шаги предварительной и последующей обработки. Например, в качестве шага предварительной обработки можно запросить онлайн-функции из Feast.
  • Мониторинг. Поставляется со встроенными возможностями мониторинга, включая метрики Prometheus и панели Grafana, для отслеживания производительности в режиме реального времени.
  • Передовые стратегии развертывания. Поддержка сложных развертываний, таких как A/B-тестирование, для оптимизации производительности модели в реальных средах.
  • Сообщество и экосистема. Благодаря открытому исходному коду Seldon имеет сильное сообщество, что облегчает поиск поддержки и ресурсов.

Дополнительные соображения:
  • Управление масштабируемостью. Хотя бесшовная интеграция Seldon с Kubernetes позволяет осуществлять автомасштабирование, управление этой масштабируемостью может быть сложным. Вам потребуется установить соответствующие политики масштабирования и пороговые значения для обеспечения эффективного использования ресурсов в дополнение к управлению кластером Kubernetes.
  • Распределение ресурсов. Несмотря на свою надежность, Seldon может быть ресурсоемким и требовать наличия хорошо обеспеченной инфраструктуры.
  • Накладные расходы на метрики. Seldon можно настроить на получение и отображение таких показателей, как количество запросов в минуту, частота отказов, задержка и потребление ресурсов (процессор, память), которые отлично подходят для мониторинга ваших моделей. Однако хранение и анализ этих показателей может быть очень накладным. Вам необходимо решить, какие показатели являются важными и как они будут храниться и к ним будет осуществляться доступ.


Мониторинг моделей


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

Инструмент: Evidently
Evidently — это инструмент с открытым исходным кодом, предназначенный для комплексного мониторинга моделей. Он предоставляет информацию о производительности модели и качестве данных в режиме реального времени, помогая вам выявлять такие проблемы, как дрейф модели и аномалии, по мере их возникновения.

Что нам нравится в Evidently:
  • Мониторинг в режиме реального времени: Evidently предоставляет возможности мониторинга в реальном времени, позволяя выявлять проблемы по мере их возникновения, а не после того, как они повлияли на работу модели или на бизнес.
  • Комплексные метрики. Предлагает широкий спектр метрик для мониторинга работы модели, включая дрейф данных, дрейф прогноза и различные статистические расхождения.
  • Удобные приборные панели. Evidently поставляется с интуитивно понятными инструментальными панелями, которые позволяют легко визуализировать и понимать показатели эффективности модели.
  • Интеграция. Он легко интегрируется в существующие конвейеры MLOps и хорошо работает с другими инструментами, такими как Seldon для развертывания моделей и Feast для управления функциями.


Дополнительные соображения:
  • Первоначальное проектирование потока данных. Прежде чем начать сбор данных, необходимо разработать поток данных, способный обрабатывать как обучающие, так и прогнозные данные. Для этого необходимо решить, как данные будут поступать, обрабатываться и в конечном итоге передаваться в Evidently для мониторинга.
  • Стратегия хранения данных. Место хранения интегрированных данных имеет решающее значение. Вам понадобится решение для хранения данных, которое позволит легко их извлекать и будет масштабируемым, особенно если вы имеете дело с большими объемами данных в режиме реального времени.
  • Автоматизированные рабочие процессы. Рассмотрите возможность автоматизации потока данных из Seldon и источника данных для обучения в Evidently. Для этого можно настроить автоматические задания ETL или использовать инструменты оркестровки, чтобы обеспечить последовательную передачу данных в инструмент мониторинга.


Оркестровка рабочих процессов


Организовать работу различных движущихся частей системы ML — задача не из легких. Каждый шаг, от ввода данных до развертывания модели, является винтиком сложного механизма. Делать это вручную не только утомительно, но и чревато ошибками.

Инструмент: Kubeflow
Kubeflow — это платформа с открытым исходным кодом, оптимизированная для развертывания рабочих процессов машинного обучения в средах Kubernetes. Она упрощает процесс переноса моделей машинного обучения из лаборатории в производство, автоматизируя координацию сложных рабочих процессов.

Что нам нравится в Kubeflow:
  • Простота. Kubeflow абстрагирует сложность оркестровки рабочих процессов машинного обучения, особенно в средах Kubernetes.
  • Масштабируемость. Будучи родным для Kubernetes, он позволяет легко масштабировать модели машинного обучения и конвейеры данных.
  • Расширяемость. Поддерживает широкий спектр фреймворков и языков машинного обучения, что делает его универсальным выбором для различных типов ML-проектов.

Дополнительные соображения:
  • Экспертиза Kubernetes. Эффективное управление Kubeflow требует хорошего понимания Kubernetes. Это включает в себя знание пространств имен Kubernetes, RBAC и других функций безопасности, которые могут усложнить управление.
  • Управление состоянием. Конвейеры Kubeflow по умолчанию не имеют состояния. Если ваши рабочие процессы требуют операций с состояниями, вам придется управлять ими самостоятельно, что еще больше усложняет задачу.
  • Требования к ресурсам. Хотя Kubeflow является мощным, он может быть ресурсоемким, и для его эффективной работы может потребоваться хорошо обеспеченная инфраструктура.
  • Следующая диаграмма может служить наглядным пособием для понимания того, как Kubeflow организует различные компоненты рабочего процесса ML, включая цикл обратной связи для непрерывного совершенствования.



Визуальное представление рабочего процесса MLOps и контура обратной связи

Изучение решений для управляемых MLOps


Хотя инструменты с открытым исходным кодом обеспечивают гибкость и поддержку сообщества, они часто сопровождаются эксплуатационным бременем, связанным с настройкой, обслуживанием и интеграцией. Один из часто упускаемых из виду аспектов — необходимость наличия в организации специалистов в области Machine Learning Engineering (MLE) для эффективного использования этих инструментов. Кроме того, время, необходимое для полного развертывания этих решений с открытым исходным кодом, может составлять от 3 до 6 месяцев, в течение которых модели могут быть задержаны в производстве, что негативно сказывается на бизнес-целях.

Если вы ищете альтернативу, которая сочетает в себе лучшее из двух миров, стоит обратить внимание на управляемые платформы MLOps.

Заключение


Переход от экспериментального машинного обучения к MLOps производственного уровня — сложный, но необходимый путь для организаций, стремящихся использовать ML в масштабе. Хотя традиционные системы могут быть достаточными для изолированных экспериментов, им не хватает надежности и масштабируемости, необходимых для производственных сред. Инструменты с открытым исходным кодом, такие как Feast, MLflow, Seldon и другие, предлагают ценные возможности, но имеют свой собственный набор проблем, включая эксплуатационные расходы и сложности интеграции.

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





А еще самое важное в нашем ТГ-канале. Без лишнего спама.

Комментарии (0)