Повестка дня:
- Обучите и протестируйте модель DL.
- Создайте приложение Flask
- Dockerize
- Размещение на 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. Пожалуйста, оставьте звездочку, если вы сочли это полезным. Спасибо!