Несколько слов о бессерверных
Бессерверные архитектуры набирают популярность. Переход на бессерверные решения перекладывает большую часть самой сложной части управления серверной инфраструктурой на облачного провайдера. Это означает, что нам больше не нужно беспокоиться о таких вещах, как масштабирование, сетевое взаимодействие и выделение ресурсов. Остается больше времени, чтобы сосредоточиться на логике приложения и разработке.
Однако бессерверные архитектуры не всегда являются солнечным светом, радугой и единорогами. Они плохо подходят для долго работающих приложений, могут быть сложными в настройке и не обеспечивают такой же гибкости, как контейнерные архитектуры. Но даже с учетом этих подводных камней я бы сказал, что преимущества для многих (хотя и не для всех) приложений перевешивают затраты.
В этом посте мы развернем простую модель с помощью интерфейса командной строки Serverless Framework. Serverless CLI — это инструмент командной строки, который помогает облегчить некоторые проблемы, связанные с настройкой бессерверного приложения с помощью вашего облачного провайдера. В этом случае мы будем использовать Serverless, чтобы помочь с развертыванием на AWS.
Обзор
Мы обучим простой классификатор цветов ириса, который будет развернут как REST API с Serverless Framework. Когда все будет сказано и сделано, архитектура будет выглядеть примерно так.
Вам нужно будет установить Serverless CLI и создать учетную запись AWS, если у вас ее еще нет.
Прежде чем мы углубимся, весь код, обсуждаемый в этом посте, доступен в этом репозитории.
Модель
Модель, которую мы будем развертывать, — это всегда классический классификатор Iris.
Давайте настроим виртуальную среду, чтобы мы могли начать создавать нашу модель.
Поскольку основное внимание в статье уделяется бессерверному развертыванию, я не буду вдаваться в фактическое создание модели. Это простой готовый классификатор случайного леса от scikit-learn. Если вам интересно увидеть этот код, загляните в этот блокнот. Конечным результатом является подготовленная модель, которую мы можем загрузить для использования в качестве классификатора.
Развертывание
Теперь, когда модель сохранена, мы можем приступить к настройке развертывания с помощью интерфейса командной строки Serverless Framework. Нам нужно добавить дополнительный плагин Serverless, чтобы помочь с упаковкой наших библиотек Python. Для правильной работы плагина на вашем компьютере должен быть установлен Docker (плагин использует docker для упаковки всех требований, чтобы они без проблем работали с Lambda).
$ npm init $ npm install --save serverless-python-requirements
Чтобы сообщить Serverless, как развернуть нашу модель на AWS, нам нужно определить файл serverless.yml
.
Несколько вещей происходят в файле serverless.yml
- Мы определяем поставщика, этап и среду выполнения.
- Сообщите serverless, что мы хотим использовать плагин serverless-python-requirements для развертывания пакетов, которые мы определили в файле requirements.txt.
- Включите только те файлы, которые имеют отношение к развертыванию функции Lambda (handler.py, requirements.txt и все в каталоге model/).
- Укажите, какие функции Lambda мы хотим связать с какими конечными точками Api Gateway.
Вот и все! Теперь мы можем развернуть приложение.
$ sls deploy
Вы должны увидеть вывод, подобный следующему.
Serverless: Installing requirements of requirements.txt in .serverless... Serverless: Docker Image: lambci/lambda:build-python3.6 Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Injecting required Python packages to package... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (54.16 MB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... .................... Serverless: Stack update finished... Service Information service: serverless-iris-api stage: dev region: us-east-1 stack: serverless-iris-api-dev api keys: None endpoints: GET - https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/status POST - https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/predict functions: iris-status: serverless-iris-api-dev-iris-status iris-predict: serverless-iris-api-dev-iris-predict Serverless: Removing old service artifacts from S3...
Теперь давайте проверим конечные точки, чтобы убедиться, что они работают.
$ curl https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/status
Вы должны получить наш ответ статуса.
{“message”: “Good to go!”}
И для конечной точки прогнозирования мы тестируем массив признаков X = [3.3, 4.1, 5.3, 1.9].
$ curl -d '{"X": [3.3, 4.1, 5.3, 1.9]}' -H "Content-Type: application/json" -X POST https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/predict
Мы получаем обратно наше предсказание Ирис
{"label": "virginica", "input": [3.3, 4.1, 5.3, 1.9]}