TorchServe
Тема дорожной карты · MLOps
TorchServe — официальный production-сервер PyTorch, поддерживаемый AWS и Meta. Он обеспечивает упаковку моделей через torch-model-archiver (объединение весов, кода хендлера и зависимостей в .mar-архив), обслуживание нескольких моделей на настраиваемых портах, динамический батчинг, версионирование и экспорт метрик через Prometheus. Хендлеры — Python-классы с методами initialize, preprocess, inference и postprocess — позволяют кастомизировать пайплайн обработки запросов. TorchServe интегрируется с Kubernetes для горизонтального масштабирования и поддерживает GPU-инференс с CUDA из коробки.
TorchServe играет ключевую роль в развертывании и обслуживании машинных моделей в production-среде. Он обеспечивает высокую производительность, масштабируемость и удобство в управлении моделями, что делает его незаменимым инструментом для MLOps.
Как это работает
TorchServe: экспонируете обученные модели как сервисы. REST API (FastAPI + uvicorn) — простейший путь; специализированные серверы (TorchServe, TensorFlow Serving, Triton Inference Server, BentoML, KServe, Seldon, Ray Serve) handle batching, GPU sharing, multi-model serving, A/B routing. Batch vs real-time по latency-бюджету: batch дешевле + проще при SLA минуты/часы; real-time когда пользователи ждут. Упаковка моделей как artefacts (ONNX, TorchScript, SavedModel) для portability + optimised runtimes.
TorchServe использует REST API для взаимодействия с моделями. Серверы, такие как TorchServe, TensorFlow Serving и другие, обеспечивают распределение запросов, динамическое батчирование и управление несколькими моделями. Важно учитывать, что выбор между пакетной обработкой и реальным временем зависит от требований к задержке и производительности.
Когда применять
Старт с FastAPI + одна модель на одном контейнере — работает на удивительном объёме. Triton/TorchServe — когда нужно GPU sharing + dynamic batching. ONNX как lingua franca между training-фреймворком + serving-runtime. Всегда бенчмаркьте p50/p95/p99 latency на реальном production-трафике — синтетические бенчмарки врут.
TorchServe особенно полезен, когда требуется управление несколькими моделями, динамическое батчирование и использование GPU. Он также поддерживает версионирование моделей и экспорт метрик для мониторинга производительности. Для начала работы с TorchServe можно использовать FastAPI и одну модель на одном контейнере, что обеспечивает высокую производительность и удобство в управлении.
Типичные ошибки
Ловушки TorchServe: serving с model.predict() в Python-loop (один запрос за раз, GPU idle); не warm-up модели на старте контейнера (первый запрос timeout); игнор p99 latency (большинство пользователей ок, tail-пользователи churn); REST вместо gRPC, который ополовинил бы overhead на высоком QPS.
Ошибки, связанные с использованием TorchServe, могут привести к снижению производительности и ухудшению опыта пользователей. Например, использование метода model.predict() в Python-loop может привести к тому, что GPU будет простаивать, что снижает эффективность использования ресурсов. Также важно проводить warm-up моделей при запуске контейнера, чтобы избежать задержек на первом запросе. Кроме того, игнорирование p99 latency может привести к ухудшению опыта пользователей, особенно для пользователей в хвосте распределения задержек.