Пакетная обработка против реального времени

Тема дорожной карты · MLOps

Пакетная обработка и обработка в реальном времени — это две ключевые стратегии для работы с машинным обучением. Пакетная обработка позволяет эффективно обрабатывать большие наборы данных в оффлайн-режиме, где скорость и эффективность использования ресурсов являются ключевыми аспектами. Для распределенных вычислительных задач часто используются инструменты, такие как Apache Spark. В то же время, реальное время обработка требуется для приложений, которые требуют немедленных ответов, таких как системы онлайн-рекомендаций или системы обнаружения мошенничества. Для таких приложений используются gRPC или REST API.

Как это работает

Пакетная обработка и обработка в реальном времени используются для экспонирования обученных моделей как сервисов. Для простого и быстрого развертывания моделей можно использовать REST API (например, FastAPI + uvicorn). Однако для более сложных требований, таких как разделение GPU, обслуживание множества моделей и динамическое батчирование, используются специализированные серверы, такие как Triton Inference Server, KServe, BentoML и Ray Serve, а для LLM — vLLM (TorchServe архивирован в 2025 году, Seldon Core 2 перешёл на несвободную BSL-лицензию). Эти серверы также поддерживают функции A/B routing, что позволяет эффективно тестировать и внедрять новые версии моделей.

Когда применять

Начинать следует с простого решения, например, с FastAPI и одной модели на одном контейнере, что работает на удивительном объеме данных. Однако, если требуется разделение GPU или динамическое батчирование, следует использовать серверы, такие как Triton или KServe (TorchServe архивирован и для новых проектов не подходит). ONNX служит как универсальный формат для обмена моделями между различными фреймворками обучения и серверами вывода. Важно всегда проводить бенчмарки для задержек p50, p95 и p99 на реальном трафике производства, так как синтетические бенчмарки могут быть неточными и ввести в заблуждение.

Типичные ошибки

Одной из распространенных ошибок при использовании пакетной обработки является использование функции model.predict() в цикле Python для обработки одного запроса за раз, что приводит к простоям GPU. Также важно не забывать прогревать модели при запуске контейнеров, чтобы избежать задержек при первом запросе. Кроме того, игнорирование задержек p99 может привести к потере пользователей, которые ожидаемо находятся в хвосте распределения. Использование REST API вместо gRPC может увеличить перегрузку на высоких уровнях QPS (запросов в секунду).

Связанные понятия

Полезные ресурсы

Проверить знания (2)

Загрузка вопросов…