Рубрики
Uncategorized

Освоение мистического искусства развертывания модели, часть 2: Развертывание конечных точек амазонки Sagemaker с …

Овладение мистическим искусством развертывания модели, часть 2: Развертывание конечных точек Amazon Sagemaker … Теги с DevOps, Ai, MachineLearning, AWS.

Освоение мистического искусства развертывания модели, часть 2: Развертывание конечных точек Amazon Sagemaker с AWS CloudFormation

В предыдущем Статья Я обсудил несколько стратегий развертывания для моделей машинного обучения, и я показал вам, как использовать Sagemaker SDK Развернуть несколько моделей на одном и том же прогнозе конечной точки.

Это все хорошо и денди, но в настройке производства я бы поспорил, что большинство из вас предпочли бы Автоматизация Это правильно с Облачность Отказ Развертывание одним щелчком мыши, автоматическая очистка и многое другое: что не нравится?

В этом посте я покажу вам, как:

  • Разверните конечную точку SAGEMAKER, подкрепленную одной моделью С
  • масштабируйте конечную точку, добавив больше экземпляров,
  • Добавьте дополнительный вариант производства на конечную точку , то есть. Добавить вторую модель к конечной точке и настроить взвешенный круглый робин,
  • Делай вещи-вправо с хорошим ямлом Шаблоны а также Изменить наборы Отказ

Как обычно, весь код доступен на Gitlab. .

Хорошо, волшебное время!

И это, мой друг, как вы развертываете два варианта производства.

Развертывание конечной точки SAGEMAKER

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

Для Трубопроводы вывода Вам придется перечислить все контейнеры в модельном ресурсе.

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

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

Хорошо, давайте запустим это.

$ python create-stack.py
xgboost-2019-05-09-15-20-51-276
{u'StackId': 'arn:aws:cloudformation:eu-west-1:123456789012:stack/endpoint-one-model/06661d80-78b5-11e9-9878-066324f10f26', 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '065e0749-78b5-11e9-a5d5-af6ed726348b', 'HTTPHeaders': {'x-amzn-requestid': '065e0749-78b5-11e9-a5d5-af6ed726348b', 'date': 'Fri, 17 May 2019 15:04:09 GMT', 'content-length': '388', 'content-type': 'text/xml'}}}

Мех. Давайте посмотрим на консоль CloudFation.

В значительной степени то, что мы ожидали: Сначала создайте модель (то есть «зарегистрируйте» модель «Артефакт» в S3, как то, что может быть развернуто), то конфигурация конечной точки, и, наконец, конечная точка.

Через несколько минут конечная точка находится в обслуживании и видно в консоли Sagemaker. Woohoo.

Обновление конфигурации конечной точки

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

Вместо этого давайте определим Изменить набор и проверьте его влияние перед его выполнением … то есть как боевые ветераны управляют производственными системами;) Я использую CLI (потому что), не стесняйтесь использовать свой любимый язык SDK, если это лучше для вас.

$ aws cloudformation create-change-set \
--stack-name endpoint-one-model \
--change-set-name add-instances \
--use-previous-template \
--parameters ParameterKey="InstanceCount",ParameterValue="2" \
             ParameterKey=ModelName,UsePreviousValue=true \
             ParameterKey="ModelDataUrl",UsePreviousValue=true \
             ParameterKey="TrainingImage",UsePreviousValue=true \
             ParameterKey="RoleArn",UsePreviousValue=true

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

На данном этапе нет изменений. Мы могли бы назвать « AWS CloudFormation Описание-изменение набор «Чтобы увидеть, что произойдет, или мы можем посмотреть на консоль для более приятного опыта.

Количество экземпляра определяется в конфигурации конечной точки, которая сама связана с конечной точкой, поэтому имеет смысл, что оба ресурса должны быть обновлены. Чем сложнее вопрос: нужно ли их заменить, и конечная точка снизится? « Условный «В основном означает« это зависит »(или« бросить кости », если вы чувствуете себя саркастическим). На данный момент вам нужно будет посмотреть документацию Cloudbation для этих ресурсов, и, вероятно, в документации Sagemaker, а также: В производственной среде, получение этого права — это разница между невидимым изменением и простоя, поэтому RTFM Отказ

