View a markdown version of this page

Usar o plug-in de dispositivo ou driver do NVIDIA DRA no Amazon EKS - Amazon EKS

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 no Karpenter, grupos de nós gerenciados pelo EKS ou nós autogerenciados. No momento, o driver NVIDIA DRA não é compatível com o Modo Automático do EKS. Use o plug-in de dispositivo da NVIDIA com o Modo Automático do EKS ou com o Karpenter ao usar o provisionamento dinâmico de capacidade. Além disso, o plug-in de dispositivo da NVIDIA permanece compatível com grupos de nós gerenciados pelo EKS e com nós autogerenciados.

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 no GitHub para obter as atualizações mais recentes.

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 ResourceSlice, incluindo modelo da GPU, memória, versão do driver e topologia

Contagem de inteiros de recursos estendidos nvidia.com/gpu

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 ComputeDomain para uma comunicação segura entre GPUs em vários nós

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 P ou G).

  • 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.

  • kubectl configurado 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 no GitHub.

  1. 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 \ --version 0.4.1 \ --create-namespace \ --namespace nvidia \ --set resources.computeDomains.enabled=false \ --set gpuResourcesEnabledOverride=true

    Para 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.

  2. (Opcional) Para usar o fatiamento de tempo por meio do driver DRA, adicione o feature gate TimeSlicingSettings ao comando helm install na 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
  3. (Opcional) Para usar o MIG dinâmico por meio do driver DRA, adicione o feature gate DynamicMIG ao comando helm install na etapa anterior. Por padrão, esse recurso alfa está desabilitado. Você não pode combinar o feature gate DynamicMIG com os feature gates PassthroughSupport, NVMLDeviceHealthCheck ou MPSSupport. Para obter mais informações, consulte Usar o MIG com o driver NVIDIA DRA.

    --set featureGates.DynamicMIG=true
  4. Verifique se os pods do driver DRA estão em execução.

    kubectl get pods -n nvidia
  5. Verifique se os objetos DeviceClass foram criados.

    kubectl get deviceclass
    NAME AGE gpu.nvidia.com 60s
  6. Verifique se os objetos ResourceSlice foram publicados para seus nós de GPU.

    kubectl get resourceslice

    Para solicitar GPUs NVIDIA usando o driver DRA, crie um ResourceClaimTemplate que faça referência a gpu.nvidia.com DeviceClass e 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 P ou G).

  • 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.

  • kubectl configurado para se comunicar com o seu cluster; consulte Instalar ou atualizar o kubectl para obter mais informações.

Procedimento

  1. 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
  2. Atualize seu repositório Helm local.

    helm repo update
  3. Instale o plug-in de dispositivo NVIDIA para Kubernetes.

    helm install nvdp nvdp/nvidia-device-plugin \ --create-namespace \ --namespace nvidia
    Opcional: habilitar o GPU Feature Discovery (GFD)

    O plug-in de dispositivo anuncia recursos estendidos nvidia.com/gpu e agenda pods de GPU sozinho. Na AMI NVIDIA AL2023 otimizada para EKS, o rótulo de nó nvidia.com/gpu.present=true já é aplicado na inicialização por nodeadm, portanto, o GPU Feature Discovery (GFD) não é necessário para o agendamento básico de GPU.

    Habilite o GFD com --set gfd.enabled=true se quiser que o nó seja rotulado com atributos detalhados da GPU, como nvidia.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 com nodeSelector ou 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=true
    Habilitar o GDRCopy se suas workloads o usarem

    As versões v0.19.0 a v0.19.2 de k8s-device-plugin habilitaram os recursos GDRCopy e MOFED por padrão. Essa habilitação padrão foi revertida na v0.19.3 de k8s-device-plugin. Como resultado da reversão, o GDRCopy (gdrdrv) não pode mais ser habilitado por contêiner com a variável de ambiente NVIDIA_GDRCOPY=enabled em 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=true se 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=true quando o módulo do kernel gdrdrv é 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.

  4. Verifique se o DaemonSet do plug-in do dispositivo NVIDIA está em execução.

    kubectl get ds -n nvidia nvdp-nvidia-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s
  5. 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 | +-----------------------------------------------------------------------------------------+