Использование графических процессоров 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. - Для работы с
az aks nodepool add
командой требуется Azure CLI версии 9.0.0b5 или более поздней--driver-type
версии. Чтобы узнать версию, выполните команду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
WindowsGPUPreview
Зарегистрируйте флаг компонента с помощьюaz feature register
команды.az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature show
команды.az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider register
команды.az provider register --namespace Microsoft.ContainerService
Создание пула узлов с поддержкой GPU Windows (предварительная версия)
Чтобы создать пул узлов с поддержкой GPU Windows, необходимо использовать поддерживаемый размер виртуальной машины с поддержкой GPU и указать как os-type
Windows
. По умолчанию используется Windows2022
Windowsos-sku
, но поддерживаются все параметры Windowsos-sku
.
Создайте пул узлов с поддержкой 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
Убедитесь, что ваши графические процессоры являются увольнимыми.
Убедившись в том, что графические процессоры доступны для обработки, вы можете запустить рабочую нагрузку 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 и подключаемый модуль устройства Kubernetes DirectX устанавливаются автоматически. Чтобы обойти эту автоматическую установку, выполните следующие действия.
- Пропустить установку драйвера GPU (предварительная версия) с помощью
--skip-gpu-driver-install
. - Ручная установка подключаемого модуля устройства Kubernetes DirectX.
Пропуск установки драйвера GPU (предварительная версия)
AKS включает автоматическую установку драйвера GPU по умолчанию. В некоторых случаях, например установка собственных драйверов, может потребоваться пропустить установку драйвера GPU.
Внимание
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Зарегистрируйте или обновите расширение 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
Создайте пул узлов с помощью
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
Создайте пространство имен с помощью
kubectl create namespace
команды.kubectl create namespace gpu-resources
Создайте файл с именем 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
Создайте daemonSet и убедитесь, что подключаемый модуль устройства NVIDIA успешно создан с помощью
kubectl apply
команды.kubectl apply -f nvidia-device-plugin-ds.yaml
Теперь, когда вы успешно установили подключаемый модуль устройства NVIDIA, вы можете проверить, что графические процессоры являются шedulable.
Подтверждение того, что процессоры GPU доступны для планирования
После создания кластера убедитесь, что графические процессоры являются неуклюжными в Kubernetes.
Вывод списка узлов в кластере
kubectl get nodes
с помощью команды.kubectl get nodes
Выходные данные должны выглядеть примерно так:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Убедитесь, что графические процессоры являются 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/clusterName gpuId containerName gpuModel ,gpuVendor |
Процент времени за последний период повторения (60 секунд), в течение которого графический процессор был занят или активно обрабатывал данные для контейнера. Рабочий цикл указывается как число в диапазоне от 1 до 100. |
containerGpuLimits | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Для каждого контейнера можно задавать ограничения, касающиеся одного GPU или нескольких GPU. Невозможно запросить или ограничить долю GPU. |
containerGpuRequests | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Каждый контейнер может запрашивать один GPU или несколько GPU. Невозможно запросить или ограничить долю GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuId containerName gpuModel ,gpuVendor |
Объем памяти GPU в байтах, доступной для определенного контейнера. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuId containerName gpuModel ,gpuVendor |
Объем памяти GPU в байтах, используемой определенным контейнером. |
nodeGpuAllocatable | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Количество gpu в узле, который может использовать Kubernetes. |
nodeGpuCapacity | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Общее количество GPU в узле. |
Очистка ресурсов
Удалите связанные объекты Kubernetes, созданные в этой статье, с помощью
kubectl delete job
команды.kubectl delete jobs windows-gpu-workload
Следующие шаги
- Чтобы выполнять задания Apache Spark, ознакомьтесь с разделом Запуск заданий Apache Spark в AKS.
- Дополнительные сведения о функциях планировщика Kubernetes см. в рекомендациях по расширенным функциям планировщика в AKS.
- Дополнительные сведения о Служба Azure Kubernetes и Машинное обучение Azure см. в следующем разделе:
Azure Kubernetes Service