
Разверните модель с помощью FastAPI и Heroku
В этом блоге мы увидим, как мы можем развернуть нашу модель с помощью FastAPI и Heroku. Будут использованы следующие технологии:
- FastAPI
- Героку
- Докер
- Рабочий процесс на гитхабе
- АМС
Наша модель будет классифицировать изображения собак и кошек.
Первое создание модели
Мы используем данные с https://www.kaggle.com/c/dogs-vs-cats. Модель создается с использованием предварительно обученной модели реснета. Блокнот Kaggle доступен по адресу https://github.com/njoysubho/datascience/blob/master/dog-vs-cat.ipynb. Не совсем модель SOTA, но для наших целей вполне подходит.
Мы сохранили модель в AWS S3. Мы будем использовать модель на нашем сервере FastAPI.
Служба FastAPI
Наш сервер FastAPI будет простым REST API. Он имеет одну точку `/pet`, которая принимает файл изображения и возвращает прогноз. Наш код выглядит так:
Как видите, код довольно прост. Мы читаем файл изображения и преобразуем его в тензор. Мы загружаем модель и делаем прогноз.
Полный код можно найти по адресу https://github.com/njoysubho/fastapi-dog-cat.
Теперь, когда у нас есть наша модель и служба FastApi, мы можем ее развернуть.
Развертывание
Сначала нужно создать приложение на героку. Я назвал приложение «dog-cat-fastapi».
Мы можем загрузить весь код как zip, и heroku автоматически развернет код, однако я решил использовать образ докера, так как я также хотел запускать код локально.
DockerFile выглядит так
Несколько вещей, на которые следует обратить внимание:
- Команда `RUN aws s3 cp s3://datascience-sab/${MODEL_NAME}.pth .` извлечет файл модели из корзины S3.
- Чтобы получить доступ к aws S3, ему нужны учетные данные, для этого рабочего процесса мы передаем учетные данные из секрета github и устанавливаем их в ENV.
- Когда я впервые развернул приложение, я не смог к нему подключиться, оказалось, что Heroku не поддерживает команду «EXPOSE» и устанавливает случайный порт как переменную env с именем «PORT», и мы можем использовать это, чтобы открыть порт. команда belo сделает приложение доступным в порту
`CMD gunicorn -k uvicorn.workers.UvicornWorker — bind 0.0.0.0:$PORT app.main:app`
Наконец, мы делаем наш рабочий процесс github ниже шагом для развертывания на героку.
мы передаем имя приложения, секреты имени модели в качестве аргументов сборки для команды `heroku container:push`.
После этого мы используем команду `heroku container:release`, чтобы выпустить приложение.
Полный рабочий процесс github можно найти https://github.com/njoysubho/fastapi-dog-cat/blob/main/.github/workflows/build-release-deploy.yml.
С этим мы можем развернуть наше приложение на героку.
Ниже приведены некоторые улучшения, которые можно сделать —
- Улучшите модель.
- Внедрить управление версиями модели.
- Улучшено ведение журнала, трассировка и метрики для службы.
- Также очистите образ докера и упорядочите все команды RUN и pip.
Вот и все на данный момент. Мне было очень приятно узнать о фреймворке fastapi и развернуть модель на героку.