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 propia memoria y Stream Multiprocessor (SM). 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 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.
  • No se puede usar el Escalador automático de clústeres con grupos de nodos 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 (recurso informático) 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 instancia 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\
        --node-count 1 \
        --generate-ssh-keys
    

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.

    az aks nodepool add \
        --name mignode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --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.

Instalación del complemento de dispositivo NVIDIA y la detección de características de la GPU

  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 complemento de dispositivos Nvidia y los repositorios helm de detección de características de GPU mediante los comandos helm repo add y 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
    
  3. Instale el complemento de dispositivo Nvidia mediante el comando helm install.

    helm install \
    --version=0.14.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    nvdp/nvidia-device-plugin
    
  4. Instale la detección de características de GPU mediante el comando helm install.

    helm install \
    --version=0.2.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    nvgfd/gpu-feature-discovery
    

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

  1. 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
    
  2. Para comprobar la conexión al clúster, use el comando kubectl get para devolver una lista de los nodos del clúster.

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

    kubectl describe node 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 siguientes ejemplos se basan en la versión 12.1.1 de la imagen base de cuda para Ubuntu22.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 los grupos de nodos de AKS, consulte Administración de grupos de nodos para un clúster en AKS.