Упаковка модели

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

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

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

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

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

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

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

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

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

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

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