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).
- 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.
- 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.
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.
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 \ --generate-ssh-keys
Configure
kubectl
para conectarse a su clúster AKS mediante el comandoaz aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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 MIGStandard_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
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)
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 repositorio Helm del complemento de dispositivos NVIDIA mediante los comandos
helm repo add
yhelm repo update
.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
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.
Compruebe la conexión
kubectl
al clúster mediante el comandokubectl get
para devolver una lista de nodos de 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
. 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
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
.
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)
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.
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.
Para más información sobre las GPU en Azure Kubernetes Service, consulte:
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: