Простое производственное машинное обучение с Metaflow и Seldon

Эта статья является совместной работой Клайва Кокса из Seldon и Олега Авдеева из Outerbounds. Клайв является техническим директором Seldon и работает над различными проектами с открытым исходным кодом в экосистеме MLOps, включая Seldon Core и Kubeflow. Олег — соучредитель Outerbounds, ранее работавший в Tecton. Он является одним из основных разработчиков проекта Metaflow с открытым исходным кодом.

Введение

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

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

Жизненный цикл MLOps

Стандартный конвейер MLOps можно увидеть ниже:

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

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

Локальное и удаленное развертывание

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

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

Точно так же в какой-то момент они захотят развернуть свою модель удаленно по разным причинам, включая:

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

Задача эффективных MLOps состоит в том, чтобы разрешить оба режима работы: локальный и удаленный MLOps с простыми переходами по мере необходимости между ними и в то же время предоставить простой интерфейс для специалистов по данным, которые могут не захотеть вникать в сложности удаленной инфраструктуры. настраивать. К счастью, Metaflow и Seldon предлагают для этого элегантные решения.

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

Представляем Метапоток

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

Metaflow предоставляет унифицированный API для стека инфраструктуры, который необходим для выполнения проектов по науке о данных, от прототипа до производства.

С технической точки зрения, Metaflow фокусируется на упрощении самых «скучных» аспектов рабочего процесса обработки данных: взаимодействие с хранилищами данных, доступ к данным, организация, организация и планирование заданий, обеспечение масштабирования ваших конвейеров данных в облаке и ветерок, чтобы повторить использование только вашего ноутбука. По умолчанию он предоставляет способ разработки конвейера, а также отслеживания и версии результатов, гарантируя воспроизводимость каждого запуска вашими коллегами или вами самим в будущем. Metaflow также позаботится о «компиляции» ваших рабочих процессов данных в готовый к работе облачный стек инфраструктуры на базе AWS или K8S.

Представляем Селдон

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

Seldon Core — это флагманский проект с открытым исходным кодом, который предоставляет расширение для Kubernetes, позволяющее делать выводы для любого набора моделей машинного обучения, которые необходимо развертывать, масштабировать и обновлять. Seldon Tempo — это Python SDK с открытым исходным кодом, который позволяет специалистам по данным описывать компоненты логического вывода на простом Python, локально тестировать в Docker и развертывать в Kubernetes (используя Seldon Core) без каких-либо знаний Kubernetes или взаимодействия с YAML и командной строкой Kubernetes. инструменты, которые потребуются при непосредственном использовании Seldon Core. Другие проекты, на которых мы сегодня не будем акцентировать внимание, включают набор библиотек Python с открытым исходным кодом Seldon Alibi (Alibi Explain и Alibi Detect) для добавления мониторинга и объяснений к развернутым моделям машинного обучения, MLServer — сервер моделей Python с открытым исходным кодом (также используется Tempo под капотом) и Seldon Deploy корпоративное решение от Seldon.

Пример артефакта модели Tempo Python, использованный позже в рабочем примере, показан ниже в качестве иллюстрации конструкций, которые могут создавать пользователи.

sklearn_model = Model(

name="test-iris-sklearn",

platform=ModelFramework.SKLearn,

local_folder=sklearn_local_path,

uri=sklearn_url,

description="An SKLearn Iris classification model",

)

Пользователи определяют простые классы моделей напрямую или с помощью декораторов с набором аргументов, включая имя модели, тип артефакта (в данном случае модель SKLearn), локальное и (возможное) удаленное расположение артефактов и необязательное описание. Учитывая этот темп, вы можете развернуть вашу модель локально или удаленно и позволить вам запускать прогнозы на ее основе.

Пользователи также могут комбинировать компоненты с любым пользовательским кодом и библиотекой Python. Это позволяет определить пользовательскую бизнес-логику для вывода, как показано ниже:

@pipeline(

name="classifier",

uri=classifier_url,

local_folder=classifier_local_path,

models=PipelineModels(sklearn=sklearn_model, xgboost=xgboost_model),

description="A pipeline to use either an sklearn or xgboost model for Iris classification",

)

def classifier(payload: np.ndarray) -> Tuple[np.ndarray, str]:

