Compartir a través de


Uso de GPU de Windows para cargas de trabajo de proceso intensivo en Azure Kubernetes Service (AKS) (versión preliminar)

Por lo general, las unidades de procesamiento gráfico (GPU) se usan para cargas de trabajo de cálculo intensivo, como cargas de trabajo de visualización y gráficos. AKS admite grupos de nodos de Windows habilitados para GPU y Linux para ejecutar cargas de trabajo de Kubernetes con un uso intensivo de proceso.

Este artículo le ayuda a aprovisionar nodos de Windows con GPU programables en clústeres de AKS nuevos y existentes (versión preliminar).

Máquinas virtuales (VM) compatibles con GPU

Para ver las máquinas virtuales compatibles con GPU, consulte Tamaños de máquinas virtuales optimizadas para GPU en Azure. Para grupos de nodos de AKS, se recomienda un tamaño mínimo de Standard_NC6s_v3. La serie NVv4 (basada en GPU de AMD) no es compatible con AKS.

Nota:

Las máquinas virtuales habilitadas para GPU contienen hardware especializado que está sujeto a precios más altos y disponibilidad limitada según la región. Para obtener más información, consulte la herramienta de precios y la disponibilidad de regiones.

Limitaciones

  • No se admite la actualización de un grupo de nodos de Windows existente para agregar GPU.
  • No se admite en la versión 1.28 y posteriores de Kubernetes.

Antes de empezar

  • Este artículo supone que ya tiene un clúster de AKS. Si no dispone de un clúster, cree uno mediante Azure CLI, Azure PowerShell o el Azure Portal.
  • Necesita la versión 2.72.2 o posterior de la CLI de Azure instalada y configurada para usar el campo --gpu-driver con el comando az aks nodepool add. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • Si tiene instalada la extensión de la aks-preview CLI de Azure, actualice la versión a 18.0.0b2 o posterior.

Obtención de las credenciales del clúster

  • Obtenga las credenciales del clúster de AKS mediante el comando az aks get-credentials. Con el siguiente comando de ejemplo se obtienen las credenciales del clúster myAKSCluster en el grupo de recursos myResourceGroup:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Uso de GPU de Windows con instalación automática de controladores

El uso de GPU de NVIDIA implica la instalación de varios componentes de software NVIDIA, como el complemento deDispositivo DirectX para Kubernetes, la instalación del controlador de GPU, etc. Al crear un grupo de nodos de Windows con una máquina virtual compatible con GPU, estos componentes y los controladores NVIDIA CUDA o GRID adecuados se instalan. En el caso de los tamaños de máquina virtual de la serie NC y ND, se instala el controlador CUDA. En el caso de los tamaños de máquina virtual de la serie NV, se instala el controlador GRID.

Importante

Las funciones en versión preliminar de AKS están disponibles a través de una opción de autoservicio y suscripción. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Instalación de la extensión de la CLI de Azure aks-preview

  • Registre o actualice la extensión aks-preview mediante el comando az extension add o az extension update.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Registro de la marca de característica WindowsGPUPreview

  1. Registre la marca de características de WindowsGPUPreview mediante el comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    Tarda unos minutos en que el estado muestre Registrado.

  2. Comprobar el estado del registro mediante el comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Creación de un grupo de nodos habilitado para GPU de Windows (versión preliminar)

Para crear un grupo de nodos habilitado para GPU de Windows, debe usar un tamaño de máquina virtual compatible con GPU y especificar el os-type como Windows. El predeterminado de Windows os-sku es Windows2022, pero se admiten todas las opciones de Windows os-sku.

  1. Cree un grupo de nodos habilitados para GPU de Windows mediante el comandoaz aks nodepool add.

    az aks nodepool add \
       --resource-group myResourceGroup \
       --cluster-name myAKSCluster \
       --name gpunp \
       --node-count 1 \
       --os-type Windows \
       --kubernetes-version 1.29.0 \
       --node-vm-size Standard_NC6s_v3
    
  2. Compruebe que las GPU son programables.

  3. Una vez que confirme que sus GPU son susceptibles de ser programadas, puede ejecutar su carga de trabajo de GPU.

Especificar el tipo de controlador de GPU (versión preliminar)

De forma predeterminada, AKS especifica un tipo de controlador de GPU predeterminado para cada máquina virtual compatible con GPU habilitada. Dado que la compatibilidad de cargas de trabajo y controladores es importante para las cargas de trabajo de GPU funcionales, puede especificar el tipo de controlador para el nodo de GPU de Windows. Esta característica no se admite para grupos de nodos de GPU de Linux.

Al crear un grupo de agentes de Windows con compatibilidad con GPU, tiene la opción de especificar el tipo de controlador de GPU mediante la marca --driver-type.

Las opciones disponibles son:

  • GRID: para las aplicaciones que requieren compatibilidad con la virtualización.
  • CUDA: optimizado para tareas computacionales en aplicaciones de computación científica y de uso intensivo de datos.

Nota:

