В этой статье мы собираемся построить модель машинного обучения для прогнозирования стоимости страхования, контейнеризируем ее с помощью Docker и будем использовать в качестве веб-приложения Flask с помощью AWS Fargate.
ПРИМЕЧАНИЕ. Я использовал машину AWS EC2 под управлением Linux-2. Моя машина с Windows медленно создавала изображения.
Если вы собираетесь использовать экземпляр AWS EC2, ознакомьтесь с этими документами.
- Подключитесь к AWS EC2 с помощью PUTTY
- Перенос файлов в AWS EC2 с помощью FileZilla
ПРИМЕЧАНИЕ:
Большая часть этой статьи взята из статей Моэза Али о Pycaret и его приложениях.
Сначала протестируйте приложение Flask на локальном компьютере или экземпляре AWS EC2, прежде чем развертывать его в ECS.
1. Построить модель
Источник данных:
Разветвите этот репозиторий GitHub и следуйте инструкциям
https://github.com/kimerajoseph/deploy-ml-model
Проверьте файл requirements.txt и установите зависимости
Проверьте файл «pycare_model_ml_app.ipynb» в репозитории GitHub или следуйте приведенному ниже коду.
# import the necessary libraries import pandas as pd import numpy as np # read the data data_insurance = pd.read_csv("path/to-your-data") data_insurance.shape # build the model from pycaret.regression import * s1 = setup(data = data_insurance, target = 'charges', session_id=123) # compare all models in the library best = compare_models() # you can choose criteria for evaluating models best = compare_models(sort="RMSE") # Save the best model save_model(best, "my_second_pipeline")
2. Создайте веб-приложение Flask для обслуживания вашей модели
Если вы новичок в Flask и хотите узнать больше, ознакомьтесь с официальной документацией.
Для целей этого руководства файл «app.py» включен в репозиторий GitHub. Вы можете использовать его и следовать
https://github.com/kimerajoseph/deploy-ml-model
Внешний интерфейс построен с использованием HTML, CSS и JavaScript.
3. Создайте репозиторий AWS ECR
- Войдите в свой аккаунт
- Перейти к репозиторию эластичных контейнеров AWS (ECR)
- Создать новый репозиторий
- Используйте опцию «приватный»
- Нажмите на только что созданный репозиторий, затем «Просмотреть push-команды». Эти команды будут использоваться на следующем шаге.
4. Создайте образ докера и отправьте его в репозиторий AWS ECR.
- Перейдите в папку вашего проекта
- Используйте команды в шаге 3 выше. У меня возникли проблемы с первой командой (вход в репозиторий ECR). Я использовал команду ниже
# command 1 aws ecr get-login-password --region <your-aws-region> | docker login --username AWS --password-stdin <your-aws-account-id>.dkr.ecr.<your-aws-region>.amazonaws.com # Command 2 docker build -t <your-image-name> . # Command 3 docker tag <your-image-name>:latest <your-aws-account-id>.dkr.ecr.<your-aws-region>.amazonaws.com/<your-image-name>:latest # Command 4 docker push <your-aws-account-id>.dkr.ecr.<your-aws-region>.amazonaws.com/<your-image-name>:latest
ПРИМЕЧАНИЕ. Если репозиторий ECR является общедоступным, приведенный выше код в команде 1 изменяется. Идентификатор второй учетной записи AWS заменяется на «общедоступный». Для этого урока мы использовали частный репозиторий
- Нажмите на репозиторий, вы должны увидеть загруженное изображение с отметкой времени и меткой «последний», как показано на изображении ниже.
- Скопируйте его URI и вставьте в блокнот. Он понадобится на шаге 6.
5. Создайте кластер
- Нажмите «Кластер» в меню слева.
- Выберите «Только сеть» и нажмите «Следующий шаг».
- Введите имя кластера и нажмите «Создать» внизу
- Кластер создан
- Нажмите «Кластеры», и ваш вновь созданный кластер должен появиться в списке.
6. Создайте новое определение задачи
- Нажмите «Определения задач» в меню слева.
- Нажмите «Далее»
- Введите название задачи
- Используйте конфигурацию, показанную на изображении ниже
- Нажмите «Добавить контейнер»
- Введите имя контейнера и URI образа из шага 4 выше ИЛИ нажмите на свой репозиторий ECR, затем скопируйте URI образа с тегом «последний»
- Нажмите «Добавить»
- Затем нажмите «Создать» внизу
7. Запустите задачу
- Нажмите на задачу, затем в разделе «Действие» выберите «Выполнить задачу».
- Выберите «Фаргейт»
- Для операционной системы выберите «Linux».
- Выберите VPC и подсеть из доступных вариантов.
- Нажмите «Выполнить» внизу
8. Откройте порт 5000 для обслуживания приложения Flask.
- Нажмите «Кластеры»
- Нажмите «Задачи»
- Нажмите «Задача», а не «Определение задачи».
- Нажмите на EN ID
- Нажмите на группу безопасности
- Нажмите «Изменить правила безопасности для входящего трафика».
9. Запустите приложение
- Используйте общедоступный IP-адрес и порт 5000 для запуска приложения.
10. Тестовый API в VS Code
- Перейдите к расширениям, найдите клиент Thunder и установите расширение.
- Нажмите на расширение (вероятно, последний значок внизу), затем «новый запрос»
- Выберите метод «POST», затем IP-адрес вашего приложения и конечную точку.
- Нажмите на тело, затем укажите объект JSON, как показано ниже (аналогично значениям в форме онлайн-прогноза).
- Нажмите «Отправить»
- Вы получаете ответ со статусом «ОК» и значением с плавающей запятой.