Освоение мистического искусства развертывания модели, часть 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»