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 comandoaz 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
Cree un grupo de recursos de Azure con el comando
az group create
.az group create --name myResourceGroup --location southcentralus
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
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
Agregue el complemento de dispositivos Nvidia y los repositorios helm de detección de características de GPU mediante los comandos
helm repo add
yhelm 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
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
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
Configure
kubectl
para conectarse a su clúster AKS mediante el comandoaz aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
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
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
Implemente la aplicación mediante el comando
kubectl apply
y especifique el nombre del manifiesto de YAML.kubectl apply -f single-strategy-example.yaml
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
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
Implemente la aplicación mediante el comando
kubectl apply
y especifique el nombre del manifiesto de YAML.kubectl apply -f mixed-strategy-example.yaml
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.
Azure Kubernetes Service