Серверное обслуживание модели

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

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

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

Серверное обслуживание модели включает экспонирование обученных моделей в виде сервисов. REST API (например, FastAPI с использованием uvicorn) — это простейший способ предоставить доступ к модели. Однако для более сложных сценариев существуют специализированные серверы, такие как TorchServe, TensorFlow Serving, Triton Inference Server, BentoML, KServe и Seldon. Эти серверы поддерживают такие функции, как обработка пакетов, разделение GPU, обслуживание нескольких моделей и A/B routing. Выбор между пакетной обработкой и реальным временем зависит от заданного латентностного бюджета: пакетная обработка дешевле и проще при SLA минуты или часов, тогда как реальное время подходит, когда пользователи ожидают мгновенного ответа.

Упаковка моделей в artefacts (например, ONNX, TorchScript, SavedModel) обеспечивает их переносимость и оптимизацию для запуска. Это позволяет пользователям использовать модели на различных платформах и средах выполнения.

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

Серверное обслуживание модели особенно полезно при использовании FastAPI и размещении одной модели в одном контейнере. Этот подход работает на удивительном объёме и является простым решением для многих задач. Однако для более сложных сценариев, требующих GPU sharing и динамической обработки пакетов, следует использовать серверы, такие как TorchServe или Triton Inference Server.

Использование ONNX в качестве языка общения между фреймворками обучения и средами выполнения позволяет унифицировать процесс развертывания моделей. Всегда следует проводить benchmarking (например, p50, p95, p99 latency) на реальном production-трафике, чтобы избежать ошибок, связанных с синтетическими benchmarking.

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

Типичные ошибки при серверном обслуживании модели включают использование функции model.predict() в Python-loop, что приводит к одному запросу за раз и приводит к тому, что GPU остается бездействующим. Другой распространённой ошибкой является отсутствие warm-up модели при запуске контейнера, что приводит к первому запросу timeout. Также часто игнорируется p99 latency, что может привести к churn пользователей, даже если большинство пользователей остаются довольны. Использование REST вместо gRPC может привести к увеличению overhead на высоком QPS.

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

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