Habr AI→ оригинал

أوضح BentoML كيفية تحويل Grounding DINO إلى خدمة للإنتاج مع web API

استعرض BentoML سيناريو عمليًا لخدمة Grounding DINO، وهو نموذج zero-shot لاكتشاف الكائنات عبر طلب نصي. يوضح الكاتب كيف يمكن نقل inference إلى خدمة Python، وإضافة

أوضح BentoML كيفية تحويل Grounding DINO إلى خدمة للإنتاج مع web API
Источник: Habr AI. Коллаж: Hamidun News.
◐ Слушать статью

BentoML показал практический сценарий, как вынести Grounding DINO из ноутбука в production-сервис без тяжелой MLOps-обвязки. На примере zero-shot детектора объектов автор собрал HTTP API, добавил валидацию параметров и показал, как запускать сервис локально и в Docker.

Зачем здесь

BentoML Главная мысль статьи простая: обучить модель мало, ее еще нужно нормально доставить пользователю. Для production-сценария нужны хранение и версионирование весов, контроль ресурсов, удобный API и понятный путь к деплою. BentoML закрывает именно этот слой.

Фреймворк позволяет обернуть Python-код модели в сервис, автоматически подготовить окружение, собрать Docker-образ и сразу получить HTTP-интерфейс со Swagger UI. Для команд, которые не хотят строить весь MLOps-стек вручную, это заметно сокращает путь от эксперимента до рабочего сервиса. В качестве примера выбран Grounding DINO — модель для open-set object detection.

В отличие от классических детекторов, она опирается не только на изображение, но и на текстовый запрос. Это значит, что на вход можно подать картинку и список описаний вроде a cat или a remote control, а модель попытается найти именно эти объекты, даже если они не были заранее зашиты как фиксированные классы. Для сервисного сценария это хороший кейс: есть и инференс, и текстовые параметры, и визуальный результат, который удобно вернуть по API.

Как собрать сервис

Автор начинает с обычного dev-примера на Transformers: загружается grounding-dino-tiny, изображение проходит через AutoProcessor, затем модель возвращает bounding boxes, confidence и текстовые метки. Дальше этот код переносится в класс GroundingDinoService, который декорируется как сервис BentoML. Важная деталь: веса модели задаются как HuggingFaceModel на уровне класса, чтобы BentoML скачал их заранее при сборке артефакта, а не во время инициализации контейнера. Это избавляет от типичной ошибки с отсутствующей моделью при старте.

  • Конфигурация runtime задает Python 3.11 и зависимости через pyproject.toml Методы detect_image и render публикуются как HTTP endpoint через декораторы BentoML Входные параметры описываются через Pydantic: prompt, box_threshold и text_threshold * Результат можно вернуть как JSON со списком боксов или как готовое изображение с разметкой > «Всё это делается в одном Python-файле менее чем на 100 строк». Практически сервис сводится к трем частям: приватный метод _detect с основной логикой инференса, публичный detect_image для структурированного ответа и render для визуализации результата. Такой расклад удобен тем, что одна и та же логика используется и для машинного клиента, и для человека, который хочет быстро проверить работу модели через интерфейс или curl. Плюс валидация через Pydantic сразу отсекает некорректные параметры до вызова модели.

Запуск и API

Для локальной разработки используется команда bentoml serve с указанием порта 3025 и режима автоматической перезагрузки. После запуска сервис автоматически поднимает Swagger UI, где можно загрузить картинку, передать JSON с параметрами и тут же проверить ответ. Это удобный режим для отладки: правишь код, сохраняешь файл и без пересборки смотришь, как меняется поведение сервиса.

Для многих команд именно такой цикл разработки важнее, чем максимально оптимизированный runtime на старте. Production-вариант строится через bentoml build, а затем контейнеризуется командой bentoml containerize. После этого сервис можно поднять в Docker с GPU и открыть на нужном порту.

В демонстрации у сервиса два endpoint: /detect_image возвращает JSON с координатами, классами и confidence, а /render сохраняет и отдает изображение с нанесенными боксами. Отдельно показан вызов через SDK-клиент BentoML и через curl, то есть сервис одинаково удобно подключать как к внутренним пайплайнам, так и к внешним приложениям.

Что это значит

Материал полезен тем, что приземляет разговор о model serving: вместо абстрактной MLOps-архитектуры здесь показан короткий и воспроизводимый путь от Python-скрипта с Grounding DINO до контейнера с HTTP API. Для небольших ML-команд это хороший шаблон, если нужно быстро отдать vision-модель в продукт и не утонуть в инфраструктуре на первом же релизе.

ЖХ
Hamidun News
AI‑новости без шума. Ежедневный редакторский отбор из 400+ источников. Продукт Жемала Хамидуна, Head of AI в Alpina Digital.
Загружаем комментарии…