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


Создание пула узлов с несколькими экземплярами GPU в Службе Azure Kubernetes (AKS)

Некоторые графические процессоры NVIDIA можно разделить на до семи независимых экземпляров. Каждый экземпляр имеет собственный мультипроцессор Stream (SM), который отвечает за выполнение инструкций параллельно, и собственную память GPU. Дополнительные сведения о секционирования GPU см. в разделе NVIDIA MIG.

В этой статье рассказывается, как создать пул GPU-узлов с несколькими экземплярами, используя размер виртуальной машины, совместимый с MIG, в кластере Azure Kubernetes Service (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 см. в Установка Helm.
  • В настоящее время многоэкземплярная GPU поддерживается для размеров виртуальных машин Standard_NC40ads_H100_v5, Standard_ND96isr_H100_v5 и на базе GPU A100 на платформе AKS.

Профили экземпляров GPU

Профили экземпляров GPU определяют, как секционируются графические процессоры. В следующей таблице показан доступный профиль GPU-экземпляра для Standard_ND96asr_v4:

Имя профиля Доля SM Доля памяти Количество созданных экземпляров
MIG 1g,5gb 1/7 одна восьмая 7
MIG 2g.10gb 2/7 2/8 3
MIG 3г.20Гб 3/7 4/8 2
MIG 4г.20ГБ 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

  1. Создайте группу ресурсов Azure с помощью az group create команды.

    az group create --name myResourceGroup --location southcentralus
    
  2. Создайте кластер AKS с помощью az aks create команды.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Настройте kubectl, чтобы подключиться к кластеру AKS с помощью команды az aks get-credentials.

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

Создание многоэкземплярного пула узлов с GPU

Для создания пула узлов можно использовать Azure CLI или HTTP-запрос к API ARM.

  • Создайте пул узлов GPU с несколькими экземплярами с помощью az aks nodepool add команды и укажите профиль экземпляра GPU. В приведенном ниже примере создается пул узлов с типом виртуальной машины GPU, совместимой с Standard_ND96asr_v4 MIG.

    az aks nodepool add \
        --name aksMigNode \
        --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)

  1. Задайте стратегию MIG в качестве переменной среды. Можно использовать одну или смешанную стратегию.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. Добавьте репозиторий helm для подключаемого модуля устройства NVIDIA, используя команды helm repo add и helm repo update.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. Установите подключаемый модуль устройства NVIDIA с помощью команды helm install.

    helm install nvdp nvdp/nvidia-device-plugin \
    --version=0.17.0 \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

Примечание.

Установка с помощью Helm плагина для устройств NVIDIA объединяет плагины для устройств Kubernetes и репозитории GFD. Отдельная установка helm программного компонента GFD не рекомендуется при использовании gpu с несколькими экземплярами AKS.

Подтверждение возможности использования мульти-инстанс GPU

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

    kubectl get nodes -o wide
    
  2. Убедитесь, что узел имеет возможность GPU с несколькими экземплярами с помощью kubectl describe node команды. В следующем примере команда описывает узел с именем aksMigNode, который использует MIG1g в качестве профиля экземпляра GPU.

    kubectl describe node aksMigNode
    

    Выходные данные должны выглядеть примерно так:

    # 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.

Единая стратегия

  1. Создайте файл 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
    
  2. Разверните приложение с помощью kubectl apply команды и укажите имя манифеста YAML.

    kubectl apply -f single-strategy-example.yaml
    
  3. Проверьте выделенные устройства 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)
    

Смешанная стратегия

  1. Создайте файл 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
    
  2. Разверните приложение с помощью kubectl apply команды и укажите имя манифеста YAML.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. Проверьте выделенные устройства 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, см. в следующей статье: