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 obtener 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 de proceso intensivo, 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 admitidos
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 |
NVidia | T4 | 2408.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.
Nvidia T4 es compatible con las SKU de NK T4
Tamaño de VM | GPU | Memoria de GPU: GiB | vCPU | Memoria: GiB |
---|---|---|---|---|
Standard_NK6 | 1 | 8 | 6 | 12 |
Standard_NK12 | 2 | 16 | 12 | 24 |
Nvidia A2 es compatible 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 |
Nvidia A16 es compatible con las SKU NC2 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 descritos en 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: desinstalar el controlador de host nvidia
En cada máquina host, vaya a Panel de control > Agregar o quitar programas, desinstale el controlador host de NVIDIA y reinicie la máquina. Una vez reiniciada la máquina, confirme que el controlador se desinstaló correctamente. Abra un terminal de PowerShell con privilegios elevados y ejecute el siguiente comando:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Debería ver que los dispositivos gpu aparecen en un estado de error, como se muestra en esta salida de ejemplo:
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Paso 3: desmontar el controlador host del host
Al desinstalar el controlador host, la GPU física entra en un estado de error. Debe desmontar todos los dispositivos gpu del host.
Para cada dispositivo de GPU (controlador de vídeo 3D), ejecute los siguientes comandos en PowerShell. Copie el identificador de instancia; por ejemplo, PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
desde la salida del comando anterior:
$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force
Para confirmar que las GPU se desmontaron correctamente del host, ejecute el siguiente comando. Debe colocar GPU en un Unknown
estado:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Paso 4: 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. Puede seguir este script de PowerShell para descargar el controlador de mitigación y extraerlo:
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 A2 GPU, haga clic con el botón derecho en el archivo nvidia_azure_stack_A2_base.inf y seleccione Instalar.
También puede instalar mediante 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 se muestran en el estado Aceptar en Nvidia A2_base : desmontado:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -match "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 5: repetir los pasos 1 a 4
Repita los pasos del 1 al 4 para cada servidor del clúster de HCI.
Paso 6: 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 2 nodos habilitados para GPU (NVDIA A2) con una SKU de máquina virtual de 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 las GPU se pueden programar. 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 se asignó la GPU:
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 un ejemplo de salida 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 versiones al llamar a controladores, como "La versión del controlador CUDA no es suficiente para la versión en tiempo de ejecución de CUDA", revise el gráfico de compatibilidad de 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 actualizar:
- Planee el tiempo de inactividad durante la actualización.
- Tenga una GPU adicional por host físico si ejecuta la Standard_NK6 o 2 GPU adicionales si ejecuta Standard_NK12. 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.
¿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.