Бөлісу құралы:


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

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

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

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

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

Примечание.

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

Ограничения

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

Подготовка к работе

  • В этой статье предполагается, что у вас есть существующий кластер AKS. Если у вас нет кластера, создайте его с помощью Azure CLI, Azure PowerShell или портал Azure.
  • Вам потребуется azure CLI версии 1.0.0b2 или более поздней версии, настроенной --skip-gpu-driver-install для использования поля с командой az aks nodepool add . Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

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

  • Получите учетные данные для кластера 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 (предварительная версия)

Чтобы создать пул узлов с поддержкой GPU Windows, необходимо использовать поддерживаемый размер виртуальной машины с поддержкой GPU и указать как os-type Windows. По умолчанию используется Windows2022Windowsos-sku, но поддерживаются все параметры 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 Windows с установкой драйвера вручную

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

  1. Пропустить установку драйвера GPU (предварительная версия) с помощью --skip-gpu-driver-install.
  2. Ручная установка подключаемого модуля устройства Kubernetes DirectX.

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

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

Внимание

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

  1. Зарегистрируйте или обновите расширение 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
    
  2. Создайте пул узлов с помощью az aks nodepool add команды с флагом --skip-gpu-driver-install , чтобы пропустить автоматическую установку драйвера GPU.

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

Примечание.

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

Установка подключаемого модуля устройства 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/oss/nvidia/k8s-device-plugin:v0.14.1
            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, вы можете проверить, что графические процессоры являются шedulable.

Подтверждение того, что процессоры 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. Убедитесь, что графические процессоры являются schedulable с помощью kubectl describe node команды.

    kubectl describe node aks-gpunp-28993262-0
    

    В разделе Емкость PU должен отображаться как microsoft.com/directx: 1. Выходные данные должны выглядеть примерно так:

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

Мониторинг использования GPU с помощью аналитики контейнеров

Аналитика контейнеров с AKS отслеживает следующие метрики использования GPU:

Имя метрики Измерение метрики (теги) Description
containerGpuDutyCycle container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuIdcontainerNamegpuModel,gpuVendor Процент времени за последний период повторения (60 секунд), в течение которого графический процессор был занят или активно обрабатывал данные для контейнера. Рабочий цикл указывается как число в диапазоне от 1 до 100.
containerGpuLimits container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Для каждого контейнера можно задавать ограничения, касающиеся одного GPU или нескольких GPU. Невозможно запросить или ограничить долю GPU.
containerGpuRequests container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Каждый контейнер может запрашивать один GPU или несколько GPU. Невозможно запросить или ограничить долю GPU.
containerGpumemoryTotalBytes container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuIdcontainerNamegpuModel,gpuVendor Объем памяти GPU в байтах, доступной для определенного контейнера.
containerGpumemoryUsedBytes container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuIdcontainerNamegpuModel,gpuVendor Объем памяти GPU в байтах, используемой определенным контейнером.
nodeGpuAllocatable container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Количество gpu в узле, который может использовать Kubernetes.
nodeGpuCapacity container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Общее количество GPU в узле.

Очистка ресурсов

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

    kubectl delete jobs windows-gpu-workload
    

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