res1 = classifier.models.sklearn(input=payload)




if res1[0] == 1:

return res1, SKLearnTag

else:

return classifier.models.xgboost(input=payload), XGBoostTag

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

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

Объединение Tempo и Metaflow вместе

Поскольку и Metaflow, и Tempo являются Python SDK, включить Tempo в качестве шага в поток несложно. Для иллюстрации возьмем популярный набор данных Iris и построим на его основе две прогностические модели с использованием библиотек SKLearn и XGBoost. Затем мы определим артефакты вывода Tempo, которые вызывают эти две модели с пользовательской бизнес-логикой, и развернем их. Мы будем использовать Metaflow для выполнения этих шагов, как показано ниже.

Flow можно запускать локально в среде conda. Metaflow сохранит артефакты в локальной папке .metaflow, а Tempo развернет артефакты как контейнеры Docker. Эта локальная версия для разработки показана ниже, но обратите внимание, что для производственного обучения вам в конечном итоге следует перейти на полную установку Metaflow на AWS, которая сохраняет метаданные в AWS S3, даже если этапы обучения выполняются локально.

Поток можно запустить с помощью:

python src/irisflow.py  --environment=conda  run

После успешного завершения вы должны увидеть три контейнера Docker с артефактами Tempo, использующими сервер модели MLServer:

CONTAINER ID   IMAGE                       COMMAND                 CREATED            STATUS            PORTS                                           NAMES
c217349601fa   seldonio/mlserver:0.4.0   "/bin/bash -c '. ./h..."   13 minutes ago   Up 13 minutes   0.0.0.0:32971->9000/tcp, :::32971->9000/tcp   classifier
33dc22276740   seldonio/mlserver:0.4.0   "/bin/bash -c '. ./h..."   13 minutes ago   Up 13 minutes   0.0.0.0:57305->9000/tcp, :::57305->9000/tcp   test-iris-xgboost
4585020f59a2   seldonio/mlserver:0.4.0   "/bin/bash -c '. ./h..."   13 minutes ago   Up 13 minutes   0.0.0.0:56311->9000/tcp, :::56311->9000/tcp   test-iris-sklearn

Используя возможность Metaflow получать артефакты из последнего успешного запуска, мы можем легко делать прогнозы, используя сохраненный артефакт удаленной модели Tempo.

Для удаленного запуска нам нужно установить Metaflow на AWS и иметь доступный кластер GKE или EKS Kubernetes с установленным Seldon Core. Удаленный запуск позволит нам выполнять на AWS Batch с помощью Metaflow и масштабировать наше обучение по мере необходимости. Точно так же мы будем развертывать наши артефакты Tempo с Seldon Core в кластере Kubernetes, что позволит масштабировать производство, осуществлять мониторинг и управление.

Удаленная настройка показана ниже:

Поток можно запустить с помощью:

python src/irisflow.py --environment=conda --with batch:image=seldonio/seldon-core-s2i-python37-ubi8:1.10.0-dev run

После успешного завершения запуска в кластере Kubernetes должны быть запущены развертывания Seldon.

kubectl get sdep -n production
NAME            AGE
classifier      2m58s
test-iris-sklearn   2m58s
test-iris-xgboost   2m58s

Как и прежде, мы можем использовать артефакт Flow Tempo для прогнозирования, как показано ниже:

Простой путь к производственному машинному обучению

Используя Metaflow с Tempo, специалист по данным получает мощную комбинацию для разработки сквозных конвейеров машинного обучения с переключением между локальной и удаленной разработкой по мере необходимости. Оба проекта также обеспечивают аудит и воспроизводимость. Metaflow хранит все артефакты, созданные на каждом этапе, что позволяет легко перезапускать любой поток. Tempo в сочетании с Seldon Core предоставляет выходные данные yaml, которые можно использовать в качестве альтернативы развертыванию артефактов с помощью парадигмы GitOps, чтобы обеспечить четкие обновления и откат по мере необходимости при запуске и развертывании новых версий конвейера.

Для получения дополнительной информации полностью рабочий пример представлен в репозитории и документации Tempo.

Если у вас есть какие-либо вопросы или вы хотите узнать больше, присоединяйтесь к нашим сообществам Slack: