Технологии

AWS предложила Ray Serve DLC как поддерживаемый путь с TorchServe

Готовый контейнер объединяет PyTorch, CUDA, Ray Serve, FastAPI и Uvicorn в проверенный inference stack. В официальном примере Qwen3-VL-2B разворачивается на одном узле Amazon EKS с GPU NVIDIA A10G.

AWS предложила Ray Serve DLC как поддерживаемый путь с TorchServe

Остановка поддержки TorchServe меняет характер риска

AWS представила Ray Serve Deep Learning Container как путь для команд, которые продолжают обслуживать inference на TorchServe. Официальный проект TorchServe больше активно не поддерживается: не запланированы updates, bug fixes, новые функции или security patches, а уязвимости могут остаться без исправления. Это превращает привычный model server в собственную ответственность команды за весь dependency chain.

Проблема не ограничивается заменой одного Python package. Новые версии PyTorch и CUDA продолжают развиваться, GPU drivers и системные библиотеки получают обновления, а совместимость между слоями должна подтверждаться вместе. Если готовая сборка перестаёт обновляться, инженеры сами выбирают сочетания версий, устраняют уязвимости и исследуют сбои, возникающие при drift любого компонента.

Ray Serve DLC собирает inference stack заранее

AWS Deep Learning Containers — это предварительно собранные Docker images с framework, dependencies и GPU stack. Новый Ray Serve DLC переносит эту модель с training на serving: контейнер уже включает слой запуска модели за HTTP endpoint и проходит совместную проверку компонентов. AWS позиционирует image как поддерживаемую и регулярно исправляемую основу, которую можно получать из Amazon ECR Public Gallery.

CPU-вариант построен на Amazon Linux 2023, а GPU-вариант — на официальном NVIDIA Amazon Linux 2023 image с CUDA runtime libraries. Сверху добавлены PyTorch, Ray Serve, FastAPI, Uvicorn и utilities для vision, audio и multimodal workloads. В набор входит FFmpeg с NVIDIA hardware acceleration для video preprocessing. Проверка всего сочетания перед release должна уменьшать риск несовместимых версий внутри образа.

Отдельные образы учитывают контракт среды

Ray Serve DLC публикуется отдельно для Amazon EKS и Amazon EC2, а также для Amazon SageMaker. Варианты используют общий stack и dependencies, но имеют разные entrypoint, соответствующие контракту конкретной среды. Это важная граница: tag образа нельзя выбирать только по версии Ray или PyTorch — deployment target тоже является частью идентичности сборки.

Многие модели, включая Qwen3-VL, могут работать без custom image. Если нужны дополнительные библиотеки, команда может добавить их поверх проверенной базы. Такой layering уменьшает объём собственного Dockerfile, но не отменяет тестирование: каждый добавленный package снова способен изменить dependency graph, размер image, время cold start и поверхность уязвимостей.

Официальный пример запускает Qwen3-VL-2B

В tutorial AWS использует GPU-версию DLC для Qwen3-VL-2B-Instruct. Ray Serve application оформлена как Python class с декоратором `@serve.deployment`; `__call__` принимает JSON с `image_url` и prompt, processor формирует multimodal input, а модель генерирует текстовый ответ. Параметр `ray_actor_options={"num_gpus": 1}` резервирует для deployment один GPU.

Модель загружается в `float16`, чтобы поместиться в 24 GB VRAM NVIDIA A10G. Serving code передаётся в pod через ConfigMap, поэтому пример позволяет менять Python application без пересборки базового DLC. Контейнер уже предоставляет GPU stack, PyTorch, Transformers и Ray Serve; это заменяет TorchServe handler hierarchy, шаг `torch-model-archiver` и файл `config.properties` более прямой Python-конфигурацией.

Минимальная архитектура — один pod и один GPU

Целевая схема состоит из Amazon EKS cluster, одного узла `g5.xlarge` с NVIDIA A10G и одного pod, который обслуживает модель по HTTP на порту 8000. Скрипты в accompanying repository создают cluster через `eksctl`, добавляют managed GPU node group, применяют ConfigMap и Kubernetes Deployment, затем запускают Ray Serve.

AWS подчёркивает, что это single-node inference: одна машина, один pod и один GPU. Для horizontal autoscaling или model parallelism между несколькими узлами предлагается развивать основу через KubeRay. Поэтому tutorial демонстрирует миграционный baseline и работоспособность контейнера, но не доказывает production throughput, high availability или устойчивость к отказу node.

Readiness pod ещё не означает readiness модели

После deployment инструкция предлагает проверить pod и выделение `nvidia.com/gpu`, сделать port-forward на 8000, отправить HTTP request с изображением и prompt, а затем выполнить `nvidia-smi` внутри deployment. Эти шаги разделяют Kubernetes scheduling, доступность endpoint, корректность multimodal inference и фактическое использование GPU.

В публикации отдельно отмечено, что pod может показывать Ready за одну-две минуты до того, как Ray Serve начнёт отвечать: в это время модель ещё загружается. Для production это сигнал не использовать один лишь стандартный pod readiness как доказательство готовности трафика. Нужна application-level probe, которая учитывает загрузку weights и подтверждает реальный короткий inference либо состояние serving deployment.

Поддерживаемый base image не снимает ответственность приложения

DLC уменьшает работу по согласованию CUDA, framework и serving layer, а обновление может сводиться к контролируемой смене tag. Но application code, model weights, внешние image URLs, prompt validation, сетевые policies, autoscaling и limits остаются ответственностью владельца workload. В показанном примере endpoint принимает URL изображения, значит production-версия должна отдельно контролировать допустимые источники и защищаться от нежелательных сетевых обращений.

Нельзя считать tag swap автоматическим безопасным upgrade. Новый image следует закреплять по неизменяемому digest, прогонять на representative requests, измерять latency, GPU memory и cold start, проверять output schema и только затем переводить traffic. Rollback должен возвращать не только предыдущий container, но и совместимую версию model и serving code.

Миграцию стоит проводить через измеряемый canary

Практичный переход с TorchServe начинается с inventory: версии PyTorch и CUDA, custom handlers, preprocessing, batching, timeout, health checks и способ упаковки weights. Затем один endpoint переносится на Ray Serve DLC без одновременной смены самой модели. Это позволяет сравнить одинаковые requests и отделить эффект serving stack от изменения model quality.

AWS предоставляет полный code sample для single-node deployment и reference со списком доступных DLC images. Хороший canary должен подтвердить p50/p95 latency, throughput, error rate, GPU utilization, поведение при restart и воспроизводимость pinned image. Только после этого поддерживаемый контейнер становится реальным снижением операционного риска, а не просто новым способом собрать тот же endpoint.

Ray Serve DLC заменяет обслуживание стека, а не инженерную проверку

Ценность предложения AWS — в переносе повторяющейся интеграционной работы на поставщика base image. Команда получает заранее собранное сочетание Amazon Linux, CUDA, PyTorch и Ray Serve, а собственные усилия направляет на model application и эксплуатационные требования. Для пользователей неподдерживаемого TorchServe это уменьшает число слоёв, которые приходится патчить и согласовывать самостоятельно.

При этом официальный пример остаётся отправной точкой: один GPU, один pod, port-forward и ручной request. Production-переход требует ingress, authentication, network isolation, observability, autoscaling и проверенного rollback. Поддерживаемый DLC решает проблему основания inference stack; надёжность конкретного сервиса по-прежнему доказывается только его собственными тестами и измерениями.

Первоисточники

  1. AWS Machine Learning Blog — Simplify and support your TorchServe workloads using Ray Serve Deep Learning Containers