Gerenciar dispositivos de GPU NVIDIA 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.

Gerenciar dispositivos de GPU NVIDIA no Amazon EKS

As GPUs da NVIDIA são amplamente utilizadas para treinamento de machine learning, inferência e workloads de computação de alta performance. 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.

Recomenda-se usar o driver NVIDIA DRA para novas implantações em clusters que executam o Kubernetes versão 1.34 ou posterior. O driver NVIDIA DRA permite a alocação flexível e o compartilhamento de GPU entre contêineres. O plug-in do dispositivo NVIDIA continua sendo compatível.

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

Karpenter e o Modo Automático do EKS

Não compatível

Compatível

AMIs otimizadas para o EKS

AL2023

AL2023, 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

Vários contêineres no mesmo Pod podem compartilhar uma GPU por meio de referências compartilhadas ResourceClaim

Sem compatibilidade. Cada GPU é alocada exclusivamente a um contêiner.

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

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.

Atualmente, o uso do driver NVIDIA DRA com o Bottlerocket não é compatível.

Pré-requisitos

  • Um cluster do Amazon EKS executando o Kubernetes versão 1.34 ou posterior.

  • 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 utilizar o driver NVIDIA DRA para o gerenciamento de dispositivos de GPU, a implantação dele não pode ser realizada junto com o plug-in de dispositivo NVIDIA no mesmo nó. Consulte o KEP-5004 do Kubernetes para obter atualizações.

  1. Adicione o repositório do chart do Helm do driver NVIDIA DRA.

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
  2. Atualize seu repositório Helm local.

    helm repo update
  3. Baixe a versão mais recente do driver NVIDIA DRA.

    helm search repo nvidia/nvidia-dra
  4. Instale o driver NVIDIA DRA.

    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 opções de configuração avançadas, consulte o chart do Helm do driver NVIDIA DRA.

  5. Verifique se os pods do driver DRA estão em execução.

    kubectl get pods -n nvidia-dra-driver-gpu
  6. Verifique se os objetos DeviceClass foram criados.

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

    kubectl get resourceslice

Solicitar GPUs NVIDIA em um Pod

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 a seguir solicita uma única 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"

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 que utilizam a AMI NVIDIA AL2023 otimizada para EKS. As AMIs Bottlerocket otimizadas para o EKS incluem o plug-in de dispositivo da NVIDIA, não sendo necessário nenhuma instalação separada.

  • 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 \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true
    nota

    Você também pode instalar e gerenciar o plug-in de dispositivo NVIDIA para Kubernetes usando o NVIDIA GPU Operator, 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 NVIDIA usando o plug-in de dispositivo, especifique o recurso nvidia.com/gpu nos limites de recursos do seu 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 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 | +-----------------------------------------------------------------------------------------+