В этом руководстве я расскажу вам о развертывании модели машинного обучения на AWS Lambda. Наша модель также будет доступна через API с помощью Amazon API Gateway. В конце концов, мы получим идеальный рецепт действительно безсерверной системы. Давайте сразу перейдем к делу.

Загрузите свою модель в Amazon S3

Первый шаг - загрузить вашу модель в Amazon S3. Если вы не знакомы с Amazon S3, перейдите по этой ссылке, чтобы начать работу: https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html

Создание виртуальной среды

При развертывании в AWS Lambda вам необходимо загрузить виртуальную среду, в которой будет храниться ваш код и зависимости. В папке вашего проекта напишите следующие строки. Во избежание конфликтов вам не следует называть виртуальную среду таким же, как папка проекта.

pip install virtualenv
virtualenv your_virtual_environment_name

Чтобы запустить виртуальную среду:

source your_virtual_environment_name/bin/activate

Создание Flask API

Нам понадобится базовое приложение Flask для обработки наших запросов. Приложение загрузит нашу модель из Amazon S3 и вернет прогнозы. Начните с создания файла с именем predictions.py и добавьте код ниже. Обязательно измените BUCKET_NAME и MODEL_FILE_NAME перед переходом к следующему шагу.

Загрузка нашей модели с Amazon S3

Используя библиотеку Boto, мы загружаем нашу модель, ранее сохраненную на Amazon S3, и сохраняем ее на диск для дальнейшего использования.

Создание прогнозов

И последнее, но не менее важное: мы готовы сделать некоторые прогнозы. Метод прогнозирования получает в качестве аргумента данные, отправленные в API. Вам нужно будет добавить код для обработки данных в соответствии с вашей моделью.

Вот как должен выглядеть окончательный файл

Тестирование API

  • Чтобы запустить приложение, вы должны создать переменную окружения, чтобы сообщить Flask, какие файлы выполнять:
export FLASK_APP=predictions.py

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

Установите Flask и запустите вторую команду для запуска вашего приложения:

pip install Flask
flask run

Откройте терминал и проверьте свои прогнозы:

curl -d '{"payload": "Insert the data needed for your model to make predictions"}' https://127.0.0.1:5000/

Когда все заработает, можно переходить к следующему шагу.

Развертывание в AWS Lambda

Вместо того, чтобы вручную создавать и настраивать AWS Lambda и API Gateway, мы собираемся использовать библиотеку под названием Zappa.

Zappa упрощает создание и развертывание всех приложений Python WSGI на AWS Lambda + API Gateway.

Важно: перед развертыванием обязательно настройте свои учетные данные AWS. Для получения дополнительной информации посетите: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

В вашей виртуальной среде установите необходимые пакеты:

pip install zappa sklearn boto numpy scipy

Затем инициализируйте Zappa. Когда вас попросят указать имя функции приложения, запишите predictions.app. (или название вашего приложения Flask + .app)

zappa init

AWS Lambda требует, чтобы ваша среда имела максимальный размер 50 МБ, но наша упакованная среда будет иметь размер около 100 МБ. К счастью для нас, Lambda может загружать код из Amazon S3 без особой потери производительности (всего за несколько миллисекунд).

Чтобы активировать эту функцию, вы должны добавить новую строку в свой zappa_settings.json

"slim_handler": true

Теперь вы готовы к развертыванию. Используйте команду развертывания с именем среды, которую вы выбрали при инициализации Zappa.

zappa deploy your-environment-name

По завершении вы увидите свой URL-адрес API в последнем сообщении. Он будет выглядеть так: https://abcdefg.execute-api.us-east-1.amazonaws.com/your-env-name.

Вы можете протестировать свое развертывание с помощью cURL:

curl -d '{"payload": "Insert the data needed for your model to make predictions"}' https://your-api-url.com/your-env

Поздравляю! Вы развернули свою модель в безсерверной инфраструктуре.

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

Вы также можете связаться со мной @ franksup2 в твиттере.