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).
Para ver las máquinas virtuales habilitadas para GPU compatibles, 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 una mayor disponibilidad de precios y región. Para obtener más información, consulte la herramienta de precios y la disponibilidad de regiones.
- 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.
- 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 1.0.0b2 de la CLI de Azure o posterior instalada y configurada para usar el
--skip-gpu-driver-install
campo con el comandoaz aks nodepool add
. Ejecuteaz --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. - Necesita la versión 9.0.0b5 de la CLI de Azure o posterior instalada y configurada para usar el
--driver-type
campo con el comandoaz aks nodepool add
. Ejecuteaz --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
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
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 características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. 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:
Registre o actualice la extensión aks-preview mediante el comando
az extension add
oaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registre la marca de características de
WindowsGPUPreview
mediante el comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Tarda unos minutos en que el estado muestre Registrado.
Comprobar el estado del registro mediante el comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
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
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 os-sku
Windows.
Cree un grupo de nodos habilitados para GPU de Windows 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 \ --kubernetes-version 1.29.0 \ --node-vm-size Standard_NC6s_v3
Compruebe que las GPU son programables.
Una vez que confirme que las GPU son programables, puede ejecutar la carga de trabajo de GPU.
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 invalida el valor predeterminado de tipo de controlador CUDA
para las SKU de máquina virtual de la serie NC.
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:
- Omitir la instalación del controlador de GPU (versión preliminar) mediante
--skip-gpu-driver-install
. - Instalación manual del complemento de dispositivo DirectX de Kubernetes.
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.
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. 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:
Registre o actualice la extensión aks-preview mediante el comando
az extension add
oaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Cree un grupo de nodos mediante el comando
az aks nodepool add
con la marca--skip-gpu-driver-install
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 \ --skip-gpu-driver-install
Nota
Si el --node-vm-size
que está usando aún no está incorporado en AKS, no puede usar GPU y --skip-gpu-driver-install
no funciona.
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
Cree un espacio de nombres mediante el comando
kubectl create namespace
.kubectl create namespace gpu-resources
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/oss/nvidia/k8s-device-plugin:v0.14.1 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
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
Ahora que instaló correctamente el complemento de dispositivo NVIDIA, puede comprobar que las GPU son programables.
Después de crear el clúster, confirme que las GPUs son programables en Kubernetes.
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
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 [...]
Container Insights con AKS supervisa las siguientes métricas de uso de la GPU:
Nombre de métrica | Dimensión de métrica (etiquetas) | Descripción |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Porcentaje de tiempo del período de muestra anterior (60 segundos) durante el cual la GPU estuvo ocupada o realizando un procesamiento activo para un contenedor. El ciclo de servicio es un número comprendido entre 1 y 100. |
containerGpuLimits | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Cada contenedor puede especificar límites para una o varias GPU. No es posible solicitar ni limitar una fracción de una GPU. |
containerGpuRequests | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName |
Cada contenedor puede solicitar una o varias GPU. No es posible solicitar ni limitar una fracción de una GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Cantidad de memoria de GPU en bytes disponible para su uso en un contenedor específico. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , gpuModel , gpuVendor |
Cantidad de memoria de GPU en bytes que usa un contenedor específico. |
nodeGpuAllocatable | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Número de GPU en un nodo que Kubernetes puede usar. |
nodeGpuCapacity | container.azm.ms/clusterId , container.azm.ms/clusterName , gpuVendor |
Número total de GPU en un nodo. |
Elimine los objetos Kubernetes asociados que creó en este artículo mediante el comando
kubectl delete job
.kubectl delete jobs windows-gpu-workload
- Para ejecutar trabajos de Apache Spark, consulte Ejecución de trabajos de Apache Spark en AKS.
- A fin de obtener más información sobre las características del programador de Kubernetes, vea Procedimientos recomendados para las características avanzadas del programador en AKS.
- Para más información sobre Azure Kubernetes Service y Azure Machine Learning, consulte:
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: