Спасибо всем остальным, кто внес свой вклад в проект, включая: Эдварда Оукса, Джанет Ли, Брюса Чжана, Алана Го, Дугласа Стродтмана, Джуй-Ан Хуанг, Хан-Джу Чена — из Anyscale, а также Эндрю Си Кима — из команды Google GKE.
Сегодня в партнерстве с командой Google Kubernetes Engine мы представляем селекторы меток в Ray — более простой способ размещения рабочих нагрузок на нужных узлах. API и пользовательский интерфейс поставляются в Ray 2.49 и доступны в панели управления Ray Dashboard, KubeRay и Anyscale, платформе вычислений ИИ, созданной на базе Ray.
С новым API селекторов меток Ray теперь напрямую помогает разработчикам решать такие задачи, как:
- Назначение меток узлам в вашем кластере Ray (например, cpu-family=intel, market-type=spot, region=us-west-1)
Назначение меток узлам в вашем кластере Ray (например, cpu-family=intel, market-type=spot, region=us-west-1)
- При запуске задач, акторов или групп размещения объявлять такие условия, как «Запускать это ТОЛЬКО на узлах с чипами intel»
При запуске задач, акторов или групп размещения объявлять такие условия, как «Запускать это ТОЛЬКО на узлах с чипах intel»
С этим новым API команды получают лучший опыт разработки благодаря возможности проще описывать намерения планирования с помощью меток, а не обходных путей (подробнее об этом ниже), а также проще отлаживать размещение благодаря поддержке в пользовательском интерфейсе и API с первого дня.
СсылкаСтарый обходной путь
Когда разработчики Ray хотят планировать только часть своих задач на спотовых узлах в своем кластере Ray, они часто имитируют пользовательский ресурс «spot» при запуске узла Ray, а затем запрашивают крошечную долю (0.01) на задачу — надеясь, что на узле одновременно не окажется более 100 задач, чтобы исчерпать ресурс «spot».
Приведенный выше обходной путь подчеркивает один класс ограничений планирования: нересурсные ограничения (спотовые против по требованию), выдаваемые за «ресурсы». Это смешивает объемы ресурсов (CPU/GPU/RAM) с ограничениями размещения (регион/зона, спотовые против по требованию) и заставляет моделировать нересурсные потребности как ресурсы.
Второе и не менее распространенное ограничение — только точное совпадение: многим разработчикам Ray требуются условия «любое из» или отрицательные совпадения — например, «не на узле GPU» или «в us-west1-a или us-west1-b», которые предыдущие API не могут выразить.
С помощью селекторов меток разработчики Ray могут обойти оба ограничения. Они позволяют гибко выражать требования к планированию для задач, акторов и наборов групп размещения, используя метки узлов, определенные во время создания RayCluster или автоматически обнаруженные Ray (например, тип ускорителя).
Селекторы меток Ray вдохновлены метками и селекторами Kubernetes, что повышает совместимость планирования между двумя системами за счет использования знакомых API и семантики. Это одна из многих текущих инициатив, в рамках которых Ray и Kubernetes работают сообща для реализации более сложных сценариев использования.
Что вы можете делать с помощью меток:
- Привязка к определенному узлу (по ID узла)
Привязка к определенному узлу (по ID узла)
- Запуск на головном узле или группе воркеров / избегание их
Запуск на головном узле или группе воркеров / избегание их
- Размещение только на CPU
Размещение только на CPU
- Выбор конкретного ускорителя или их набора
Выбор конкретного ускорителя или их набора
- Выбор типа рынка узла (спотовый или по требованию)
Выбор типа рынка узла (спотовый или по требованию)
- Удержание работы в регионах/зонах или за их пределами
Удержание работы в регионах/зонах или за их пределами
- Выбор по семейству CPU (или другому признаку хоста)
Выбор по семейству CPU (или другому признаку хоста)
- Таргетинг на срезы подов TPU
Таргетинг на срезы подов TPU
Инструкции по использованию и полную информацию об API см. в руководствах Anyscale и Ray.
СсылкаAPI селекторов меток
СсылкаСелекторы меток в пользовательском коде
Селекторы меток позволяют выразить, где должна выполняться работа, путем сопоставления с метками узлов.
Вы можете добавить селектор меток к:
- Задачи/акторы: label_selector в @ray.remote(...)
Задачи/акторы: label_selector в @ray.remote(...)
- Группы размещения: bundle_label_selector=[...] во время создания
Группы размещения: bundle_label_selector=[...] во время создания
Поддерживаемая семантика: совпадение, несовпадение, любое-из, ни-одно-из
Возвращаясь к примерам выше, ниже показано, как вы можете выразить эти требования:
Тот же код может переноситься между открытым исходным кодом Ray, Kubernetes или управляемыми провайдерами, такими как Anyscale.
СсылкаМетки узлов
Метки узлов аннотируют узлы свойствами, используемыми для планирования (например, cpu-family, accelerator-type, market-type для спотовых/по требованию, region/zone). Вы можете:
- Определять метки при создании кластера (интерфейс/SDK Anyscale, RayCluster CR в KubeRay или `ray start`).
Определять метки при создании кластера (интерфейс/SDK Anyscale, RayCluster CR в KubeRay или `ray start`).
- В интерфейсе Anyscale: пометить узлы в группе воркеров процессором AMD
В интерфейсе Anyscale: пометить узлы в группе воркеров процессором AMD
Использовать автоматически определяемые метки, предоставляемые Ray и Anyscale (например, тип ускорителя). В Anyscale дополнительные метки по умолчанию (тип рынка, регион/зона) заполняются для обеспечения более гибкого размещения. Подробнее о метках по умолчанию см. в документации. Список меток по умолчанию:
Имя метки
Описание
Поддерживается в Anyscale
Поддерживается в OSS
ray.io/node-id
Уникальный идентификатор, сгенерированный для узла.
Да
Да
ray.io/accelerator-type
Тип ускорителя узла, например L4.
Да
Да
ray.io/market-type
Указывает, использует ли узел спотовые экземпляры или экземпляры по требованию.
Да
Нет*
ray.io/node-group
Имя группы воркеров узла или головного узла для головного узла.
Да
Нет*
ray.io/region
Облачный регион узла.
Да
Нет*
ray.io/availability-zone
Доступная зона узла.
Да
Нет*
Примечание: * Метки по умолчанию не заполняются по умолчанию. Но вы все равно можете использовать метки, если они указаны в параметрах ray start или в поле метки верхнего уровня в KubeRay CR.
СсылкаКластер автомасштабирования
Селекторы меток работают как со статическими кластерами, так и с кластерами автомасштабирования.
В Anyscale средство автомасштабирования учитывает как форму ресурсов, так и селекторы меток, масштабируя соответствующие группы воркеров так, чтобы запускать узлы с необходимыми метками. Поддержка автомасштабирования для селекторов меток в Ray с открытым исходным кодом будет выпущена в Ray 2.51.
СсылкаКак это работает?
Когда вы отправляете задачу или создаете актор или группу размещения, Ray прикрепляет соответствующий селектор меток (label_selector/bundle_label_selector) к запросу. Raylet каждого узла хранит метки узлов (определенные пользователем при создании RayCluster или автоматически обнаруженные, например семейство ускорителей) вместе с другими метаданными узлов со всех узлов. Планировщик в Raylet использует как информацию о селекторе, так и информацию о метках узлов для принятия решения о размещении: он проверяет соответствие меток и выполняет нормальное соответствие ресурсов. Запрос считается пригодным для планирования на узел только тогда обе проверки проходят успешно.
В кластерах автомасштабирования глобальная служба контроля Ray (GCS) агрегирует и отправляет неудовлетворенный спрос как с селектором меток, так и с требованиями к ресурсам в средство автомасштабирования. Средство автомасштабирования использует эту информацию для масштабирования соответствующих групп воркеров, чтобы запустить узлы с требуемыми метками.
СсылкаДальнейшая работа
Текущий селектор меток — хорошая отправная точка, но у нас есть еще планы по его улучшению.
- Резервные селекторы меток (упорядоченные предпочтения): на сегодняшний день каждый запрос содержит только один селектор меток. Мы планируем поддержать упорядоченный резерв для пакетов задач, актеров и групп размещения, чтобы вы могли выражать упорядоченные намерения, например: предпочтительно accelerator=H100, иначе accelerator в {A100,H100}.
Резервные селекторы меток (упорядоченные предпочтения): на сегодняшний день каждый запрос содержит только один селектор меток. Мы планируем поддержать упорядоченный резерв для пакетов задач, актеров и групп размещения, чтобы вы могли выражать упорядоченные намерения, например: предпочтительно accelerator=H100, иначе accelerator в {A100,H100}.
- Поддержка библиотек: расширить поддержку селекторов меток в библиотеках Ray (например, Ray Data, Ray Serve, Ray Train), чтобы стандартные шаблоны планирования обрабатывались автоматически.
Поддержка библиотек: расширить поддержку селекторов меток в библиотеках Ray (например, Ray Data, Ray Serve, Ray Train), чтобы стандартные шаблоны планирования обрабатывались автоматически.
- Улучшенная совместимость с Kubernetes: мы хотим максимально упростить наследование меток из подов Kubernetes и влияние на планирование подов в стиле, нативном для Kubernetes.
Улучшенная совместимость с Kubernetes: мы хотим максимально упростить наследование меток из подов Kubernetes и влияние на планирование подов в стиле, нативном для Kubernetes.
СсылкаПопробуйте сегодня
- Руководство по Ray OSS
Руководство по Ray OSS
- Руководство по Anyscale
Руководство по Anyscale
- Сквозной пример KubeRay
Сквозной пример KubeRay








