Uso de GPU para cargas de trabajo de proceso intensivo (AKS en Azure Stack HCI 23H2)

Se aplica a: Azure Stack HCI, versión 23H2

Nota

Para más información sobre las GPU en AKS en Azure Stack HCI 22H2, consulte Uso de GPU (HCI 22H2).

Las unidades de procesamiento gráfico (GPU) se usan para cargas de trabajo que consumen muchos procesos, como el aprendizaje automático, el aprendizaje profundo, etc. En este artículo se describe cómo usar GPU para cargas de trabajo de proceso intensivo en AKS habilitadas por Azure Arc.

Modelos de GPU compatibles

AkS admite los siguientes modelos de GPU en Azure Stack HCI 23H2:

Fabricante Modelo de GPU Versión admitida
Nvidia A2 2311.2
Nvidia A16 2402.0

Tamaños de máquinas virtuales que se admiten

AkS en Azure Stack HCI 23H2 admite los siguientes tamaños de máquina virtual para cada modelo de GPU.

Las SKU A2 de NVIDIA A2 son compatibles con las SKU nc2 A2.

Tamaño de VM GPU Memoria de GPU: GiB vCPU Memoria: GiB
Standard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 48 16 64
Standard_NC32_A2 2 48 32 28

Las SKU nc2 A16 admiten las SKU de Nvidia A16.

Tamaño de VM GPU Memoria de GPU: GiB vCPU Memoria: GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 48 16 64
Standard_NC32_A16 2 48 32 28

Antes de empezar

Para usar GPU en AKS Arc, asegúrese de instalar los controladores de GPU necesarios antes de comenzar la implementación del clúster. Siga los pasos de esta sección.

Paso 1: instalar el sistema operativo

Instale el sistema operativo Azure Stack HCI, versión 23H2 localmente en cada servidor del clúster de Azure Stack HCI.

Paso 2: descargar e instalar el controlador de mitigación de NVIDIA

El software puede incluir componentes desarrollados y propiedad de NVIDIA Corporation o sus licenciantes. El uso de estos componentes se rige por el contrato de licencia de usuario final de NVIDIA.

Consulte la documentación del centro de datos de NVIDIA para descargar el controlador de mitigación de NVIDIA. Después de descargar el controlador, expanda el archivo e instale el controlador de mitigación en cada máquina host.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

Para instalar el controlador de mitigación, vaya a la carpeta que contiene los archivos extraídos y seleccione el archivo del controlador de GPU en función del tipo de GPU real instalado en los hosts de Azure Stack HCI. Por ejemplo, si el tipo es GPU A2, haga clic con el botón derecho en el archivo nvidia_azure_stack_A2_base.inf y seleccione Instalar.

También puede instalar con la línea de comandos; para ello, vaya a la carpeta y ejecute los siguientes comandos para instalar el controlador de mitigación:

pnputil /add-driver nvidia_azure_stack_A2_base.inf /install 
pnputil /scan-devices 

Después de instalar el controlador de mitigación, las GPU aparecen en el estado Correcto en Nvidia A2_base - Desmontado:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia A2_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

Paso 3: repetir los pasos 1 y 2

Repita los pasos 1 y 2 para cada servidor del clúster de HCI.

Paso 4: continuar la implementación del clúster de Azure Stack HCI

Continúe con la implementación del clúster de Azure Stack HCI siguiendo los pasos descritos en Implementación de Azure Stack HCI, versión 23H2.

Obtención de una lista de las SKU de máquina virtual habilitadas para GPU disponibles

Una vez completada la implementación del clúster de Azure Stack HCI, puede ejecutar el siguiente comando de la CLI para mostrar las SKU de máquina virtual disponibles en la implementación. Si los controladores de GPU están instalados correctamente, se muestran las SKU de máquina virtual de GPU correspondientes:

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

Creación de un clúster de cargas de trabajo con un grupo de nodos habilitado para GPU

Actualmente, el uso de grupos de nodos habilitados para GPU solo está disponible para grupos de nodos de Linux. Para crear un nuevo clúster de Kubernetes:

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

En el ejemplo siguiente se agrega un grupo de nodos con dos nodos habilitados para GPU (NVDIA A2) con una SKU de máquina virtual Standard_NC4_A2 :

az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux

Confirmación de que puede programar GPU

Con el grupo de nodos de GPU creado, confirme que puede programar GPU en Kubernetes. Primero, enumere los nodos del clúster con el comando kubectl get nodes:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

Ahora use el comando kubectl describe node para confirmar que se pueden programar las GPU. En la sección Capacidad , la GPU debe aparecer como nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

La salida debe mostrar las GPU del nodo de trabajo y tener un aspecto similar al siguiente:

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

Ejecución de una carga de trabajo habilitada para GPU

Una vez completados los pasos anteriores, cree un nuevo archivo YAML para las pruebas; por ejemplo, gpupod.yaml. Copie y pegue el siguiente código YAML en el nuevo archivo denominado gpupod.yaml y guárdelo:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

Ejecute el siguiente comando para implementar la aplicación de ejemplo:

kubectl apply -f gpupod.yaml

Compruebe que el pod se inició, completó la ejecución y que la GPU está asignada:

kubectl describe pod cuda-vector-add | findstr 'gpu'

El comando anterior debe mostrar una GPU asignada:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Compruebe el archivo de registro del pod para ver si se ha superado la prueba:

kubectl logs cuda-vector-add

A continuación se muestra el resultado del ejemplo del comando anterior:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Si recibe un error de coincidencia de versión al llamar a controladores, como "La versión del controlador CUDA no es suficiente para la versión del entorno de ejecución de CUDA", revise el gráfico de compatibilidad de la matriz de controladores nvidia.

Preguntas más frecuentes

¿Qué ocurre durante la actualización de un grupo de nodos habilitado para GPU?

La actualización de grupos de nodos habilitados para GPU sigue el mismo patrón de actualización gradual que se usa para los grupos de nodos normales. Para que los grupos de nodos habilitados para GPU en una nueva máquina virtual se creen correctamente en la máquina host física, requiere que una o varias GPU físicas estén disponibles para la asignación correcta de dispositivos. Esta disponibilidad garantiza que las aplicaciones puedan seguir ejecutándose cuando Kubernetes programa pods en este nodo actualizado.

Antes de realizar la actualización:

  1. Planee el tiempo de inactividad durante la actualización.
  2. Tenga una GPU adicional por host físico si ejecuta las GPU adicionales Standard_NK6 o 2 GPU adicionales si ejecuta Standard_NK12. Si se ejecuta con capacidad completa y no tiene una GPU adicional, se recomienda reducir verticalmente el grupo de nodos a un único nodo antes de la actualización y, a continuación, escalar verticalmente después de que la actualización se realice correctamente.

¿Qué ocurre si no tengo GPU físicas adicionales en mi máquina física durante una actualización?

Si se desencadena una actualización en un clúster sin recursos adicionales de GPU para facilitar la actualización gradual, el proceso de actualización se bloquea hasta que haya una GPU disponible. Si se ejecuta a plena capacidad y no tiene una GPU adicional, se recomienda reducir verticalmente el grupo de nodos a un solo nodo antes de la actualización y, a continuación, escalar verticalmente después de que la actualización se realice correctamente.

Pasos siguientes