Al establecer la marca de --driver-type, asume la responsabilidad de asegurarse de que el tipo de controlador seleccionado sea compatible con el tamaño y la configuración específicos de la máquina virtual del grupo de nodos. Aunque AKS intenta validar la compatibilidad, hay escenarios en los que se puede producir un error en la creación del grupo de nodos debido a incompatibilidades entre el tipo de controlador especificado y la máquina virtual o el hardware subyacentes.

Para crear un grupo de nodos habilitado para GPU de Windows con un tipo de controlador de GPU específico, use el comando az aks nodepool add.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --os-type Windows \
    --kubernetes-version 1.29.0 \
    --node-vm-size Standard_NC6s_v3 \
    --driver-type GRID

Por ejemplo, el comando anterior crea un grupo de nodos habilitado para GPU mediante el tipo de controlador de GPU GRID. Al seleccionar este tipo de controlador, se anula el tipo de controlador predeterminado CUDA para las SKU de máquinas virtuales de la serie NC.

Uso de GPU de Windows con instalación manual del controlador

Al crear un grupo de nodos de Windows con tamaños de máquina virtual de la serie N (GPU de NVIDIA) en AKS, el controlador de GPU y el complemento de dispositivo DirectX de Kubernetes se instalan automáticamente. Para omitir esta instalación automática, siga estos pasos:

  1. Omita la instalación del controlador de GPU estableciendo la configuración --gpu-driver none en el tiempo de creación del grupo de nodos.
  2. Instalación manual del complemento de dispositivo DirectX de Kubernetes.

Omitir la instalación del controlador de GPU

AKS tiene habilitada, de forma predeterminada, la instalación automática del controlador de GPU. En algunos casos, como instalar sus propios controladores, es posible que desee omitir la instalación del controlador de GPU.

Nota:

El gpu-driver campo de API es una alternativa sugerida para los clientes que anteriormente usaban la etiqueta del --skip-gpu-driver-install grupo de nodos.

  • La etiqueta --skip-gpu-driver-install del grupo de nodos en AKS será retirada el 14 de agosto de 2025. Para conservar el comportamiento existente de omitir la instalación automática del controlador de GPU, actualice los grupos de nodos a la versión más reciente de la imagen de nodo y configure el campo --gpu-driver a none. Después del 14 de agosto de 2025, no podrá aprovisionar grupos de nodos habilitados para GPU de AKS con la --skip-gpu-driver-install etiqueta de grupo de nodos para omitir este comportamiento predeterminado. Para obtener más información, consulte skip-gpu-driver retirada de etiquetas.
  1. Cree un grupo de nodos mediante el comando y establezca el az aks nodepool add campo --gpu-driver de API en none para omitir la instalación automática del controlador de GPU.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --gpu-driver none
    

Nota:

Si el --node-vm-size que está usando aún no está incorporado en AKS, no puede usar GPU y el --gpu-driver campo no funciona.

Instalación manual del complemento de dispositivo DirectX de Kubernetes

Puede implementar un DaemonSet para el complemento de dispositivo DirectX de Kubernetes, que ejecuta un pod en cada nodo para proporcionar los controladores necesarios para las GPU.

  • Agregue un grupo de nodos a su clúster mediante el comando az aks nodepool add.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

Creación de un espacio de nombres e implementación del complemento de dispositivo DirectX de Kubernetes

  1. Cree un espacio de nombres mediante el comando kubectl create namespace.

    kubectl create namespace gpu-resources
    
  2. Cree un archivo denominado k8s-directx-device-plugin.yaml y pegue el siguiente manifiesto YAML proporcionado como parte del complemento de dispositivo NVIDIA para el proyecto de Kubernetes:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nvidia-device-plugin-daemonset
      namespace: gpu-resources
    spec:
      selector:
        matchLabels:
          name: nvidia-device-plugin-ds
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
          # reserves resources for critical add-on pods so that they can be rescheduled after
          # a failure.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/aks/aks-windows-gpu-device-plugin:0.0.17
            name: nvidia-device-plugin-ctr
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
    
  3. Cree el DaemonSet y confirme que el plugin de dispositivos NVIDIA se ha creado correctamente mediante el comando kubectl apply.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Ahora que instaló correctamente el complemento de dispositivo NVIDIA, puede comprobar que las GPU son programables.

Confirmación de que las GPU son programables

Después de crear el clúster, confirme que las GPUs son programables en Kubernetes.

  1. Enumere los nodos de su clúster mediante el comando kubectl get nodes.

    kubectl get nodes
    

    El resultado debería ser similar al ejemplo siguiente:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. Confirme que las GPU son programables mediante el comando kubectl describe node.

    kubectl describe node aks-gpunp-28993262-0
    

    En la sección Capacidad, la GPU debe aparecer como microsoft.com/directx: 1. El resultado debería ser similar al siguiente ejemplo reducido:

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

Limpieza de recursos

  • Elimine los objetos Kubernetes asociados que creó en este artículo mediante el comando kubectl delete job.

    kubectl delete jobs windows-gpu-workload
    

Pasos siguientes