Серверное обслуживание модели
Тема дорожной карты · 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.