Вы разработали самую захватывающую модель машинного обучения, которую когда-либо создавали за всю свою карьеру, и с нетерпением ждете возможности протестировать ее в реальном мире, чтобы оценить ее эффективность и, неявно, вашу. Поскольку в вашей компании не хватает разработчиков, ваш менеджер считает, что, будучи специалистом по обработке данных, вы также можете развернуть свою модель и создать REST API, который будет вызываться конечным клиентом. В этом случае вам остается выбирать между:

  • «Прощай, менеджер!»
  • Используйте модель бессерверного приложения (SAM) от AWS.

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

Предварительное требование: знание AWS Lambda, API Gateway, S3 и интерфейса командной строки.

Что такое SAM:

SAM - отличный инструмент, который позволяет локально построить всю бессерверную архитектуру, которая в основном основана на событиях, генерируемых некоторыми ресурсами, такими как вызовы API REST и объект, созданный на S3, и обрабатывать эти события с помощью функции Lambda. Не только SAM позволяет вам протестировать все это на вашем компьютере, но с помощью короткой команды вы можете развернуть все в облаке для создания работающего бессерверного приложения. SAM делает процесс быстрым и очень простым. Больше можно найти здесь.

Шаг 1:

Загрузите и установите SAM cli на свой компьютер. По вашей ОС оставляю справку

Шаг 2:

После настройки SAM перейдите в cli и введите sam init. Cli поможет вам создать ваш проект . Изображение ниже говорит само за себя.

Ниже структуры каталогов:

  • Папка events содержит файлы JSON с имитацией событий для локального тестирования вашей Lambda. Вы должны создавать те, которые ожидаете получить.
  • Папка hello_word (измените ее на все, что захотите) содержит код файлов Python для вашей Lambda. Требование .txt должно содержать имена библиотек, которые вы хотите включить в окончательный пакет.
  • template.yaml - это файл конфигурации для построения желаемой бессерверной архитектуры.
  • тесты предназначены для модульных тестов.

Шаг 3:

Предположим, я использовал sklearn для своих моделей и обработал их с помощью joblib. Затем я загрузил свои модели в ведро S3.

Вы хотите просмотреть папку с кодом и отредактировать файл app.py, добавив код для загрузки ваших маринованных моделей / конвейеров и метода прогнозирования.

Обязательно вызывайте функцию load_model () вне функции lambda_handler (), чтобы воспользоваться преимуществом горячего старта. Я избегаю предварительной обработки входного наблюдения, что является просто вопросом некоторой логики кода, но идея состоит в том, чтобы передать эти наблюдения в вашу модель, которая даст вам прогнозы, которые вы можете вернуть по своему усмотрению. Лямбда-ответ должен быть похож на тот, что на картинке ниже. Обратите внимание, что любой вывод вашей функции следует помещать в поле body внутри функции json.dumps () .

Шаг 4:

Теперь вам нужно настроить файл template.yaml следующим образом:

Как вы могли заметить, идея состоит в том, чтобы объявить ресурсы, которые вы хотите использовать, в нашем конкретном случае это Function и Api. У каждого ресурса есть свои параметры конфигурации, которые вы можете найти в их специальной документации.

Раздел Outputs предназначен для отображения некоторых данных и переменных во время создания ресурсов, в нашем случае вызываемого адреса Api и Arn нашей лямбда-функции. Эту информацию можно увидеть в Aws CloudFormation.

Шаг 5:

Добавьте в файл requirements.txt все библиотеки, которые вы используете для этой функции, помните, что размер окончательного пакета не должен превышать 250 МБ.

Запустите sam build, он выведет:

Как вы видите, он создал пакет со всеми библиотеками, строитель также просканировал ваш файл требований и добавил эти зависимости в пакет.

Шаг 6:

Проверьте свою лямбду с sam local invoke -e events/event.json

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

Обратите внимание, что этот метод проверяет только ваш код Lambda, если вы хотите протестировать архитектуру API Gateway + Lambda, вам нужно вызвать: sam local start-api, это также создаст контейнер Docker, для которого вам нужно чтобы отправить вызов REST, и этот вызов будет доставлен в лямбда.

Шаг 7:

Теперь, когда вы довольны своим результатом, сделайте следующее:

sam package — s3-bucket yourbucket — output-template-file packaged.yaml

Это загрузит вашу папку сборки в указанную вами корзину S3 и создаст файл packaged.yaml, который является преобразованием в шаблон CloudFormation вашего template.yaml. Не беспокойтесь об этом.

Шаг 8:

sam deploy — template-file packaged.yaml — region eu-west-1 — capabilities CAPABILITY_IAM — stack-name my-stack

Это, наконец, запуск всей вашей работы в AWS. Он автоматически создаст экземпляры всех ваших ресурсов и свяжет их вместе. Вы можете проверить сервис CloudFormation, чтобы увидеть, что стек теперь создан.

Теперь вы можете вызвать свой API и получить прогноз модели!