Развертывание моделей трансформеров с обнимающимся лицом с помощью FastAPI и AWS Lightsail

В этой статье я подробно объясню, как использовать модели Hugging Face Transformer, а также как оборачивать и развертывать их как API с помощью FastAPI, Docker и AWS Lightsail.

Что такое обнять лицо?

Hugging Face — это платформа сообщества и науки о данных, которая обеспечивает:

  • Инструменты, которые позволяют пользователям создавать, обучать и развертывать модели машинного обучения на основе кода и технологий с открытым исходным кодом (ОС).
  • Место, где широкое сообщество ученых, исследователей и инженеров машинного обучения может собраться вместе и поделиться идеями, получить поддержку и внести свой вклад в проекты с открытым исходным кодом.

Что такое обнимающие трансформеры?

Transformers предоставляет API для простой загрузки и обучения современных предварительно обученных моделей. Использование предварительно обученных моделей может снизить затраты на вычисления, уменьшить выбросы углекислого газа и сэкономить время при обучении модели с нуля. Модели могут использоваться в различных модальностях, таких как:

  • 📝 Текст: классификация текста, извлечение информации, ответы на вопросы, обобщение, перевод и генерация текста на более чем 100 языках.
  • 🖼️ Изображения: классификация изображений, обнаружение объектов и сегментация.
  • 🗣️ Аудио: распознавание речи и классификация аудио.
  • 🐙 Мультимодальность: табличные ответы на вопросы, оптическое распознавание символов, извлечение информации из отсканированных документов, классификация видео и визуальные ответы на вопросы.

О модели

В этом руководстве я буду использовать модель преобразования, а именно модель microsoft/dit-base-finetuned-rvlcdip.

Модель microsoft/dit-base-finetuned-rvlcdip представляет собой модель Document Image Transformer (DiT), предварительно обученную на IIT-CDIP, наборе данных, который включает 42 миллиона изображений документов и точно настроен на RVL- CDIP, набор данных, состоящий из 400 000 изображений в градациях серого в 16 классах, по 25 000 изображений в каждом классе. Он был представлен в статье DiT: самоконтролируемая предварительная подготовка для преобразователя изображения документа Li et al. и впервые выпущен в этом репозитории. Обратите внимание, что DiT идентична архитектуре BEiT.

Для получения дополнительной информации о модели перейдите по этой ссылке.

Что такое API?

Интерфейс прикладных программ (API) – это набор подпрограмм, протоколов и инструментов для создания программных приложений. По сути, API определяет, как должны взаимодействовать программные компоненты.

Что такое FastAPI?

FastAPI – это веб-платформа для разработки RESTful API на языке Python. FastAPI основан на Pydantic и подсказках типов для проверки, сериализации и десериализации данных, а также автоматического автоматического создания документов OpenAPI. Он полностью поддерживает асинхронное программирование и может работать с Uvicorn и Gunicorn.

Вы можете проверить эти ссылки на документацию FastAPI и как это работает 👇

FastAPI (tiangolo.com)

Использование FastAPI для создания веб-API Python — настоящий Python

tiangolo/fastapi: платформа FastAPI, высокая производительность, простота в освоении, быстрота написания кода, готовность к работе (github.com)

Почему FastAPI?

Причины использования FastAPI:

  • Быстро: очень высокая производительность, сравнимая с NodeJS и Go (благодаря Starlette и Pydantic). Один из самых быстрых доступных фреймворков Python.
  • Быстрый код: увеличьте скорость разработки функций примерно на 200–300 %. *
  • Меньше ошибок. Сократите примерно на 40 % ошибок, вызванных человеческим фактором (разработчиком). *
  • Интуитивный: отличная поддержка редактора. Завершение везде. Меньше времени на отладку.
  • Простота. Разработана так, чтобы ее было легко использовать и осваивать. Меньше времени на чтение документов.
  • Короткий: сведите к минимуму дублирование кода. Несколько функций из каждого объявления параметра. Меньше ошибок.
  • Надежность: получите готовый к работе код. С автоматической интерактивной документацией.
  • На основе стандартов: основаны (и полностью совместимы) с открытыми стандартами для API: OpenAPI (ранее известный как Swagger) и JSON Schema.

Что такое Докер?

Docker — это платформа контейнеризации с открытым исходным кодом. Он позволяет нам упаковывать приложения в контейнеры — стандартизированные исполняемые компоненты, объединяющие исходный код приложения с библиотеками операционной системы (ОС) и зависимостями, необходимыми для запуска этого кода в любой среде.

Что такое Docker Compose?

Docker Compose – это инструмент, разработанный для помощи в определении и совместном использовании многоконтейнерных приложений. С помощью Compose мы можем создать файл YAML для определения служб и с помощью одной команды можем все развернуть или разорвать.

Более подробную информацию о Docker и docker-compose можно найти ниже 👇

https://www.docker.com/

https://docs.docker.com/compose/

Об AWS Lightsail

Amazon Lightsail — это поставщик виртуальных частных серверов (VPS). Это самый простой способ начать работу с AWS для разработчиков, представителей малого бизнеса, студентов и других пользователей, которым необходимо решение для создания и размещения своих приложений на облако.

Среда разработки

Я буду использовать Gitpod в качестве среды разработки для этого проекта.

Gitpod — это платформа для разработчиков с открытым исходным кодом, автоматизирующая создание готовых к кодированию сред для разработчиков. Gitpod постоянно создает ваши ветки git, как CI-сервер, так что вы можете сразу приступить к написанию кода — больше не нужно ждать загрузки зависимостей и завершения сборки.

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

https://gitpod.io/

https://www.gitpod.io/docs/getting-started

