Создание пула узлов GPU с несколькими экземплярами в Служба Azure Kubernetes (AKS)
GPU NVIDIA A100 можно разделить на до семи независимых экземпляров. Каждый экземпляр имеет собственный мультипроцессор Stream (SM), который отвечает за выполнение инструкций параллельно и памяти GPU. Дополнительные сведения о NVIDIA A100 см. в разделе NVIDIA A100 GPU.
В этой статье описано, как создать пул узлов GPU с несколькими экземплярами с помощью размера виртуальной машины, совместимой с MIG, в кластере Служба 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 с несколькими экземплярами в настоящее время не поддерживаются в Azure Linux.
- Автомасштабирование кластера невозможно использовать с пулами узлов GPU с несколькими экземплярами.
Профили экземпляров 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 \ --generate-ssh-keys
Настройте
kubectl
подключение к кластеруaz aks get-credentials
AKS с помощью команды.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Создание пула узлов GPU с несколькими экземплярами
Для создания пула узлов можно использовать Azure CLI или HTTP-запрос к API ARM.
Создайте пул узлов GPU с несколькими экземплярами с помощью
az aks nodepool add
команды и укажите профиль экземпляра GPU. В приведенном ниже примере создается пул узлов с размером виртуальной машины, совместимой сStandard_ND96asr_v4
MIG.az aks nodepool add \ --name aks-mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --node-count 1 \ --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 (GFD)
Задайте стратегию MIG в качестве переменной среды. Можно использовать одну или смешанную стратегию.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
Добавьте репозиторий helm подключаемого
helm repo add
модуля устройства NVIDIA с помощью команд иhelm repo update
команд.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
Установите подключаемый модуль устройства NVIDIA с помощью
helm install
команды.helm install nvdp nvdp/nvidia-device-plugin \ --version=0.15.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
Примечание.
Установка подключаемого модуля устройства NVIDIA 0.15.0 и выше объединяет подключаемый модуль устройства и репозитории GFD. В этом руководстве не рекомендуется использовать отдельную установку программного обеспечения GFD.
Подтверждение возможности использования GPU с несколькими экземплярами
kubectl
Проверьте подключение к кластеру с помощьюkubectl get
команды, чтобы вернуть список узлов кластера.kubectl get nodes -o wide
Убедитесь, что узел имеет возможность GPU с несколькими экземплярами с помощью
kubectl describe node
команды. В следующем примере команды описывается узел с именем aks-mignode, который использует MIG1g в качестве профиля экземпляра GPU.kubectl describe node aks-mignode
Выходные данные должны выглядеть примерно так:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
Планирование задач
Следующие примеры основаны на базовом образе CUDA версии 12.1.1 для Ubuntu 22.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.
Следующие шаги
Дополнительные сведения о gpu в Служба Azure Kubernetes см. в следующих статье:
Azure Kubernetes Service