Сервинг модели Grounding DINO с BentoML

Сервинг модели Grounding DINO с BentoML

Для начала рассмотрим в самых общих чертах, что такое BentoML и с чем его едят. Это open-source-инструмент, который помогает оборачивать модель в сервис и обращаться к нему по API, масштабировать сервис, а также объединять несколько сервисов в пайплайны, мониторить сервис, используя Prometheus и Grafana, хранить и версионировать модели.

Модель Grounding DINO подробно описана в статье "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection". По сути, это "сборная солянка" из нескольких довольно сложных моделей. Главная ее фишка — технология Open-Set Object Detection (OSOD), то есть детектирование объектов, чьих классов нет в обучающей выборке.

Собственно к сервингу

Чтобы обернуть код инференса в сервис с помощью BentoML, нужно выполнить следующие шаги:

  • определить конфигурацию для сборки сервиса;
  • создать класс GroundingDinoService. В нем будет вся логика сервиса: инференс модели и отрисовка результатов на изображении;
  • добавить валидацию входных параметров.

В итоге мы получим Bento — артефакт, предназначенный для развертывания ML-сервиса и включающий исходный код сервиса, все необходимые зависимости и сохраненные модели. С его помощью создается Docker-образ с автоматически сгенерированным API-сервером.

Запущенный сервис будет работать через HTTP API. Он начнет принимать изображение, промпт и пороги для инференса. В ответ сервис станет выдавать класс объекта на изображении, координаты bounding boxes и конфиденс.

Читать оригинал