Развертывание инфраструктуры для Ray и Kueue в AKS

В этой статье описано, как развернуть инфраструктуру, необходимую для запуска рабочих нагрузок ИИ Ray с помощью Kueue на Azure Kubernetes Service (AKS). Модуль Terraform развертывает кластер AKS с пулами GPU-узлов, устанавливает оператор KubeRay и контроллер Kueue через Helm, создает Хранилище BLOB-объектов Azure с предварительно загруженными наборами данных и настраивает идентификатор рабочей нагрузки для безопасного доступа.

Important

Программное обеспечение с открытым кодом упоминается во всей документации и примерах AKS. Программное обеспечение, которое вы развертываете, не подпадает под действие соглашений об уровне обслуживания AKS, ограниченной гарантии и поддержки Azure. При использовании технологии с открытым исходным кодом вместе с AKS ознакомьтесь с вариантами поддержки, доступными от соответствующих сообществ и обслуживающих проектов для разработки плана.

Корпорация Майкрософт несет ответственность за создание пакетов с открытым кодом, которые мы развертываем в AKS. Эта ответственность включает полное управление процессами сборки, сканирования, подписывания, проверки и исправления ошибок, а также контроль над двоичными файлами в образах контейнеров. Для получения дополнительной информации см. Управление уязвимостями в AKS и Покрытие поддержки AKS.

Предварительные условия

  • Подписка на Azure. Если ее нет, создайте бесплатную учетную запись.
  • Azure CLI версии 2.70 или более поздней версии, с проверкой подлинности через az login. Если у вас несколько подписок, выберите нужную с помощью az account set --subscription <subscription-id>.
  • Terraform версии 1.6 или более поздней.
  • kubectl версии 1.28 или более поздней. Установите с помощью az aks install-cli.
  • Python версии 3.10 или более поздней (требуется для создания данных Аврора).
  • Квота GPU в целевом Azure регионе. Конфигурация по умолчанию развёртывает узел Standard_ND96amsr_A100_v4 (8×A100, 80 ГБ графической памяти на GPU).

Клонирование репозитория

Клонируйте репозиторий Azure/AKS и перейдите к модулю инфраструктуры:

git clone https://github.com/Azure/AKS
cd AKS/examples/kueue-and-ray-on-aks/1-infrastructure

Установка зависимостей Python

Шаг отправки данных Aurora требует Python пакетов. Установите их перед развертыванием:

pip install -r terraform/requirements-generator.txt

Проверка квоты GPU

Убедитесь, что у вашей подписки есть квота для SKU GPU в целевом регионе. Замените eastus2 предпочитаемым регионом:

LOCATION=<your-azure-region>
az vm list-usage --location "$LOCATION" --output table | grep -i "NDAMSv4_A100"

Note

Если у вас нет квоты GPU или требуется проверить инфраструктуру без gpu, разверните с помощью gpu_enabled=false:

terraform apply -var="subscription_id=<your-subscription-id>" -var="gpu_enabled=false"

Режим только с использованием процессора полезен для проверки конфигурации инфраструктуры и очереди. Рабочие нагрузки, запрашивающие графические процессоры, остаются в состоянии Pending.

Развертывание с помощью Terraform

Инициализировать и применить модуль Terraform:

cd terraform
terraform init
terraform apply -var="subscription_id=<your-subscription-id>"

Модуль Terraform создает:

  • Кластер AKS с включенным издателем OIDC и удостоверением рабочей нагрузки
  • Пул системных узлов и пул узлов GPU (когда gpu_enabled=true)
  • Оператор KubeRay и контроллер Kueue (релизы Helm из MCR)
  • DaemonSet для мониторинга GPU (когда gpu_enabled=true)
  • учетная запись Хранилище BLOB-объектов Azure с контейнерами aurora и llm-pipeline
  • Управляемая идентификация, назначаемая пользователем, с ролью участника данных BLOB-объектов хранилища
  • Учетные данные федеративной идентификации для ray-workload ServiceAccount
  • Предварительно подготовленные наборы данных (данные Aurora WeatherBench2 и набор данных viggo NLG)

Полную конфигурацию модуля Terraform см. в каталоге 1-infrastructure в репозитории.

Подключение к кластеру

Получите учетные данные для нового кластера AKS:

eval "$(terraform output -raw get_credentials_command)"

Проверка развертывания

Убедитесь, что операторы запущены и узлы доступны:

  1. Проверьте оператор KubeRay:

    kubectl -n kuberay-system get pods
    

    Ожидаемые выходные данные:

    NAME                                READY   STATUS    RESTARTS   AGE
    kuberay-operator-xxxxxxxxxx-xxxxx   1/1     Running   0          5m
    
  2. Проверьте контроллер Kueue:

    kubectl -n kueue-system get pods
    

    Ожидаемые выходные данные:

    NAME                                            READY   STATUS    RESTARTS   AGE
    kueue-controller-manager-xxxxxxxxxx-xxxxx       1/1     Running   0          5m
    
  3. Проверьте узлы:

    kubectl get nodes
    

    Ожидаемые выходные данные (с gpu_enabled=true):

    NAME                              STATUS   ROLES    AGE   VERSION
    aks-gpupool-xxxxxxxx-vmssxxxxxx   Ready    <none>   5m    v1.35.x
    aks-system-xxxxxxxx-vmssxxxxxx    Ready    <none>   10m   v1.35.x
    aks-system-xxxxxxxx-vmssxxxxxx    Ready    <none>   10m   v1.35.x
    
  4. Проверьте мониторинг GPU (только если gpu_enabled=true):

    kubectl -n gpu-monitoring get daemonsets
    

    Ожидаемые выходные данные:

    NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    gpu-monitoring-a100     1         1         1       1            1           <none>          5m
    

Очистите ресурсы

Чтобы удалить все ресурсы Azure, созданные с помощью этого модуля:

terraform destroy -var="subscription_id=<your-subscription-id>"

Следующий шаг