Пакетная обработка против реального времени
Тема дорожной карты · MLOps
Пакетная обработка и обработка в реальном времени — это две ключевые стратегии для работы с машинным обучением. Пакетная обработка позволяет эффективно обрабатывать большие наборы данных в оффлайн-режиме, где скорость и эффективность использования ресурсов являются ключевыми аспектами. Для распределенных вычислительных задач часто используются инструменты, такие как Apache Spark. В то же время, реальное время обработка требуется для приложений, которые требуют немедленных ответов, таких как системы онлайн-рекомендаций или системы обнаружения мошенничества. Для таких приложений используются gRPC или REST API.
Как это работает
Пакетная обработка и обработка в реальном времени используются для экспонирования обученных моделей как сервисов. Для простого и быстрого развертывания моделей можно использовать REST API (например, FastAPI + uvicorn). Однако для более сложных требований, таких как разделение GPU, обслуживание множества моделей и динамическое батчирование, используются специализированные серверы, такие как TorchServe, TensorFlow Serving, Triton Inference Server, BentoML, KServe и Seldon. Эти серверы также поддерживают функции A/B routing, что позволяет эффективно тестировать и внедрять новые версии моделей.
Когда применять
Начинать следует с простого решения, например, с FastAPI и одной модели на одном контейнере, что работает на удивительном объеме данных. Однако, если требуется разделение GPU или динамическое батчирование, следует использовать серверы, такие как Triton или TorchServe. ONNX служит как универсальный формат для обмена моделями между различными фреймворками обучения и серверами вывода. Важно всегда проводить бенчмарки для задержек p50, p95 и p99 на реальном трафике производства, так как синтетические бенчмарки могут быть неточными и ввести в заблуждение.
Типичные ошибки
Одной из распространенных ошибок при использовании пакетной обработки является использование функции model.predict() в цикле Python для обработки одного запроса за раз, что приводит к простоям GPU. Также важно не забывать прогревать модели при запуске контейнеров, чтобы избежать задержек при первом запросе. Кроме того, игнорирование задержек p99 может привести к потере пользователей, которые ожидаемо находятся в хвосте распределения. Использование REST API вместо gRPC может увеличить перегрузку на высоких уровнях QPS (запросов в секунду).