Пошаговое руководство по использованию 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.
Ниже представлен обзор архитектуры проекта:
Предпосылки
Чтобы просмотреть этот пример, убедитесь, что у вас есть следующее:
- Посетили Введение в Amazon SageMaker Pipelines, если SageMaker Pipelines кажется вам новым.
- Знакомство с Управлением жизненным циклом машинного обучения с помощью MLflow и Amazon SageMaker и его лабораторной лабораторией.
- Получите доступ к среде Amazon SageMaker Studio и ознакомьтесь с пользовательским интерфейсом Studio.
- Docker для создания и отправки образа контейнера вывода MLFlow в ECR.
- Этот репозиторий 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.