Практические руководства

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

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

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

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

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

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

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

Мы развернем службу вывода в 3 этапа:

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

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

Предпосылки

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

  1. Мы будем повторно использовать код и концепции, показанные в моих предыдущих сообщениях, для службы бессерверного вывода. Перед тем как начать, убедитесь, что вы знакомы с этим примером и этим примером.
  2. Посещение Создание, автоматизация, управление и масштабирование рабочих процессов машинного обучения с использованием Amazon SageMaker Pipelines и Знакомство с Amazon SageMaker Pipelines может стать хорошим началом, если эта функция SageMaker кажется вам новой.
  3. Получите доступ к среде Amazon SageMaker Studio и ознакомьтесь с пользовательским интерфейсом Studio.
  4. Docker для сборки и отправки образов контейнеров Lambda в ECR, если вы делаете это из своей среды. SageMaker Studio Image Build CLI, если вы отправите образ контейнера из Studio.
  5. Этот репозиторий GitHub клонирован в среду вашей студии.

Шаг 1. Запуск вашего проекта MLOps в SageMaker и определение службы вывода.

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

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

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

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

Конвейер ModelBuild автоматически запускает рабочий процесс машинного обучения и регистрирует модель XGBoost в реестре моделей. Мы сохраним эту часть проекта как есть и изменим репозиторий ModelDeploy, чтобы мы могли развернуть модель в бессерверной службе.

Определение службы бессерверного вывода

Amazon API Gateway станет дверью к нашему сервису, а AWS Lambda выполнит вывод. Стек будет определен с помощью CDK. Вы можете найти похожие шаблоны в моих предыдущих постах здесь и здесь.

Создайте обработчик вывода для Lambda

Следующий файл identify.py содержит обработчик вывода для модели XGBoost:

Когда создается новая модель XGBoost, SageMaker сохраняет двоичный файл в файле model.tar.gz в S3. Мы передадим это местоположение S3 в функцию Lambda в качестве переменной среды, чтобы функция могла загрузить и извлечь ее в папку / tmp. Я создал utils.py, чтобы позаботиться об этом.

Вы можете найти Dockerfile для функции Lambda в папке контейнера.

Отправка лямбда-изображения в ECR

На первом этапе конвейера ModelDeploy запускается проект CodeBuild с именем ModelDeployBuildProject. По умолчанию он использует aws / codebuild / amazonlinux2-x86_64-standard: 3.0 в непривилегированном режиме для упаковки нашего стека. шаблон инфраструктуры.

Таким образом, CDK не сможет создать и отправить образ контейнера в ECR из самого CodeBuild. Вы можете отправить образ контейнера в ECR с помощью SageMaker Studio Image Build CLI, если вы делаете это из Studio. В моем случае я нажимаю его со своего ноутбука с помощью build_and_push.sh:

sh build_and_push.sh lambda-inference

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

Создайте стек CDK для службы вывода

Вы можете найти стек CDK для службы логического вывода в папке стека и добавить в него местоположение своего образа ECR.

Мы обновим файл buildspec.yml на шаге 2, чтобы CodeBuild мог сгенерировать из него шаблон CloudFormation.

Шаг 2. Обновление репозитория ModelDeploy для отражения бессерверного развертывания

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

Вы можете найти ниже файл buildspec.yml. Он генерирует шаблон CloudFormation из стека CDK и выводит его в CodePipeline для развертывания:

Сценарий build.py использует boto3 для получения последнего утвержденного двоичного файла модели из реестра модели и помещения его в промежуточные и производственные файлы конфигурации.

Мы также обновляем test.py, чтобы выполнить базовое тестирование службы вывода на этапе подготовки. Он отправляет пример полезной нагрузки в API и проверяет, соответствует ли статус ответа ОК.

Шаг 3. Развертывание и использование службы вывода

Перед развертыванием

Конвейер ModelDeploy предоставляет ARN-роль IAM для использования ресурсов в вашем стеке. Вам нужно будет обновить эту роль, чтобы она могла использовать API Gateway, AWS Lambda и получать образы из ECR.

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

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

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

Теперь у нас есть все необходимое для запуска службы бессерверного вывода. Вы можете отправить код в основную ветку репозитория modeldeploy.

Вы также можете войти в реестр моделей и утвердить модель для запуска в производство.

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

Используя ваш сервис

Когда ваша служба успешно развернута в производственной среде, вы можете перейти в консоль службы шлюза API и скопировать URL-адрес API.

Мы используем этап $ default здесь только в иллюстративных целях. См. Публикация API REST для вызова клиентами для получения инструкций по публикации API.

Ниже приведены тестовые данные, которые вы можете добавить в тело запроса:

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

Заключение

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

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