Я сэкономлю вам неприятности (на этот раз): конечная точка не будет снята. Новая конфигурация конечной точки будет создана и применяется к конечной точке без каких-либо простоя.

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

$ aws cloudformation execute-change-set \
--change-set-name add-instances \
--stack-name endpoint-one-model

Сделанный. Довольно быстро, мы видим конечную точку в « » Обновление Статус в консоли Sagemaker.

Через несколько минут набор изменений был полностью применен, и CloudFation Console сообщает нам полную историю: новая конфигурация конечной точки была создана и нанесена на конечную точку.

Давайте посмотрим на консоль Sagemaker. YUP: конечная точка — « » Активный «Опять же, и он поддерживается двумя экземплярами.

Довольно круто. Теперь давайте возьмем заметку, и добавьте вторую модель к конечной точке.

Добавление второй модели к конечной точке

Допустим, мы хотели бы использовать Канарское развертывание Чтобы проверить новую модель на конечной точке, начиная с доли живого трафика и постепенно увеличивать его до 100% (или откатываться назад …). В SAGEMAKER CRESSES мы должны создать второй Вариант производства Запуск новой модели.

Вот обновленный шаблон. Мы просто добавляем второй Модель ресурс , а также Второй вариант производства в EndPointConfig ресурс . Этот второй вариант получит треть трафика (0,5/(1 + 0,5), что означает, что первый получит две трети (1/1 + 0,5).

В реальной настройке производства мы, безусловно, начнем ниже (скажем, 10%) и постепенно увеличивайте этот номер.

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

Давайте создадим набор изменений. На этот раз мы используем обновленный шаблон, поэтому нам нужно пройти свое местоположение.

$ export MODEL2\_NAME="xgboost-190509-1528-016-39860b48"

$ export MODEL2\_ARTEFACT=""s3://sagemaker-eu-west-1-123456789012/sagemaker/DEMO-hpo-xgboost-dm/output/xgboost-190509-1528-016-39860b48/output/model.tar.gz"

$ aws cloudformation create-change-set \
--stack-name endpoint-one-model \
--change-set-name add-production-variant \
--template-body "file://endpoint-two-models.yml" \
--parameters \
   ParameterKey=ModelName2,ParameterValue=$MODEL2\_NAME \
   ParameterKey="ModelDataUrl2",ParameterValue=$MODEL2\_ARTEFACT \
   ParameterKey=ModelName,UsePreviousValue=true \
   ParameterKey="ModelDataUrl",UsePreviousValue=true \
   ParameterKey="TrainingImage",UsePreviousValue=true \
   ParameterKey="RoleArn",UsePreviousValue=true

Давайте проверим влияние в консоли.

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

Давайте выполним набор изменений.

$ aws cloudformation execute-change-set --change-set-name add-production-variant --stack-name endpoint-one-model

Еще раз, CloudFation Console отображает обновления в стеке

Через несколько минут обновление завершено. Консоль Sagemaker подтверждает, что конечная точка « » Активный «А что теперь он работает два варианта производства. Обратите внимание, что Вариант — 1 Использует один экземпляр снова, как определено в нашем обновленном шаблоне.

Как только мы удовлетворены тем, что модель работает как предназначена, мы можем снова обновить стек, чтобы сдвинуть все трафические на Вариант-2.

Убираться

Что, если мы хотим взять эту конечную точку? Super Eleas: просто удалите стек, и CloudFation автоматически очистит все.

Осторожно с API «Удалить стек»: не будет задано подтверждение! Многие инженеры DevOps узнали это слишком поздно … Само собой разумеется, мир AWS вздохнул с облегчением, когда Защита прекращения стека был представлен:)

$ aws cloudformation delete-stack --stack-name endpoint-one-model

Заключение

Как видите, вы можете легко построить безопасные и автоматические рабочие процессы развертывания для конечных точек SAGEMAKER. Конечно, SadeMaker SDK отлично подходит для разработки и тестирования, но когда дело доходит до производства, я не думаю, что вы можете побить предсказуемость и надежность облачности.

Как всегда, большое спасибо за чтение. Рад ответить на вопросы здесь или на Twitter Отказ

Приходите, приходите в субботу, давайте развернум модели обучения машину;)

Оригинал: «https://dev.to/aws/mastering-the-mystical-art-of-model-deployment-part-2-deploying-amazon-sagemaker-endpoints-with-323n»