Compartir a través de


Creación de un grupo de nodos de GPU de varias instancias en Azure Kubernetes Service (AKS)

La GPU A100 de NVIDIA se puede dividir en hasta siete instancias independientes. Cada instancia tiene su propio multiprocesador de secuencias (SM), que es responsable de ejecutar instrucciones en paralelo y memoria de GPU. Para más información sobre NVIDIA A100, consulte GPU A100 de NVIDIA.

En este artículo se explica cómo crear un grupo de nodos de GPU de varias instancias mediante un tamaño de máquina virtual compatible con MIG en un clúster de Azure Kubernetes Service (AKS).

Requisitos previos y limitaciones

  • Una cuenta de Azure con una suscripción activa. En caso de no tener una, puede crear una cuenta gratuita.
  • CLI de Azure versión 2.2.0 o posterior instalada y configurada. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • El cliente de línea de comandos de Kubernetes, kubectl, instalado y configurado. Si usa Azure Cloud Shell, kubectl ya está instalado. Si quiere instalarlo localmente, puede usar el comando az aks install-cli.
  • Helm v3 instalado y configurado. Para más información, consulte Instalación de Helm.
  • Los grupos de nodos de GPU de varias instancias no se admiten actualmente en Azure Linux.
  • No se puede usar el Escalador automática de clústeres con grupos de nodos de GPU de varias instancias.

Perfiles de instancia de GPU

Los perfiles de instancia de GPU definen cómo se particionan las GPU. La siguiente tabla muestra el perfil de instancia de GPU disponible para el Standard_ND96asr_v4:

Nombre de perfil Fracción de SM Fracción de memoria Número de instancias creadas
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

Por ejemplo, el perfil de instancia de GPU de MIG 1g.5gb indica que cada instancia de GPU tiene 1g SM (multiprocesadores de streaming) y 5 GB de memoria. En este caso, la GPU se divide en siete instancias.

Los perfiles de instancia de GPU disponibles para este tamaño de máquina virtual incluyen MIG1g, MIG2g, MIG3g, MIG4g y MIG7g.

Importante

No se puede cambiar el perfil de instancia de GPU aplicado después de la creación del grupo de nodos.

Creación de un clúster de AKS

  1. Cree un grupo de recursos de Azure con el comando az group create.

    az group create --name myResourceGroup --location southcentralus
    
  2. Cree un clúster de AKS con el comando az aks create.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Configure kubectl para conectarse a su clúster AKS mediante el comando az aks get-credentials.

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

Creación de un grupo de nodos de GPU de instancias múltiples

Puede usar la CLI de Azure o una solicitud HTTP a la API de ARM para crear el grupo de nodos.

  • Cree un grupo de nodos de GPU de varias instancias mediante el comando az aks nodepool add y especifique el perfil de instancia de GPU. En el ejemplo siguiente se crea un grupo de nodos con el tamaño de máquina virtual de GPU compatible con MIG Standard_ND96asr_v4.

    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
    

Determinación de la estrategia de GPU (MIG) de varias instancias

Antes de instalar los complementos de NVIDIA, debe especificar qué estrategia de GPU multiinstancia (MIG) usar para el particionamiento de la GPU: Estrategia única o Estrategia mixta. Las dos estrategias no afectarán a la forma en que se ejecutan las cargas de trabajo de la CPU, sino a cómo se muestran los recursos de la GPU.

  • Estrategia única: la estrategia única trata cada instancia de GPU como una GPU. Si usa esta estrategia, los recursos de GPU se muestran como nvidia.com/gpu: 1.
  • Estrategia mixta: la estrategia mixta expone las instancias de la GPU y el perfil de instancia de la GPU. Si usa esta estrategia, el recurso de GPU se muestra como nvidia.com/mig1g.5gb: 1.

Instalar el complemento de dispositivo NVIDIA y los componentes de detección de características de GPU (GFD)

  1. Establezca la estrategia de MIG como una variable de entorno. Puede usar una estrategia única o mixta.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. Agregue el repositorio Helm del complemento de dispositivos NVIDIA mediante los comandos helm repo add y helm repo update.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. Instale el complemento de dispositivo NVIDIA mediante el comando 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
    

Nota:

La instalación de Helm del complemento de dispositivo NVIDIA versión 0.15.0 y versiones posteriores consolida el complemento de dispositivo y repositorios GFD. No se recomienda instalar helm independiente del componente de software GFD en este tutorial.

Confirmación de la funcionalidad de GPU de instancias múltiples

  1. Compruebe la conexión kubectl al clúster mediante el comando kubectl get para devolver una lista de nodos de clúster.

    kubectl get nodes -o wide
    
  2. Confirme que el nodo tiene la funcionalidad de GPU de varias instancias mediante el comando kubectl describe node. En el siguiente comando de ejemplo se describe el nodo denominado aks-mignode, que usa MIG1g como perfil de instancia de GPU.

    kubectl describe node aks-mignode
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    # Single strategy output
    Allocatable:
        nvidia.com/gpu: 56
    
    # Mixed strategy output
    Allocatable:
        nvidia.com/mig-1g.5gb: 56
    

Programación del trabajo

Los ejemplos siguientes se basan en la imagen base de CUDA versión 12.1.1 para Ubuntu 22.04, etiquetada como 12.1.1-base-ubuntu22.04.

Estrategia única

  1. Cree un archivo denominado single-strategy-example.yaml y cópielo en el siguiente código manifiesto.

    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. Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML.

    kubectl apply -f single-strategy-example.yaml
    
  3. Compruebe los dispositivos GPU asignados mediante el comando kubectl exec. Este comando devuelve una lista de los nodos del clúster.

    kubectl exec nvidia-single -- nvidia-smi -L
    

    El ejemplo siguiente se parece a la salida que muestra las implementaciones y servicios creados correctamente:

    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)
    

Estrategia mixta

  1. Cree un archivo denominado mixed-strategy-example.yaml y cópielo en el siguiente código manifiesto.

    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. Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. Compruebe los dispositivos GPU asignados mediante el comando kubectl exec. Este comando devuelve una lista de los nodos del clúster.

    kubectl exec nvidia-mixed -- nvidia-smi -L
    

    El ejemplo siguiente se parece a la salida que muestra las implementaciones y servicios creados correctamente:

    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)
    

Importante

La etiqueta latest para las imágenes CUDA ha quedado en desuso en Docker Hub. Consulte el repositorio de NVIDIA para ver las imágenes más recientes y sus etiquetas correspondientes.

Solución de problemas

Si no ve la capacidad de la GPU multiinstancia después de crear el grupo de nodos, confirme que la versión de la API no es anterior a 2021-08-01.

Pasos siguientes

Para más información sobre las GPU en Azure Kubernetes Service, consulte: