Поделиться через


Использование gpu Windows для вычислительных рабочих нагрузок в службе Azure Kubernetes (AKS) (предварительная версия)

Графические процессоры (GPU) часто используются для вычислительно интенсивных рабочих нагрузок, таких как графические и визуализационные рабочие нагрузки. AKS поддерживает пулы узлов с поддержкой GPU на Windows и Linux для выполнения вычислительных рабочих нагрузок в Kubernetes.

В этой статье рассказывается, как подготовить узлы Windows с планируемыми графическими процессорами для новых и существующих кластеров AKS (предварительный просмотр).

Поддерживаемые виртуальные машины с поддержкой GPU (виртуальные машины)

Сведения о поддерживаемых виртуальных машинах с поддержкой GPU см. в статье о размерах виртуальных машин, оптимизированных для GPU, в Azure. Для пулов узлов AKS мы рекомендуем минимальный размер Standard_NC6s_v3. Серия NVv4 (на основе AMD GPUs) не поддерживается в AKS.

Замечание

ВМ с поддержкой GPU содержат специализированное оборудование, что обуславливает их более высокие цены и доступность в регионе. Дополнительные сведения см. в инструменте ценообразования и доступности региона.

Ограничения

  • Обновление существующего пула узлов Windows для добавления GPU не поддерживается.
  • Не поддерживается в Kubernetes версии 1.28 и ниже.

Перед тем как начать

  • В данной статье предполагается, что у вас уже есть существующий кластер AKS. Если у вас нет кластера, создайте его с помощью Azure CLI, Azure PowerShell или портала Azure.
  • Для использования поля --gpu-driver с командой az aks nodepool add Azure CLI версии 2.72.2 или более поздней должна быть установлена и настроена. Чтобы узнать версию, выполните команду az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".
  • Если у вас установлено расширение Azure CLI, обновите его до версии 18.0.0b2 или более поздней.

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

  • Получите учетные данные для вашего кластера AKS, используя команду az aks get-credentials. Ниже приведённый пример команды получает учетные данные для myAKSCluster в группе ресурсов myResourceGroup.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Использование GPU Windows с автоматической установкой драйвера

Использование GPU NVIDIA включает установку различных программных компонентов NVIDIA, таких как подключаемый модуль устройства DirectX для Kubernetes, установка драйвера GPU и многое другое. При создании пула узлов Windows с поддерживаемой виртуальной машиной с поддержкой GPU эти компоненты и соответствующие драйверы NVIDIA CUDA или GRID устанавливаются. Для размеров виртуальных машин серии NC и ND устанавливается драйвер CUDA. Для размеров виртуальных машин серии NV устанавливается драйвер GRID.

Это важно

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

Установка расширения Azure CLI aks-preview

  • Зарегистрируйте или обновите расширение aks-preview, используя команду az extension add или az extension update.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Регистрация флага компонента WindowsGPUPreview

  1. Зарегистрируйте флаг функции WindowsGPUPreview с помощью команды az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    Через несколько минут отобразится состояние Registered (Зарегистрировано).

  2. Проверьте состояние регистрации с помощью az feature show команды.

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Создание пула узлов с поддержкой GPU Windows (предварительная версия)

Чтобы создать пул узлов Windows с поддержкой GPU, необходимо использовать поддерживаемый размер виртуальной машины с поддержкой GPU и указать os-type как Windows. В Windows по умолчанию используется os-skuWindows2022, но поддерживаются все параметры Windowsos-sku.

  1. Создайте пул узлов с поддержкой GPU Windows с помощью az aks nodepool add команды.

    az aks nodepool add \
       --resource-group myResourceGroup \
       --cluster-name myAKSCluster \
       --name gpunp \
       --node-count 1 \
       --os-type Windows \
       --kubernetes-version 1.29.0 \
       --node-vm-size Standard_NC6s_v3
    
  2. Проверьте, что ваши графические процессоры могут быть запланированными.

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

Указание типа драйвера GPU (предварительная версия)

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

При создании пула агентов Windows с поддержкой GPU можно указать тип драйвера GPU с помощью флага --driver-type .

Доступны следующие варианты:

  • GRID: для приложений, требующих поддержки виртуализации.
  • CUDA: оптимизировано для вычислительных задач в научных вычислениях и приложениях с большим объемом данных.

Замечание

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

Чтобы создать пул узлов с поддержкой GPU Windows с определенным типом драйвера GPU, используйте az aks nodepool add команду.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --os-type Windows \
    --kubernetes-version 1.29.0 \
    --node-vm-size Standard_NC6s_v3 \
    --driver-type GRID

Например, приведенная выше команда создает пул узлов с поддержкой GPU с помощью GRID типа драйвера GPU. Выбор этого типа драйвера переопределяет тип драйвера по умолчанию CUDA для номеров SKU серии NC.

Использование GPU Windows с установкой драйвера вручную

При формировании пула узлов Windows с размерами виртуальных машин серии N (NVIDIA GPU) в AKS, драйверы графического процессора (GPU) и плагин устройства DirectX для Kubernetes устанавливаются автоматически. Чтобы обойти эту автоматическую установку, выполните следующие действия.

  1. Пропустите установку драйвера GPU , задав конфигурацию --gpu-driver none во время создания пула узлов.
  2. Ручная установка плагина устройства Kubernetes DirectX.

Пропуск установки драйвера GPU

AKS включает автоматическую установку драйвера GPU по умолчанию. В некоторых случаях, например, при установке собственных драйверов, может потребоваться пропустить установку драйвера графического процессора.

Это важно

Начиная с 14 августа 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает --skip-gpu-driver-install тег пула узлов. После этой даты вы не сможете подготовить пулы узлов с поддержкой GPU с помощью этого тега для обхода автоматической установки драйвера GPU. Вы можете добиться того же поведения, установив для поля --gpu-driver значение none. Дополнительные сведения об этом устаревании см. в вопросе устаревания на GitHub и объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.

  1. создайте пул узлов с помощью команды az aks nodepool add и установив поле API --gpu-driver на none, чтобы пропустить автоматическую установку драйвера GPU.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --gpu-driver none
    

Замечание

Если используемое --node-vm-size приложение еще не подключено к AKS, вы не можете использовать графические процессоры и --gpu-driver поле не работает.

Установите плагин устройства Kubernetes DirectX вручную

Вы можете развернуть DaemonSet для плагина устройства Kubernetes DirectX, который запускает pod на каждом узле, чтобы предоставить необходимые драйверы для GPU.

  • Добавьте пул узлов в ваш кластер, используя команду az aks nodepool add.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

Создание пространства имен и развертывание подключаемого модуля устройства Kubernetes DirectX

  1. Создайте пространство имен с помощью команды kubectl create namespace.

    kubectl create namespace gpu-resources
    
  2. Создайте файл с именем k8s-directx-device-plugin.yaml и вставьте следующий манифест YAML, предоставленный в составе подключаемого модуля устройства NVIDIA для проекта Kubernetes:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nvidia-device-plugin-daemonset
      namespace: gpu-resources
    spec:
      selector:
        matchLabels:
          name: nvidia-device-plugin-ds
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
          # reserves resources for critical add-on pods so that they can be rescheduled after
          # a failure.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/aks/aks-windows-gpu-device-plugin:0.0.17
            name: nvidia-device-plugin-ctr
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
    
  3. Создайте DaemonSet и убедитесь, что плагин устройства NVIDIA успешно создан с помощью команды kubectl apply.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Теперь, когда вы успешно установили подключаемый модуль устройства NVIDIA, вы можете убедиться в том, что ваши графические процессоры доступны для планирования.

Подтвердите, что графические процессоры могут быть запланированы

После создания вашего кластера убедитесь, что GPU можно использовать в Kubernetes.

  1. Перечислите узлы в вашем кластере, используя команду kubectl get nodes.

    kubectl get nodes
    

    Ваш результат должен быть похож на следующий пример результата:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. Подтвердите, что GPU можно планировать, используя команду kubectl describe node.

    kubectl describe node aks-gpunp-28993262-0
    

    В разделе Ёмкость GPU должен быть указан как microsoft.com/directx: 1. Ваш результат должен выглядеть аналогично следующему сокращенному образцу.

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

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

  • Удалите связанные объекты Kubernetes, которые вы создали в этой статье, используя команду kubectl delete job.

    kubectl delete jobs windows-gpu-workload
    

Дальнейшие шаги