Создание пула узлов GPU с несколькими экземплярами в Служба Azure Kubernetes (AKS)
GPU A100 NVIDIA можно распределить по семи независимым экземплярам. Каждый экземпляр имеет собственную память и многопроцессор stream (SM). Дополнительные сведения о NVIDIA A100 см. в разделе Nvidia A100 GPU.
В этой статье описано, как создать пул узлов GPU с несколькими экземплярами в кластере Служба Azure Kubernetes (AKS).
Предварительные требования и ограничения
- Учетная запись Azure с активной подпиской. Если ее нет, можно создать учетную запись бесплатно.
- Azure CLI версии 2.2.0 или более поздней версии, установленной и настроенной. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Клиент командной строки Kubernetes, kubectl, установленный и настроенный. Если вы используете Azure Cloud Shell,
kubectl
уже установлен. Если вы хотите установить его локально, можно использоватьaz aks install-cli
команду. - Helm версии 3 установлен и настроен. Дополнительные сведения об установке Helm см. в этой статье.
- Автомасштабирование кластера невозможно использовать с пулами узлов с несколькими экземплярами.
Профили экземпляров GPU
Профили экземпляров GPU определяют, как секционируются графические процессоры. В следующей таблице показан доступный профиль экземпляра Standard_ND96asr_v4
GPU для:
Имя профиля | Часть SM | Доля памяти | Количество созданных экземпляров |
---|---|---|---|
MIG 1g.5gb | 1/7 | 1/8 | 7 |
MIG 2g.10gb | 2/7 | 2/8 | 3 |
MIG 3g.20gb | 3/7 | 4/8 | 2 |
MIG 4g.20gb | 4/7 | 4/8 | 1 |
MIG 7g.40gb | 7/7 | 8/8 | 1 |
Например, профиль экземпляра MIG 1g.5gb
GPU указывает, что каждый экземпляр GPU имеет 1g SM(Вычислительный ресурс) и 5 гб памяти. В этом случае GPU секционируется на семь экземпляров.
Доступные профили экземпляров GPU, доступные для этого размера MIG1g
экземпляра: , MIG2g
, MIG3g
и MIG4g
MIG7g
.
Внимание
После создания пула узлов не удается изменить примененный профиль экземпляра GPU.
Создание кластера AKS
Создайте группу ресурсов Azure с помощью
az group create
команды.az group create --name myResourceGroup --location southcentralus
Создайте кластер AKS с помощью
az aks create
команды.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster\ --node-count 1 \ --generate-ssh-keys
Создание пула узлов GPU с несколькими экземплярами
Для создания пула узлов можно использовать Azure CLI или HTTP-запрос к API ARM.
Создайте пул узлов GPU с несколькими экземплярами с помощью
az aks nodepool add
команды и укажите профиль экземпляра GPU.az aks nodepool add \ --name mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --gpu-instance-profile MIG1g
Определение стратегии много экземпляров GPU (MIG)
Перед установкой подключаемых модулей Nvidia необходимо указать, какую стратегию gpu с несколькими экземплярами (MIG) следует использовать для секционирования GPU: отдельная стратегия или смешанная стратегия. Две стратегии не влияют на то, как выполняются рабочие нагрузки ЦП, но как отображаются ресурсы GPU.
- Единая стратегия: одна стратегия обрабатывает каждый экземпляр GPU как GPU. Если вы используете эту стратегию, ресурсы GPU отображаются как
nvidia.com/gpu: 1
. - Смешанная стратегия: смешанная стратегия предоставляет экземпляры GPU и профиль экземпляра GPU. Если вы используете эту стратегию, ресурс GPU отображается как
nvidia.com/mig1g.5gb: 1
.
Установка подключаемого модуля устройства NVIDIA и обнаружение функций GPU
Задайте стратегию MIG в качестве переменной среды. Можно использовать одну или смешанную стратегию.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
Добавьте подключаемый модуль устройства Nvidia и репозитории функций GPU helm с помощью
helm repo add
команд иhelm repo update
команд.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo add nvgfd https://nvidia.github.io/gpu-feature-discovery helm repo update
Установите подключаемый модуль устройства Nvidia с помощью
helm install
команды.helm install \ --version=0.14.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvdp/nvidia-device-plugin
Установите обнаружение компонентов GPU с помощью
helm install
команды.helm install \ --version=0.2.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvgfd/gpu-feature-discovery
Подтверждение возможности использования GPU с несколькими экземплярами
Настройте
kubectl
подключение к кластеруaz aks get-credentials
AKS с помощью команды.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Проверьте подключение к кластеру с помощью
kubectl get
команды, чтобы вернуть список узлов кластера.kubectl get nodes -o wide
Убедитесь, что узел имеет возможность GPU с несколькими экземплярами с помощью
kubectl describe node
команды. В следующем примере команды описывается узел с именем mignode, который использует MIG1g в качестве профиля экземпляра GPU.kubectl describe node mignode
Выходные данные должны выглядеть примерно так:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
Планирование задач
Следующие примеры основаны на базовом образе cuda версии 12.1.1 для Ubuntu22.04, помеченной как 12.1.1-base-ubuntu22.04
.
Единая стратегия
Создайте файл
single-strategy-example.yaml
и скопируйте в него следующий манифест.apiVersion: v1 kind: Pod metadata: name: nvidia-single spec: containers: - name: nvidia-single image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 1000"] resources: limits: "nvidia.com/gpu": 1
Разверните приложение с помощью
kubectl apply
команды и укажите имя манифеста YAML.kubectl apply -f single-strategy-example.yaml
Проверьте выделенные устройства GPU с помощью
kubectl exec
команды. Эта команда возвращает список узлов кластера.kubectl exec nvidia-single -- nvidia-smi -L
В следующем примере показано, как выходные данные, показывающие успешно созданные развертывания и службы:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c) MIG 1g.5gb Device 1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc) MIG 1g.5gb Device 2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f) MIG 1g.5gb Device 3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2) MIG 1g.5gb Device 4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e) MIG 1g.5gb Device 5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85) MIG 1g.5gb Device 6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
Смешанная стратегия
Создайте файл
mixed-strategy-example.yaml
и скопируйте в него следующий манифест.apiVersion: v1 kind: Pod metadata: name: nvidia-mixed spec: containers: - name: nvidia-mixed image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 100"] resources: limits: "nvidia.com/mig-1g.5gb": 1
Разверните приложение с помощью
kubectl apply
команды и укажите имя манифеста YAML.kubectl apply -f mixed-strategy-example.yaml
Проверьте выделенные устройства GPU с помощью
kubectl exec
команды. Эта команда возвращает список узлов кластера.kubectl exec nvidia-mixed -- nvidia-smi -L
В следующем примере показано, как выходные данные, показывающие успешно созданные развертывания и службы:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
Внимание
Тег latest
для изображений CUDA не рекомендуется использовать в Docker Hub. Ознакомьтесь с репозиторием NVIDIA для последних образов и соответствующих тегов.
Устранение неполадок
Если после создания пула узлов не отображается возможность gpu с несколькими экземплярами, убедитесь, что версия API не старше 2021-08-01.
Следующие шаги
Дополнительные сведения о пулах узлов AKS см. в разделе "Управление пулами узлов" для кластера в AKS.
Azure Kubernetes Service