Instalação do plug-in de dispositivo do Kubernetes para GPUs - 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.

Instalação do plug-in de dispositivo do Kubernetes para GPUs

Os plug-ins de dispositivos do Kubernetes têm sido o principal mecanismo para divulgar infraestruturas especializadas, como GPUs, interfaces de rede e adaptadores de rede, como recursos consumíveis para workloads do Kubernetes. Embora a alocação dinâmica de recursos (DRA, na sigla em inglês) seja apresentada como o futuro do gerenciamento de dispositivos no Kubernetes, a maioria dos fornecedores de infraestrutura especializada ainda está em estágios iniciais de suporte aos drivers da DRA. Atualmente, os plug-ins de dispositivos do Kubernetes continuam sendo uma abordagem amplamente disponível para o uso de GPUs em clusters do Kubernetes.

Considerações

  • Ao usar as AMIs do AL2023 otimizadas para o EKS com GPUs NVIDIA, é necessário instalar o plug-in de dispositivos da NVIDIA para Kubernetes. É possível instalar e gerenciar o plug-in de dispositivos da NVIDIA para Kubernetes com o Helm, qualquer ferramenta de Kubernetes de sua escolha ou o operador de GPU da NVIDIA.

  • As AMIs do Bottlerocket otimizadas para o EKS já incluem nativamente o plug-in de dispositivos da NVIDIA para Kubernetes; portanto, nenhuma instalação adicional é necessária ao usar essas AMIs do Bottlerocket otimizadas para o EKS com GPUs NVIDIA. Isso se aplica também ao uso de instâncias de GPU no modo automático do EKS.

  • Ao usar as AMIs do AL2023 ou do Bottlerocket otimizadas para o EKS com GPUs do AWS Inferentia ou Trainium, é necessário instalar o plug-in de dispositivos do Neuron para Kubernetes e, opcionalmente, instalar a extensão de agendador do Neuron para Kubernetes. Para obter mais informações, consulte a documentação do Neuron sobre execução no EKS.

Instalação do plug-in de dispositivos da NVIDIA para Kubernetes

O procedimento, apresentado a seguir, descreve como instalar o plug-in de dispositivos da NVIDIA para Kubernetes e executar um teste de exemplo em instâncias de GPU da NVIDIA.

Pré-requisitos

  • Cluster do EKS criado

  • Nós com GPUs da NVIDIA em execução no cluster usando a AMI do AL2023 otimizada para o EKS com a NVIDIA

  • O Helm foi instalado em seu ambiente de linha de comando. Consulte as Instruções de configuração do Helm.

Procedimento

  1. Adicione o repositório nvdp do chart do Helm.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. Atualize o repositório local do Helm para confirmar que você tem os gráficos mais recentes.

    helm repo update
  3. Obtenha a versão mais recente do plug-in de dispositivos da NVIDIA para Kubernetes.

    helm search repo nvdp --devel
    NAME CHART VERSION APP VERSION DESCRIPTION nvdp/gpu-feature-discovery 0.17.4 0.17.4 ... nvdp/nvidia-device-plugin 0.17.4 0.17.4 ...
  4. Instale o plug-in de dispositivos da NVIDIA para Kubernetes no cluster, substituindo a versão 0.17.4 pela versão mais recente obtida no comando anterior.

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --version 0.17.4 \ --set gfd.enabled=true
  5. Verifique se o plug-in de dispositivos da NVIDIA para Kubernetes está em execução no cluster. A saída, apresentada a seguir, exibe o resultado para um cluster com dois nós.

    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> 11m
  6. Verifique se seus nós têm GPUs alocáveis com o comando apresentado a seguir.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
    NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
  7. Crie um arquivo denominado nvidia-smi.yaml com os conteúdos a seguir. Este manifesto inicia uma imagem de contêiner do AL2023 mínima que executa o nvidia-smi em um nó.

    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'
  8. Aplique o manifesto com o comando a seguir.

    kubectl apply -f nvidia-smi.yaml
  9. Após o pod concluir a execução, visualize os logs com o comando a seguir.

    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 | +-----------------------------------------------------------------------------------------+

Instalação do plug-in de dispositivos do Neuron para Kubernetes

O procedimento, apresentado a seguir, descreve como instalar o plug-in de dispositivos do Neuron para Kubernetes e executar um teste de exemplo em uma instância do Inferentia.

Pré-requisitos

  • Cluster do EKS criado

  • Nós com GPUs do Neuron em execução no cluster usando a AMI do AL2023 otimizada para o EKS com o Neuron ou a AMI do Bottlerocket

  • O Helm foi instalado em seu ambiente de linha de comando. Consulte as Instruções de configuração do Helm.

Procedimento

  1. Instale o plug-in de dispositivos do Neuron para Kubernetes no cluster.

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. Verifique se o plug-in de dispositivos do Neuron para Kubernetes está em execução no cluster. A saída, apresentada a seguir, exibe o resultado para um cluster com um único nó do Neuron.

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 72s
  3. Verifique se seus nós têm NueronCores alocáveis com o comando apresentado a seguir.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"
    NAME NeuronCore ip-192-168-47-173.us-west-2.compute.internal 2
  4. Verifique se seus nós têm NueronDevices alocáveis com o comando apresentado a seguir.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron"
    NAME NeuronDevice ip-192-168-47-173.us-west-2.compute.internal 1
  5. Crie um arquivo denominado neuron-ls.yaml com os conteúdos a seguir. Este manifesto executa um contêiner do Neuron Monitor com a ferramenta neuron-ls instalada.

    apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule"
  6. Aplique o manifesto com o comando a seguir.

    kubectl apply -f neuron-ls.yaml
  7. Após o pod concluir a execução, visualize os logs com o comando a seguir.

    kubectl logs neuron-ls

    Um exemplo de saída está abaixo.

    instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+