Что такое KubeRay
Ray — это фреймворк с открытым исходным кодом для масштабирования Python-кода и рабочих нагрузок ИИ на множество машин. Он обрабатывает всё: от распределенного обучения до онлайн-обслуживания через единый Python API, поэтому пользователи могут написать код один раз и запустить его как на ноутбуке, так и на кластере из тысячи узлов.
С другой стороны, Kubernetes — это среда, где большинство организаций уже запускают свою инфраструктуру. Графические процессоры (GPU), квоты, контроль доступа, сеть и мониторинг — всё это управляется там. Команды, внедряющие Ray, редко хотят использовать второй менеджер кластеров наряду с Kubernetes. Они хотят, чтобы Ray работал на том Kubernetes, который у них уже есть.
Проблема в том, что Kubernetes понимает только свои собственные нативные ресурсы, такие как Pods, Services и Jobs. У него нет понятия кластера Ray, задания Ray или приложения Ray Serve. Поэтому запуск Ray напрямую на Kubernetes означает написание собственного «клея»: Deployments для головного узла и рабочих узлов, Service для головного узла, скрипты для отправки заданий и ожидания их выполнения, а также пользовательская логика для масштабирования рабочих узлов или восстановления после сбоев. Каждая команда в итоге переизобретает одни и те же механизмы.
KubeRay устраняет этот разрыв. Это оператор Kubernetes с открытым исходным кодом, который интегрирует Ray в экосистему Kubernetes, обеспечивая нативное управление жизненным циклом, автомасштабирование, планирование, надежность и наблюдаемость для рабочих нагрузок Ray. KubeRay сегодня является стандартным способом запуска Ray на Kubernetes и служит основой для управляемых предложений Ray от крупных облачных провайдеров.
KubeRay вводит три пользовательских ресурса: RayCluster для долгоживущего кластера Ray, RayJob для отдельного задания с собственным эфемерным кластером и RayService для приложений Ray Serve. Мы описываем, как работают эти ресурсы, в разделе «Архитектура» ниже.
До и после KubeRay
Хотя обычный Kubernetes может изначально обрабатывать инфраструктуру, необходимую для работы Ray, ему сложно понять сам Ray. Поэтому каждая платформа-команда в итоге вручную пишет одни и те же развертывания, сервисы, скрипты отправки и логику восстановления, чтобы заполнить этот пробел. KubeRay заменяет эту ручную работу нативным ресурсом Kubernetes для каждой из следующих задач.
Задача
Обычный Kubernetes
KubeRay
Запуск кластера Ray
Вручную писать Deployments для головного и рабочих узлов, а также Service для головного узла, и самостоятельно поддерживать их синхронизацию
Определить RayCluster. Оператор создает и управляет головным Pod, головным Service и рабочими Pods
Запуск пакетного задания
Писать скрипты для отправки задания, опроса статуса завершения и последующего удаления кластера
Определить RayJob. KubeRay создает выделенный RayCluster, отправляет задание и очищает ресурсы после его завершения
Обслуживание модели
Вручную создавать Deployment и Service для Ray Serve, а также собственные проверки работоспособности и логику развертывания
Определить RayService. KubeRay обеспечивает доступность приложений Serve при сбоях кластера и головного узла, а также поддерживает обновления без простоя
Масштабирование по требованию
Полагаться на Kubernetes Horizontal Pod Autoscaler, который не имеет видимости задач, акторов или групп размещения Ray
Автомасштабирование с учетом специфики Ray, которое масштабирует группы рабочих узлов на основе ожидающих задач, акторов и групп размещения
Восстановление после сбоя головного узла
Писать пользовательскую логику для обнаружения сбоя и восстановления состояния кластера
Отказоустойчивость Global Control Service (GCS) автоматически восстанавливает метаданные кластера, сохраняя работу приложений Ray Serve
Мониторинг и эксплуатация
Создавать собственные инструменты для отображения статуса, специфичного для Ray
Нативные для Kubernetes статусы и события, плюс kubectl ray для привычного интерфейса командной строки
Где KubeRay располагается между Ray и Kubernetes
KubeRay находится между Kubernetes и Ray и не заменяет ни один из планировщиков. Kubernetes планирует Pods на узлах, в то время как Ray планирует задачи и акторы на CPU и GPU внутри этих Pods. KubeRay соединяет их: он превращает спецификацию RayCluster в Pods и сообщает состояние Ray обратно в Kubernetes в виде полей статуса и событий.
Такое разделение уровней четко распределяет обязанности между двумя ролями. Команды платформы работают на уровнях Kubernetes и оператора: они устанавливают KubeRay один раз, а затем управляют пулами узлов, квотами, контролем доступа и мониторингом с помощью инструментов, которые они уже используют. Пользователи Ray, такие как инженеры по машинному обучению и специалисты по данным, работают на уровнях Ray и приложений: они пишут код Ray и выполняют его поверх пользовательского ресурса (RayCluster, RayJob или RayService), который создает KubeRay.
Что предоставляет KubeRay
KubeRay — это оператор Kubernetes с одним контроллером на каждый пользовательский ресурс. RayCluster является базовым блоком: оператор превращает его в головной Pod, головной Service и рабочие Pods. RayJob и RayService владеют RayCluster и добавляют то, что нужно их рабочей нагрузке: отправитель для RayJob и приложения Serve плюс Serve Service для RayService.
Основные функции
RayCluster
- Автомасштабирование с учетом специфики Ray. Автоматическое масштабирование групп рабочих узлов на основе спроса рабочей нагрузки, включая ожидающие задачи, акторы и группы размещения.
Автомасштабирование с учетом специфики Ray. Автоматическое масштабирование групп рабочих узлов на основе спроса рабочей нагрузки, включая ожидающие задачи, акторы и группы размещения.
- Отказоустойчивость Global Control Service (GCS). Восстановление метаданных кластера Ray после сбоя головного узла при сохранении работы приложений Ray Serve.
Отказоустойчивость Global Control Service (GCS). Восстановление метаданных кластера Ray после сбоя головного узла при сохранении работы приложений Ray Serve.
- Гетерогенные вычисления. Запуск групп рабочих узлов с различными конфигурациями CPU и ускорителей в одном RayCluster.
Гетерогенные вычисления. Запуск групп рабочих узлов с различными конфигурациями CPU и ускорителей в одном RayCluster.
RayJob
- Эфемерные кластеры: создание выделенного RayCluster для каждого задания и его очистка после завершения задания.
Эфемерные кластеры: создание выделенного RayCluster для каждого задания и его очистка после завершения задания.
- Несколько режимов отправки: отправка заданий через Kubernetes Jobs, HTTP, sidecars или интерактивный режим.
Несколько режимов отправки: отправка заданий через Kubernetes Jobs, HTTP, sidecars или интерактивный режим.
- Управление жизненным циклом: настройка повторных попыток, сроков выполнения и политик очистки на основе результатов выполнения заданий.
Управление жизненным циклом: настройка повторных попыток, сроков выполнения и политик очистки на основе результатов выполнения заданий.
RayService
- Нативный для Kubernetes Ray Serve: определение и управление приложениями Ray Serve как частью вашей рабочей нагрузки в Kubernetes.
Нативный для Kubernetes Ray Serve: определение и управление приложениями Ray Serve как частью вашей рабочей нагрузки в Kubernetes.
- Высокая доступность: поддержание доступности приложений Ray Serve при сбоях кластера и головного узла.
Высокая доступность: поддержание доступности приложений Ray Serve при сбоях кластера и головного узла.
- Обновления без простоя: обновление приложений и кластеров Ray без прерывания трафика обслуживания, с поддержкой blue-green и инкрементальных обновлений.
Обновления без простоя: обновление приложений и кластеров Ray без прерывания трафика обслуживания, с поддержкой blue-green и инкрементальных обновлений.
Планирование в Kubernetes
- Kueue и MultiKueue: интеграция рабочих нагрузок Ray с квотами ресурсов Kubernetes и планированием между кластерами.
Kueue и MultiKueue: интеграция рабочих нагрузок Ray с квотами ресурсов Kubernetes и планированием в нескольких кластерах.
- Групповое планирование (Gang scheduling): поддержка группового планирования с помощью Kubernetes Workload API, Volcano, YuniKorn, scheduler-plugins и NVIDIA KAI Scheduler.
Групповое планирование (Gang scheduling): поддержка группового планирования с помощью Kubernetes Workload API, Volcano, YuniKorn, scheduler-plugins и NVIDIA KAI Scheduler.
- Планирование с учетом ресурсов и меток: предоставление Ray доступа к ресурсам и меткам Kubernetes для планирования на их основе.
Планирование с учетом ресурсов и меток: предоставление Ray доступа к ресурсам и меток Kubernetes для планирования на их основе.
LinkSecurity
- Аутентификация по токену Ray: защита кластеров Ray с помощью аутентификации на основе токенов.
Аутентификация по токену Ray: защита кластеров Ray с помощью аутентификации на основе токенов.
- Аутентификация через Kubernetes RBAC: использование существующих политик RBAC в Kubernetes для контроля доступа к кластерам Ray.
Аутентификация через Kubernetes RBAC: использование существующих политик RBAC в Kubernetes для контроля доступа к кластерам Ray.
- mTLS и NetworkPolicy: шифрование трафика между подами Ray и изоляция кластеров Ray с помощью политик сети Kubernetes (NetworkPolicies).
mTLS и NetworkPolicy: шифрование трафика между подами Ray и изоляция кластеров Ray с помощью политик сети Kubernetes (NetworkPolicies).
LinkObservability
- Метрики и дашборды: мониторинг рабочих нагрузок Ray и KubeRay с помощью Prometheus и Grafana.
Метрики и дашборды: мониторинг рабочих нагрузок Ray и KubeRay с помощью Prometheus и Grafana.
- Статус и события в стиле Kubernetes: отслеживание жизненного цикла рабочих нагрузок и устранение неполадок ресурсов Ray через статус и события Kubernetes.
Статус и события в стиле Kubernetes: отслеживание жизненного цикла рабочих нагрузок и устранение неполадок ресурсов Ray через статус и события Kubernetes.
- History Server: сохранение событий и логов Ray в объектном хранилище для их анализа после удаления кластера.
History Server: сохранение событий и логов Ray в объектном хранилище для их анализа после удаления кластера.
LinkTooling
- kubectl ray: упрощение управления кластерами Ray в Kubernetes с помощью привычного интерфейса командной строки.
kubectl ray: упрощение управления кластерами Ray в Kubernetes с помощью привычного интерфейса командной строки.
- KubeRay API Server: предоставление упрощенных API для платформ и пользовательских интерфейсов для управления ресурсами KubeRay.
KubeRay API Server: предоставление упрощенных API для платформ и пользовательских интерфейсов для управления ресурсами KubeRay.
LinkHow to deploy KubeRay
KubeRay работает с любым кластером Kubernetes. Начните с установки оператора KubeRay, а затем создайте рабочую нагрузку Ray, используя нативные ресурсы Kubernetes.
1. Установка KubeRay
Следуйте руководству Начало работы с KubeRay, чтобы установить оператор в ваш кластер Kubernetes. KubeRay был протестирован на управляемых сервисах Kubernetes, включая Amazon EKS, Google Kubernetes Engine (GKE) и Azure Kubernetes Service (AKS).
2. Выбор рабочей нагрузки
KubeRay предоставляет следующие пользовательские ресурсы для запуска рабочих нагрузок Ray:
- RayCluster: запуск кластера Ray для разработки и прототипирования.
RayCluster: запуск кластера Ray для разработки и прототипирования.
- RayJob: запуск пакетных рабочих нагрузок с выделенным RayCluster, включая автоматическое создание и очистку кластера.
RayJob: запуск пакетных рабочих нагрузок с выделенным RayCluster, включая автоматическое создание и очистку кластера.
- RayService: развертывание и управление приложениями Ray Serve с высокой доступностью и обновлениями без простоя.
RayService: развертывание и управление приложениями Ray Serve с высокой доступностью и обновлениями без простоя.
- RayCronJob: запуск RayJobs по расписанию с использованием cron-выражений.
RayCronJob: запуск RayJobs по расписанию с использованием cron-выражений.
3. Развертывание с помощью Kubernetes
Развертывание рабочей нагрузки Ray с помощью KubeRay так же просто, как применение пользовательского ресурса Kubernetes.
Например, RayJob запускает пакетную рабочую нагрузку обучения и управляет кластером Ray, используемым для этой задачи. KubeRay создает RayCluster, ожидает его готовности, отправляет задачу обучения и может очистить кластер после завершения задачи.
Вот пример обучения модели PyTorch на наборе данных Fashion MNIST с использованием CPU в Kubernetes, демонстрирующий, как KubeRay создает RayCluster, запускает рабочую нагрузку обучения, отслеживает ее завершение и управляет жизненным циклом кластера.
Код обучения использует Ray Train, в то время как KubeRay использует RayJob для запуска и управления им в Kubernetes.
После применения RayJob, KubeRay создает RayCluster и его поды. Проверьте RayJob и убедитесь, что поды RayCluster запущены:
Затем RayJob отправляет рабочую нагрузку обучения в созданный кластер RayCluster. После завершения обучения RayJob переходит в состояние SUCCEEDED:
Вы можете просмотреть результаты обучения из пода отправителя:
Для получения дополнительных готовых примеров ознакомьтесь с примерами конфигураций KubeRay для RayCluster, RayJob, RayService и RayCronJob. Наслаждайтесь запуском Ray в Kubernetes с помощью KubeRay!
Присоединяйтесь к сообществу Ray
KubeRay разрабатывается открыто. Общайтесь с сообществом, делитесь отзывами и вносите свой вклад:
- Задавайте вопросы в канале #kuberay в рабочем пространстве Ray в Slack.
Задавайте вопросы в канале #kuberay в рабочем пространстве Ray в Slack.
- Встречайтесь с сообществом на двухнедельных собраниях сообщества KubeRay. Расписание можно найти по ссылке Ray/KubeRay LFX calendar.
Встречайтесь с сообществом на двухнедельных собраниях сообщества KubeRay. Расписание можно найти по ссылке .
- Помогайте формировать дорожную карту, делясь своими запросами на функции и отзывами по ссылке kuberay#2999.
Помогайте формировать дорожную карту, делясь своими запросами на функции и отзывами по ссылке .

/)









