Este documento explica como configurar manualmente sua infraestrutura do Google Kubernetes Engine (GKE) para oferecer suporte à alocação dinâmica de recursos (DRA). As etapas de configuração incluem a criação de pools de nós que usam GPUs e a instalação de drivers DRA.
Este documento é destinado a administradores de plataforma que querem criar infraestrutura com dispositivos de hardware especializados que operadores de aplicativos podem reivindicar em cargas de trabalho.
Limitações
Considere as seguintes limitações:
- Limitações do DRA no GKE
- Limitações específicas do dispositivo, que se aplicam independente de você usar DRA: Cargas de trabalho de GPU em clusters Standard
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a gcloud CLI anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da gcloud CLI não sejam compatíveis com a execução dos comandos neste documento.
Ter um cluster do GKE Standard que execute a versão 1.35 ou mais recente. Também é possível criar um cluster regional.
Instale o Helm. Se você usa o Cloud Shell, o Helm já está instalado.
Criar um pool de nós do GKE com GPUs
Nesta seção, mostramos como criar um pool de nós de GPU e instalar os drivers DRA correspondentes. As etapas desta seção se aplicam apenas a pools de nós criados manualmente. Para criar um pool de nós de GPU que ofereça suporte ao DRA, faça o seguinte:
- Desativar a instalação automática do driver de GPU: especifique a
opção
gpu-driver-version=disabledna flag--accelerator. - Desative o plug-in de dispositivo GPU: adicione o rótulo de nó
gke-no-default-nvidia-gpu-device-plugin=trueao pool de nós. - Execute o DaemonSet do driver DRA: adicione o rótulo do nó
nvidia.com/gpu.present=trueao pool de nós. - Configurar o escalonamento automático: para usar o escalonador automático de cluster no pool de nós, adicione o rótulo do nó
cloud.google.com/gke-nvidia-gpu-dra-driver=trueao pool de nós. O escalonador automático de cluster usa esse rótulo de nó para identificar os nós que executam o driver DRA para GPUs.
Para criar e configurar pools de nós de GPU, siga estas etapas:
Crie um pool de nós de GPU. Os comandos de exemplo a seguir criam pools de nós com configurações diferentes:
Crie um pool de nós com uma instância
g2-standard-24que tenha duas GPUs L4:gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --machine-type="g2-standard-24" \ --accelerator="type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=trueSubstitua:
NODEPOOL_NAME: um nome para o pool de nós.CLUSTER_NAME: o nome do cluster.CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster, comous-central1ouus-central1-a.NODE_LOCATION1,NODE_LOCATION2,...: uma lista separada por vírgulas de zonas, na mesma região do plano de controle, para criar nós. Escolha zonas que tenham disponibilidade de GPU.
Crie um pool de nós com escalonamento automático com instâncias
a2-ultragpu-1gque tenham uma GPU NVIDIA A100 (80 GB) em cada instância:gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --enable-autoscaling \ --max-nodes=5 \ --machine-type="a2-ultragpu-1g" \ --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
Instalar drivers DRA
Extraia e atualize o gráfico do Helm que contém o driver NVIDIA DRA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstale o driver de GPU NVIDIA DRA com a versão 25.8.0 ou mais recente:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Para nós do Ubuntu, especifique o caminho do diretório
"/opt/nvidia"na flag--set nvidiaDriverRoot.
Verificar se sua infraestrutura está pronta para o DRA
Verifique se os pods de driver do DRA estão em execução:
kubectl get pods -n nvidia-dra-driver-gpuO resultado será o seguinte:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sConfirme se o ResourceSlice lista os dispositivos de hardware que você adicionou:
kubectl get resourceslices -o yamlO resultado será o seguinte:
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""