Пошаговое руководство по использованию MLflow с проектами SageMaker

Ранее в этом году я опубликовал пошаговое руководство по развертыванию MLflow на AWS Fargate и его использованию с Amazon SageMaker. Это может помочь упростить экспериментальную фазу проекта машинного обучения.

В этом посте мы сделаем шаг вперед и автоматизируем непрерывный жизненный цикл машинного обучения с помощью MLflow и Amazon SageMaker Pipelines.

SageMaker Pipelines объединяет оркестровку рабочих процессов машинного обучения, реестр моделей и CI / CD в один комплекс, чтобы вы могли быстро запустить свои модели в производство.

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

Обзор пошагового руководства

Мы разберемся с этим за 3 шага:

  • Сначала мы развернем MLflow на AWS и запустим проект MLOps в SageMaker.
  • Затем мы обновим конвейер modelBuild, чтобы мы могли регистрировать модели в нашем реестре моделей MLflow.
  • Наконец, я покажу, как вы можете развернуть модели MLflow в производстве с помощью конвейера modelDeploy.

Ниже представлен обзор архитектуры проекта:

Предпосылки

Чтобы просмотреть этот пример, убедитесь, что у вас есть следующее:

  1. Посетили Введение в Amazon SageMaker Pipelines, если SageMaker Pipelines кажется вам новым.
  2. Знакомство с Управлением жизненным циклом машинного обучения с помощью MLflow и Amazon SageMaker и его лабораторной лабораторией.
  3. Получите доступ к среде Amazon SageMaker Studio и ознакомьтесь с пользовательским интерфейсом Studio.
  4. Docker для создания и отправки образа контейнера вывода MLFlow в ECR.
  5. Этот репозиторий GitHub клонирован в среду вашей студии.

Шаг 1. Развертывание MLflow на AWS и запуск проекта MLOps в SageMaker

Развертывание MLflow на AWS Fargate

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

Если у вас его нет, вы можете следовать инструкциям и пояснениям в блоге, чтобы развернуть версию MLflow с открытым исходным кодом на AWS Fargate.

Запуск вашего проекта MLOps

Теперь нам нужно запустить проект SageMaker на основе шаблона MLOps для построения, обучения и развертывания модели.

Вы можете следить за видео, показанным Жюльеном Саймоном, чтобы сделать это:

Шаблон проекта создаст 2 репозитория CodeCommit для modelBuild и modelDeploy, 2 конвейера CodePipeline для CI и CD, CodeBuild проекты для упаковки и тестирования артефактов и другие ресурсы для запуска проекта.

Разрешение проекту доступа к хранилищу артефактов MLflow

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

Роль называется AmazonSageMakerServiceCatalogProductsUseRole, и вы можете обновить ее разрешения, как я сделал ниже:

Шаг 2. Обновление конвейера modelBuild для регистрации моделей в MLflow

После клонирования репозитория modelBuild в вашу среду вы можете обновить код кодом из папки model_build.

Вы можете найти пример конвейера машинного обучения в pipeline.py. Он состоит из 2 простых шагов:

  • PrepareData получает набор данных из sklearn и разбивает его на наборы для обучения / тестирования.
  • TrainEvaluateRegister обучает модель случайного леса, регистрирует параметры, показатели и модель в MLflow.

Убедитесь, что в строке 22 файла pipeline.py вы добавили URI балансировщика нагрузки MLflow в параметр pipeline. Он будет передан в TrainEvaluateRegister, чтобы он знал, где указать MLflow.

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

С этого момента конвейер будет регистрировать новую версию модели в MLflow при каждом выполнении.

Для дальнейшей автоматизации вы можете запланировать конвейер с помощью Amazon EventBridge или использовать триггеры другого типа с методом start_pipeline_execution.

Шаг 3. Развертывание моделей MLflow в производство с помощью конвейера modelDeploy

Теперь мы можем вносить новые версии моделей в реестр моделей MLflow и будем использовать сторону modelDeploy проекта MLOps для их развертывания в производственной среде.

Отправка образа контейнера логического вывода в ECR

Наряду с моделью машинного обучения нам нужен образ контейнера для обработки логического вывода в нашей конечной точке SageMaker. Давайте поместим тот, который предоставлен MLflow, в ECR. Убедитесь, что это сделано в том же регионе AWS, что и ваш проект MLOps.

В моем случае я нажимаю его со своего ноутбука, используя следующие команды:

pip install -q mlflow==1.18.0
mlflow sagemaker build-and-push-container

Обновление репозитория modelDeploy

Далее вы можете обновить репозиторий modelDeploy кодом из этой папки.

В buildspec.yml вы можете определить версию модели для развертывания в производственной среде. Вам также потребуется ввести URI балансировщика нагрузки MLflow и URI контейнера вывода.

Я обновил build.py, чтобы получить бинарную версию выбранной модели из MLflow, и загрузил его model.tar.gz в S3.

Это делается с помощью mlflow_handler.py, который также перемещает этапы модели в MLflow, когда модели проходят через конвейер modelDeploy.

Запуск развертывания

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

При развертывании новой версии конвейер заархивирует предыдущую.

И вы можете видеть, что ваши конечные точки SageMaker готовы генерировать прогнозы.

Заключение

Amazon SageMaker Pipelines объединяет инструменты MLOps в единое целое, чтобы сократить усилия по запуску сквозных проектов MLOps.

В этом посте мы использовали проект MLOps SageMaker и реестр модели MLflow для автоматизации сквозного жизненного цикла машинного обучения.

Чтобы пойти дальше, вы также можете узнать, как развернуть бессерверную службу вывода с помощью конвейеров Amazon SageMaker.