Повестка дня:

  1. Обучите и протестируйте модель DL.
  2. Создайте приложение Flask
  3. Dockerize
  4. Размещение на AWS

Чтобы обучить и протестировать модель DL:

1. Получите набор данных. Загрузите на диск.

2. Обучите модель на коллаборации. Проверить точность. Проверьте переменные, поскольку они меняются от одной записной книжки к другой, например val_acc и val_accuracy.

3. Протестируйте модель с изображениями из тестового каталога и посмотрите, дает ли она удовлетворительный результат.

Вот ссылка на мою совместную записную книжку на github.

Загрузите сохраненную модель best1.h5 с Google Диска.

Сохраните его в той же папке, где вы хотите протестировать логику вывода. Вот мой код tf_inference.py для логики вывода:

После успешного выполнения используйте ту же логику для создания приложения Flask. Создайте файл с именем app_y.py, чтобы запустить приложение на localhost: 80.

Полный код доступен на моем гитхабе. :)

Добавьте путь helloworld, чтобы проверить его работу. Добавьте путь классификатора для запуска модели. Он принимает одно изображение в качестве входных данных и возвращает имя класса в качестве выходных данных, здесь поза йоги.

Используйте эту команду для запуска приложения на порту 80.

sudo python3 app_y.py

Проверьте, работает ли приложение, используя запрос CURL.

curl -X POST https://localhost:80/classifier/run -F “data=@tri2.jpg”

Передайте несколько файлов и проверьте.

Создайте Dockerfile в основной папке.

FROM python:3.6-slim
COPY ./app_y.py /deploy/
COPY ./requirements.txt /deploy/
COPY ./best1.h5 /deploy/
WORKDIR /deploy/
RUN pip3 install --no-cache-dir -r requirements.txt
EXPOSE 80
ENTRYPOINT ["python", "app_y.py"]

Добавьте в файл requirements.txt требования, включая версию в вашей системе. Проверьте их перед тем, как внутри записной книжки:

python3
>>>import tensorflow as tf
>>>print(tf.__version__)

Вот мой код requirements.txt:

jsonpickle
tensorflow==2.2.0-rc3
numpy
flask
Pillow

Чтобы получить образ докера

sudo docker build -t app_y-yoga .

Теперь образ создан и готов к запуску. Сделать это можно с помощью команды:

sudo docker run -p 80:80 app_y-yoga .

Проверьте, работает ли он и дает ли правильный результат:

curl -X POST http://localhost:80/classifier/run -F “data=@tri2.jpg”

Теперь, если вы создали контейнер и у вас возникли проблемы с его запуском, например, если он успешно размещен, но curl не работает, удалите контейнер докера. Если в разрешении отказано, попробуйте это. Команда lsof отображает список запущенных процессов.

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo lsof -i -P -n | grep 80
sudo kill <PID of process running on port 80>

Размещение док-контейнера на AWS

Войдите в консоль AWS и найдите EC2 в строке поиска, чтобы перейти к панели управления EC2.

Создайте пару ключей из параметра и измените разрешение с помощью:

chmod 400 <keyname>.pem

Нажмите Запустить экземпляр на панели управления EC2:

Выберите Amazon Machine Instance (AMI) из списка вариантов. AMI определяет ОС, в которой будет работать виртуальная машина.

Мы работаем с экземпляром t2.micro.

Перейдите на вкладку Настроить группу безопасности и добавьте новое правило http, которое автоматически принимает 80.

Нажмите Обзор и запуск.

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

Щелкните просмотреть экземпляры. Нажмите на свой экземпляр и скопируйте имя public-dns, указанное ниже справа.

Теперь ssh на машину ec2 из локальной системы терминала с помощью команды с полем public-dns -name заменяется на ваше имя экземпляра ec2:

ssh -i SoumiBardhan.pem ec2-user@public-dns-name
sudo amazon-linux-extras install docker
sudo service docker start
sudo usermod -a -G docker ec2-user

Если вы загружаете файлы из папки, также объявите ключ закрытым с помощью:

chmod 400 <keyname>.pem

Чтобы скопировать файлы в экземпляр ec2, запустите:

scp -i SoumiBardhan.pem file-to-copy ec2-user@public-dns:/home/ec2-user1
scp -i SoumiBardhan.pem app_y.py ec2-user@public-dns:/home/ec2-user1
scp -i SoumiBardhan.pem requirements.txt ec2-user@public-dns:/home/ec2-user1
scp -i SoumiBardhan.pem Dockerfile ec2-user@public-dns:/home/ec2-user1
scp -i SoumiBardhan.pem best1.h5 ec2-user@public-dns:/home/ec2-user1

Теперь подключитесь по ssh к виртуальной машине Amazon и выполните те же команды докера, которые использовались ранее в системе:

sudo docker build -t app_y-yoga .
sudo docker run -p 80:80 app_y-yoga .

Теперь проверьте запросы curl:

curl -X POST ec2-user@public-dns/classifier/run -F "data=@tri2.jpg"

Итак, API уже запущен. Кто угодно может получить к нему доступ с помощью вышеуказанного запроса curl.

Вот ссылка на репозиторий github. Пожалуйста, оставьте звездочку, если вы сочли это полезным. Спасибо!