Ayude a mejorar esta página
Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.
Administración de dispositivos GPU NVIDIA en Amazon EKS
Las GPU NVIDIA se utilizan ampliamente para el entrenamiento de machine learning, la inferencia y las cargas de trabajo informáticas de alto rendimiento. Amazon EKS admite dos mecanismos para administrar los dispositivos de GPU NVIDIA en los clústeres de EKS: el controlador de DRA de NVIDIA para las GPU y el complemento para dispositivos de Kubernetes de NVIDIA.
Se recomienda utilizar el controlador de DRA de NVIDIA para las nuevas implementaciones en clústeres que ejecuten la versión 1.34 o posterior de Kubernetes con grupos de nodos administrados o grupos de nodos autoadministrados de EKS. El controlador de DRA de NVIDIA permite la asignación flexible de la GPU y el uso compartido de la GPU entre contenedores.
El controlador de DRA de NVIDIA no es compatible con el modo automático de EKS o Karpenter. Utilice el complemento de dispositivo NVIDIA con Karpenter y el modo automático de EKS. El complemento de dispositivo NVIDIA también es compatible con los grupos de nodos administrados y los nodos autoadministrados de EKS.
El controlador de DRA de NVIDIA frente al complemento para dispositivos de NVIDIA
| Funcionalidad | Controlador de DRA de NVIDIA | Complemento para dispositivos de NVIDIA |
|---|---|---|
|
Versión mínima de Kubernetes |
1.34 |
Todas las versiones de Kubernetes compatible con EKS |
|
Computación de EKS |
Grupos de nodos administrados, nodos autoadministrados |
Modo automático de EKS, Karpenter, grupos de nodos administrados, nodos autoadministrados |
|
AMI optimizadas para EKS |
AL2023 (NVIDIA) |
AL2023 (NVIDIA), Bottlerocket |
|
Anuncio de dispositivo |
Numerosos atributos a través de objetos |
Recuento de enteros de recursos ampliados de |
|
Uso compartido de GPU |
Varios contenedores del mismo pod pueden compartir una GPU a través de referencias |
No admitido. Cada GPU se asigna exclusivamente a un contenedor. |
|
ComputeDomains |
Administra el NVLink de varios nodos (MNNVL) mediante recursos |
No admitido |
|
Selección basada en atributos |
Filtra las GPU por modelo, memoria u otros atributos mediante expresiones CEL |
No admitido |
|
Asignación de EFA con reconocimiento de topología |
Reconocimiento de la topología nativa de DRA |
Reconocimiento automático de la topología (solo AMI AL2023 optimizadas para EKS) |
Instalación del controlador de DRA de NVIDIA
El controlador de DRA de NVIDIA para las GPU administra dos tipos de recursos: las GPU y los ComputeDomains. Ejecuta dos complementos kubelet de DRA: gpu-kubelet-plugin y compute-domain-kubelet-plugin. Cada uno se puede habilitar o deshabilitar por separado durante la instalación. Esta guía se centra en la asignación de GPU. Para usar ComputeDomains, consulte Uso de UltraServers P6e-GB200 con Amazon EKS.
Requisitos previos
-
Un clúster de Amazon EKS que ejecuta la versión 1.34 o posterior de Kubernetes o grupos de nodos administrados o grupos de nodos autoadministrados de EKS.
-
Nodos con tipos de instancias de GPU de NVIDIA (como instancias
PoG). -
Nodos con componentes de nivel de host instalados para las GPU NVIDIA. Si utiliza las AMI de NVIDIA de AL2023 o Bottlerocket optimizadas para EKS, vienen preinstalados el controlador de NVIDIA de nivel de host, el controlador de modo de usuario de CUDA y el kit de herramientas de contenedor.
-
Si tiene Helm instalado en su entorno de línea de comandos, consulte las instrucciones de configuración de Helm para obtener más información.
-
kubectlconfigurado para comunicarse con su clúster. Consulte Instalación o actualización de kubectl para obtener más información.
Procedimiento
importante
Cuando se utiliza el controlador de DRA de NVIDIA para la administración de dispositivos de GPU, no se puede implementar junto con el complemento para dispositivos de NVIDIA en el mismo nodo. Consulte KEP-5004
importante
Actualmente, no se admite el uso del controlador de DRA de NVIDIA con Bottlerocket.
-
Agregue el repositorio de gráficos de Helm del controlador de DRA de NVIDIA.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia -
Actualice el repositorio de Helm local.
helm repo update -
Obtenga la versión más reciente del controlador de DRA de NVIDIA.
helm search repo nvidia/nvidia-dra -
Instale el controlador de DRA de NVIDIA.
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ --set resources.computeDomains.enabled=false \ --set 'gpuResourcesEnabledOverride=true'Para ver las opciones de configuración avanzadas, consulte el gráfico de Helm del controlador de DRA de NVIDIA
. -
Compruebe que se están ejecutando los pods del controlador de DRA.
kubectl get pods -n nvidia-dra-driver-gpu -
Compruebe que se hayan creado los objetos
DeviceClass.kubectl get deviceclassNAME AGE gpu.nvidia.com 60s -
Compruebe que los objetos
ResourceSliceestén publicados para los nodos de la GPU.kubectl get resourceslicePara solicitar GPU NVIDIA mediante el controlador de DRA, cree un
ResourceClaimTemplateque haga referencia algpu.nvidia.comDeviceClassy haga referencia a él en la especificación del pod. En el siguiente ejemplo, se solicita una sola GPU. Consulte Asignación de dispositivos GPU/Neuron y EFA según la topología para ver los pasos para asignar las GPU NVIDIA con interfaces EFA alineadas con la topología.apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-gpu spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: gpu-workload spec: containers: - name: app ... resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"
Instalación del complemento para dispositivos de Kubernetes de NVIDIA
El complemento para dispositivos de Kubernetes de NVIDIA anuncia las GPU NVIDIA como recursos ampliados de nvidia.com/gpu. Las GPU se solicitan en límites y solicitudes de recursos de contenedores.
Requisitos previos
-
Un clúster de Amazon EKS.
-
Nodos con tipos de instancia de GPU NVIDIA con la AMI de NVIDIA de AL2023 optimizada para EKS. Las AMI de Bottlerocket optimizadas para EKS incluyen el complemento para dispositivos NVIDIA y no es necesaria una instalación independiente.
-
Si tiene Helm instalado en su entorno de línea de comandos, consulte las instrucciones de configuración de Helm para obtener más información.
-
kubectlconfigurado para comunicarse con su clúster. Consulte Instalación o actualización de kubectl para obtener más información.
Procedimiento
-
Agregue el repositorio de gráficos de Helm, complemento para dispositivos de NVIDIA.
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin -
Actualice el repositorio de Helm local.
helm repo update -
Instale el complemento para dispositivos de Kubernetes de NVIDIA.
helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=trueDesactivación de MOFED en los nodos con dispositivos EFA
A partir de la versión 0.19.0 de
k8s-device-plugin, el indicador--mofed-enabledse establece de forma predeterminada entrue. Esto hace que el complemento de dispositivo de NVIDIA monte todos los dispositivos/dev/infiniband/uverbs*en contenedores que solicitan GPU (nvidia.com/gpu). Esto entra en conflicto con el complemento AWS de dispositivo EFA, que gestiona el montaje de los dispositivosuverbs. Las cargas de trabajo que solicitan menos dispositivos EFA de un nodo se ven afectadas porque el complemento de dispositivo de NVIDIA reclama todos los dispositivosuverbsde forma predeterminada.Si sus nodos tienen dispositivos EFA, desactive MOFED de forma explícita al instalar el complemento de dispositivo de NVIDIA:
helm upgrade --install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true \ --set mofedEnabled=falseSi administra el complemento del dispositivo NVIDIA a través del operador de GPU de NVIDIA
, desactive MOFED mediante el campo devicePlugin.env:helm upgrade --install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --set 'devicePlugin.env[0].name=MOFED_ENABLED' \ --set 'devicePlugin.env[0].value=false'Para obtener más información, consulte Problema núm. 1692 de k8s-device-plugin de NVIDIA
. nota
También puede instalar y administrar el complemento para dispositivos de Kubernetes de NVIDIA mediante el operador de GPU NVIDIA
, que automatiza la administración de todos los componentes de software de NVIDIA necesarios para aprovisionar las GPU. -
Compruebe que el DaemonSet del complemento para dispositivos NVIDIA esté en ejecución.
kubectl get ds -n nvidia nvdp-nvidia-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s -
Compruebe que los nodos tengan GPU asignables.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"Un ejemplo de salida sería el siguiente.
NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
Solicitud de las GPU NVIDIA en un pod
Para solicitar GPU NVIDIA mediante el complemento para dispositivos, especifique el recurso nvidia.com/gpu en los límites y solicitudes de recursos del contenedor.
apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] resources: limits: nvidia.com/gpu: 1 requests: nvidia.com/gpu: 1 tolerations: - key: "nvidia.com/gpu" operator: "Equal" value: "true" effect: "NoSchedule"
Para ejecutar esta prueba, aplique el manifiesto y consulta los registros:
kubectl apply -f nvidia-smi.yaml kubectl logs nvidia-smi
Un ejemplo de salida sería el siguiente.
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+