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. El controlador de DRA de NVIDIA permite la asignación flexible de la GPU y el uso compartido de la GPU entre contenedores. El complemento para dispositivos NVIDIA sigue siendo compatible.
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 |
|
Karpenter y modo automático de EKS |
No admitido |
Compatible |
|
AMI optimizadas para EKS |
AL2023 |
AL2023, 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 |
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.
Actualmente, no se admite el uso del controlador de DRA de NVIDIA con Bottlerocket.
Requisitos previos
-
Un clúster de Amazon EKS que ejecuta la versión 1.34 de Kubernetes o una posterior.
-
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
-
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 resourceslice
Solicitud de las GPU NVIDIA en un pod
Para solicitar GPU NVIDIA mediante el controlador de DRA, cree un ResourceClaimTemplate que haga referencia al gpu.nvidia.com DeviceClass y haga referencia a él en la especificación del pod.
En el siguiente ejemplo, se solicita una sola GPU:
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=truenota
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 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 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 | +-----------------------------------------------------------------------------------------+