Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Usar o plug-in de dispositivo ou driver do NVIDIA DRA no Amazon EKS
O Amazon EKS oferece suporte a dois mecanismos para gerenciar dispositivos de GPU NVIDIA em seus clusters do EKS: o driver NVIDIA DRA para GPUs e o plug-in de dispositivo NVIDIA para Kubernetes.
Recomendamos usar o driver NVIDIA DRA para novas implantações com as versões 1.34 e posteriores do Kubernetes ao usar o provisionamento de capacidade estática
Se você estiver usando recursos de compartilhamento de GPU, como GPUs de várias instâncias (MIG) ou fatiamento de tempo, recomendamos usar a configuração estática com o driver DRA ou o plug-in de dispositivo da NVIDIA. O MIG dinâmico e o fatiamento de tempo estão no estado alfa no driver NVIDIA DRA. Consulte os lançamentos do driver NVIDIA DRA
Driver NVIDIA DRA x plug-in de dispositivo NVIDIA
| Recurso | Driver de DRA da NVIDIA | Plug-in de dispositivo NVIDIA |
|---|---|---|
|
Versão mínima do Kubernetes |
1.34 |
Todas as versões do Kubernetes compatíveis com o EKS |
|
Computação do EKS |
Karpenter (somente capacidade estática), grupos de nós gerenciados, nós autogerenciados |
Modo Automático do EKS, Karpenter, grupos de nós gerenciados e nós autogerenciados |
|
AMIs otimizadas para o EKS |
AL2023 (NVIDIA) e Bottlerocket |
AL2023 (NVIDIA) e Bottlerocket |
|
Anúncio de dispositivo |
Atributos detalhados por meio de objetos |
Contagem de inteiros de recursos estendidos |
|
Compartilhamento de GPU |
(Alfa) MIG dinâmico, MPS, fatiamento de tempo |
(GA) MIG estático, MPS, fatiamento de tempo |
|
ComputeDomains |
Gerencia o Multi-Node NVLink (MNNVL) por meio de recursos |
Não compatível |
|
Seleção baseada em atributos |
Filtre GPUs por modelo, memória ou outros atributos usando expressões CEL |
Não compatível |
|
Alocação de EFA com reconhecimento de topologia |
Reconhecimento de topologia nativo de DRA |
Reconhecimento de topologia automático (apenas AMIs AL2023 otimizadas para o EKS) |
Instale o driver NVIDIA DRA
O driver NVIDIA DRA para GPUs gerencia dois tipos de recursos: GPUs e ComputeDomains. Ele executa dois plug-ins DRA kubelet: gpu-kubelet-plugin e compute-domain-kubelet-plugin. Cada uma delas pode ser habilitada ou desabilitada separadamente durante a instalação. Este guia aborda a alocação de GPUs. Para saber como usar o ComputeDomains, consulte Uso do P6e-GB200 UltraServers com o Amazon EKS.
Pré-requisitos
-
Um cluster do Amazon EKS que executa a versão 1.34 ou posterior do Kubernetes com capacidade estática provisionada pelo Karpenter, grupos de nós gerenciados pelo EKS ou grupos de nós autogerenciados.
-
Nós com tipos de instância de GPU NVIDIA (como instâncias
PouG). -
Nós com componentes de nível de host instalados para GPUs NVIDIA. Ao utilizar as AMIs NVIDIA AL2023 ou Bottlerocket otimizadas para EKS, o driver NVIDIA no nível do host, o driver CUDA em modo de usuário e o kit de ferramentas para contêineres já vêm pré-instalados.
-
O Helm instalado em seu ambiente de linha de comando. Consulte as Instruções de configuração do Helm para obter mais informações.
-
kubectlconfigurado para se comunicar com o seu cluster; consulte Instalar ou atualizar o kubectl para obter mais informações.
Procedimento
Importante
Ao usar o driver NVIDIA DRA para o gerenciamento de dispositivos de GPU, não o implante junto com o plug-in de dispositivo da NVIDIA no mesmo nó. Fazer isso pode causar o excesso de alocação silencioso dos dispositivos subjacentes para múltiplos pods no mesmo nó.
Desabilitar o plug-in do dispositivo integrado da NVIDIA no Bottlerocket
As variantes NVIDIA do Bottlerocket otimizadas para EKS incluem o plug-in de dispositivo da NVIDIA e o mantêm habilitado por padrão. O driver DRA não pode ser executado junto com o plug-in do dispositivo no mesmo nó. Antes de usar o driver DRA, desabilite o plug-in do dispositivo integrado nos nós de GPU do Bottlerocket. Defina settings.kubelet-device-plugins.nvidia.enabled como false nos dados do usuário do nó do Bottlerocket.
[settings.kubelet-device-plugins.nvidia] enabled = false
A configuração settings.kubelet-device-plugins.nvidia.enabled está disponível na versão 1.63.0 e posterior do Bottlerocket. Nas versões anteriores, o plug-in de dispositivo integrado da NVIDIA não podia ser desabilitado. Para obter mais informações, consulte bottlerocket-os/bottlerocket pull request #4856
-
Instale o driver NVIDIA DRA diretamente do registro OCI do Kubernetes SIG. Para encontrar as versões disponíveis, consulte os lançamentos do driver NVIDIA DRA
no GitHub. helm install dra-driver-nvidia-gpu \ oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu \ --version0.4.1\ --create-namespace \ --namespace nvidia \ --set resources.computeDomains.enabled=false \ --set gpuResourcesEnabledOverride=truePara opções de configuração avançadas, consulte os valores do chart do Helm do driver NVIDIA DRA
no site do Kubernetes SIG. Para ver os valores disponíveis para uma versão específica do gráfico, execute helm show values oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu --version 0.4.1. -
(Opcional) Para usar o fatiamento de tempo por meio do driver DRA, adicione o feature gate
TimeSlicingSettingsao comandohelm installna etapa anterior. Por padrão, esse recurso alfa está desabilitado. Para obter mais informações, consulte Usar o fatiamento de tempo da GPU com o driver NVIDIA DRA.--set featureGates.TimeSlicingSettings=true -
(Opcional) Para usar o MIG dinâmico por meio do driver DRA, adicione o feature gate
DynamicMIGao comandohelm installna etapa anterior. Por padrão, esse recurso alfa está desabilitado. Você não pode combinar o feature gateDynamicMIGcom os feature gatesPassthroughSupport,NVMLDeviceHealthCheckouMPSSupport. Para obter mais informações, consulte Usar o MIG com o driver NVIDIA DRA.--set featureGates.DynamicMIG=true -
Verifique se os pods do driver DRA estão em execução.
kubectl get pods -n nvidia -
Verifique se os objetos
DeviceClassforam criados.kubectl get deviceclassNAME AGE gpu.nvidia.com 60s -
Verifique se os objetos
ResourceSliceforam publicados para seus nós de GPU.kubectl get resourceslicePara solicitar GPUs NVIDIA usando o driver DRA, crie um
ResourceClaimTemplateque faça referência agpu.nvidia.comDeviceClasse inclua-o na especificação do seu Pod. O exemplo apresentado a seguir solicita uma única GPU. Consulte Alocação de dispositivos EFA com GPU e dispositivos do Neuron com reconhecimento de topologia para obter as etapas necessárias para a alocação de GPUs da NVIDIA com interfaces EFA alinhadas à topologia.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: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"
Instalar o plug-in de dispositivo NVIDIA para Kubernetes
O plug-in de dispositivo NVIDIA para Kubernetes disponibiliza as GPUs NVIDIA como recursos estendidos nvidia.com/gpu. Você solicita GPUs nas solicitações e limites de recursos de contêineres.
Pré-requisitos
-
Um cluster do Amazon EKS.
-
Nós com tipos de instância de GPU NVIDIA (como instâncias
PouG). -
Nós com tipos de instância de GPU NVIDIA que utilizam a AMI NVIDIA AL2023 otimizada para EKS. As AMIs Bottlerocket otimizadas para EKS incluem o plug-in de dispositivo da NVIDIA. Você não precisa instalá-lo separadamente.
-
Nós com componentes de nível de host instalados para GPUs NVIDIA. Ao utilizar as AMIs NVIDIA AL2023 ou Bottlerocket otimizadas para EKS, o driver NVIDIA no nível do host, o driver CUDA em modo de usuário e o kit de ferramentas para contêineres já vêm pré-instalados.
-
O Helm instalado em seu ambiente de linha de comando. Consulte as Instruções de configuração do Helm para obter mais informações.
-
kubectlconfigurado para se comunicar com o seu cluster; consulte Instalar ou atualizar o kubectl para obter mais informações.
Procedimento
-
Adicione o repositório do chart do Helm do plug-in de dispositivo NVIDIA.
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin -
Atualize seu repositório Helm local.
helm repo update -
Instale o plug-in de dispositivo NVIDIA para Kubernetes.
helm install nvdp nvdp/nvidia-device-plugin \ --create-namespace \ --namespace nvidiaOpcional: habilitar o GPU Feature Discovery (GFD)
O plug-in de dispositivo anuncia recursos estendidos
nvidia.com/gpue agenda pods de GPU sozinho. Na AMI NVIDIA AL2023 otimizada para EKS, o rótulo de nónvidia.com/gpu.present=truejá é aplicado na inicialização pornodeadm, portanto, o GPU Feature Discovery (GFD) não é necessário para o agendamento básico de GPU.Habilite o GFD com
--set gfd.enabled=truese quiser que o nó seja rotulado com atributos detalhados da GPU, comonvidia.com/gpu.product,nvidia.com/gpu.memory,nvidia.com/gpu.count, rótulos de perfil do MIG e versões de driver/CUDA. Com esses rótulos, você pode segmentar tipos específicos de GPU comnodeSelectorou afinidade de nós (por exemplo, agendar uma workload somente em GPUs A10G ou em um perfil específico do MIG). As configurações de compartilhamento de GPU, como fatiamento de tempo e MIG, também usam esses rótulos. Se você não precisar de seleção de nós com base em atributos ou compartilhamento de GPU, poderá omitir a sinalização.helm install nvdp nvdp/nvidia-device-plugin \ --create-namespace \ --namespace nvidia \ --set gfd.enabled=trueHabilitar o GDRCopy se suas workloads o usarem
As versões v0.19.0 a v0.19.2 de
k8s-device-pluginhabilitaram os recursos GDRCopy e MOFED por padrão. Essa habilitação padrão foi revertida na v0.19.3 dek8s-device-plugin. Como resultado da reversão, o GDRCopy (gdrdrv) não pode mais ser habilitado por contêiner com a variável de ambienteNVIDIA_GDRCOPY=enabledem uma especificação do pod. Essa variável agora é ignorada.Se suas workloads usam o GDRCopy (cópia RDMA do GPUDirect), você deve habilitá-lo no plug-in de dispositivo no momento da instalação, definindo
gdrcopyEnabled=true:helm upgrade --install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gdrcopyEnabled=true(Adicione
--set gfd.enabled=truese você também quiser rótulos de descoberta de recursos de GPU, conforme descrito anteriormente.)Se você gerencia o plug-in de dispositivo da NVIDIA por meio do NVIDIA GPU Operator
no GitHub, o operador define dinamicamente GDRCOPY_ENABLED=truequando o módulo do kernelgdrdrvé carregado no nó.Para obter mais informações, consulte NVIDIA k8s-device-plugin issue #1692
no GitHub. nota
Você também pode instalar e gerenciar o plug-in de dispositivo da NVIDIA para Kubernetes usando o NVIDIA GPU Operator
no GitHub, que automatiza o gerenciamento de todos os componentes de software da NVIDIA necessários para provisionar GPUs. -
Verifique se o DaemonSet do plug-in do dispositivo NVIDIA está em execução.
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 -
Verifique se os seus nós possuem GPUs alocáveis.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"Veja abaixo um exemplo de saída.
NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
Solicitar GPUs NVIDIA em um Pod
Para solicitar GPUs da NVIDIA usando o plug-in de dispositivo, especifique o recurso nvidia.com/gpu em suas solicitações e limites de recursos do contêiner.
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 executar este teste, aplique o manifesto e visualize os logs:
kubectl apply -f nvidia-smi.yaml kubectl logs nvidia-smi
Veja abaixo um exemplo de saída.
+-----------------------------------------------------------------------------------------+ | 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 | +-----------------------------------------------------------------------------------------+