Вы можете перейти в репозиторий ниже, чтобы клонировать исходный код для этого руководства. Репозиторий также содержит ссылку на gitpod, чтобы вы могли сразу начать работу с файлами проекта.

https://github.com/Nneji123/How-to-Deploy-Machine-Learning-Models-with-FastAPI-and-AWS-Lightsail

Структура файла проекта

Структура файла репозитория приведена ниже:

├── app.py
├── docker-compose.yml
├── Dockerfile
├── download.py
├── LICENSE
├── README.md
├── requirements.txt
└── utils.py

app.py

Этот файл содержит важный исходный код для создания и запуска нашего приложения FastAPI. Вот что содержит файл:

API имеет три конечных точки;

  1. Конечная точка GET ‘/’, которая является просто домашней страницей.
  2. Конечная точка ‘/document-classifier’. Эта конечная точка принимает файл PDF в качестве входных данных, а затем возвращает ответ JSON с классами, к которым принадлежит файл PDF.
  3. Конечная точка ‘/classify-image’. Эта конечная точка принимает файл изображения в качестве входных данных, а затем возвращает ответ JSON с классами, к которым принадлежит файл изображения.

докер-compose.yml

Докер-композитор. yml — это файл конфигурации для Docker Compose. Это позволяет развертывать, комбинировать и настраивать несколько контейнеров Docker одновременно. В этом случае я использовал его для локального запуска контейнера Docker для проекта.

Докерфайл

Dockerfile содержит все команды, необходимые для создания и запуска нашего образа Docker.

Dockerfile выше выполняет следующие шаги:

  1. Берет образ python:3.8.13-slim-bulseye из концентратора Docker. Это называется базовым изображением.
  2. Создает рабочий каталог с именем app.
  3. Устанавливает пакет poppler-utils. Этот пакет необходим Linux для того, чтобы мы могли работать с PDF-файлами и манипулировать ими.
  4. Обновляет библиотеку setuptools.
  5. Устанавливает версию Pytorch для ЦП и другие требования.
  6. Копирует все файлы из нашего текущего каталога в сборщик Docker.
  7. Выставляет порт 8000. Это очень важный шаг, который позволяет нашему контейнеру быть видимым на AWS Lightsail.
  8. Запускает файл download.py.
  9. Запускает приложение FastAPI с помощью uvicorn.

скачать.py

Этот файл загружает предварительно обученную модель из Hugging Face.

требования.txt

Этот файл содержит необходимые требования для нашего API.

utils.py

Этот файл содержит функции, которые генерируют классификации для файлов PDF и изображений.

Как запустить API

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

Запустите команду ниже в своем терминале, чтобы собрать и запустить приложение:

docker-compose up -d --build

Флаг -d создает и запускает контейнер Docker в автономном режиме, т. е. вы не сможете просматривать журналы. Флаг --build создает образ Docker, а флаг up запускает контейнер.

Демонстрация API

Видео ниже демонстрирует, как работает приложение. Приложение работает на порту 8080 из среды Gitpod.

Отправка образа Docker в Docker Hub

Прежде чем мы развернем API на AWS Lightsail, нам нужно создать и отправить образ Docker в Docker Hub, чтобы мы могли указать его при настройке требований Lightsail. Чтобы создать и отправить образ Docker, выполните следующие действия:

  1. Зарегистрируйтесь/войдите в Docker Hub с помощью терминала.

Если у вас нет учетной записи Docker Hub, перейдите на этот сайт и зарегистрируйтесь, чтобы вы могли войти в Docker Hub из терминала.

docker login or docker login -u username -p password

Замените имя пользователя на ваше фактическое имя пользователя и пароль на ваш фактический пароль от Docker Hub.

2. Создайте образ Docker и отправьте его в Docker Hub.

docker build -t username/imagename .
docker push username/imagename

Замените имя пользователя своим именем пользователя Docker Hub, а имя изображения — любым именем, которое вы хотите. Например, в моем случае команды будут выглядеть так:

docker build -t nneji123/doc-classifier .
docker push nneji123/doc-classifier

После выполнения вышеуказанных шагов ваш образ должен быть доступен на Docker Hub. Мой образ Docker доступен здесь.

Развертывание API на AWS LightSail

Следующим шагом является развертывание API на AWS LightSail. Для этого следуйте и выполните следующие шаги:

  1. Перейдите на https://aws.amazon.com, чтобы войти или зарегистрироваться в AWS.

2. После входа в AWS перейдите на домашнюю страницу LightSail и создайте новый контейнерный сервис, как показано на изображении ниже.

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

4. Введите желаемое имя контейнера, свой образ (образ Docker, который ранее был загружен в Docker Hub), а также порты и протокол (8000 и HTTP соответственно).

5. Выберите общедоступную конечную точку и нажмите создать в службе контейнеров, чтобы развернуть приложение.

Заключительные шаги

Мы почти закончили! Последний шаг — проверить, успешно ли развернуто приложение и работает ли оно без ошибок. Для этого вы можете проверить журналы или перейти по ссылке на контейнер, созданной Lightsail, как показано на изображении ниже.

Как видно из изображения выше, наше приложение было создано и успешно работает. Теперь вы можете проверить конечную точку, если она работает.

Заключение

В заключение мы смогли использовать предварительно обученную модель преобразования лица, которая может классифицировать документы по различным категориям, и развернуть модель как API с FastAPI, Docker и AWS Lightsail.

Рекомендации







Вы дочитали статью до конца! Спасибо за чтение и надеюсь, что вы многому научились. Если вам понравился мой контент и вы хотите связаться со мной, вы можете сделать это:

  1. Следуйте за мной на канале.
  2. Связь со мной в LinkedIn и Twitter.
  3. Проверяю мою работу на GitHub.