В этой статье мы собираемся построить модель машинного обучения для прогнозирования стоимости страхования, контейнеризируем ее с помощью 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, как показано ниже (аналогично значениям в форме онлайн-прогноза).
  • Нажмите «Отправить»
  • Вы получаете ответ со статусом «ОК» и значением с плавающей запятой.

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА

  1. https://towardsdatascience.com/deploy-machine-learning-pipeline-on-aws-fargate-eb6e1c50507
  2. https://github.com/pycaret/pycaret
  3. https://pycaret.org/