Este documento explica como configurar a sua infraestrutura do Google Kubernetes Engine (GKE) para suportar a atribuição dinâmica de recursos (DRA). Os passos de configuração incluem a criação de pools de nós que usam GPUs ou TPUs e a instalação de controladores DRA no cluster. Este documento destina-se aos administradores de plataformas que querem reduzir a complexidade e a sobrecarga da configuração de infraestruturas com dispositivos de hardware especializados.
Limitações
- A administração de contas automática de nós não é suportada.
- Os clusters do Autopilot não suportam o DRA.
- A instalação automática de controladores de GPU não é suportada com o DRA.
- Não pode usar as seguintes funcionalidades de partilha de GPU:
- GPUs de partilha de tempo
- GPUs de várias instâncias
- Serviço multiprocessos (MPS)
- Para as TPUs, tem de ativar as versões
v1beta1ev1beta2dos tipos de API DRA. Esta limitação não se aplica às GPUs, que podem usar versões da APIv1.
Requisitos
Para usar o DRA, o cluster do GKE tem de executar a versão 1.34 ou posterior.
Também deve estar familiarizado com os seguintes requisitos e limitações, consoante o tipo de hardware que quer usar:
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize a
CLI gcloud. Se instalou anteriormente a CLI gcloud, execute o comando
gcloud components updatepara obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.
Ter um cluster padrão do GKE com a versão 1.34 ou posterior. Também pode criar um cluster regional.
Se não estiver a usar o Cloud Shell, instale a CLI Helm:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shPara usar a DRA para as TPUs, ative as versões
v1beta1ev1beta2dos tipos de APIs DRA:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices,resource.k8s.io/v1beta2/deviceclasses,resource.k8s.io/v1beta2/resourceclaims,resource.k8s.io/v1beta2/resourceclaimtemplates,resource.k8s.io/v1beta2/resourceslices"
Crie um node pool do GKE com GPUs ou TPUs
No GKE, pode usar a DRA com GPUs e TPUs. As definições de configuração do conjunto de nós, como o tipo de máquina, o tipo de acelerador, a quantidade, o sistema operativo do nó e as localizações dos nós, dependem dos seus requisitos. Para criar um conjunto de nós que suporte DRA, selecione uma das seguintes opções:
GPU
Para usar a DRA para GPUs, tem de fazer o seguinte quando criar o conjunto de nós:
- Desative a instalação automática do controlador da GPU especificando a opção
gpu-driver-version=disabledna flag--acceleratorquando configurar GPUs para um conjunto de nós. - Desative o plug-in do dispositivo GPU adicionando a etiqueta do nó
gke-no-default-nvidia-gpu-device-plugin=true. - Permita que o DaemonSet do controlador DRA seja executado nos nós adicionando a
nvidia.com/gpu.present=trueetiqueta do nó.
Para criar um conjunto de nós de GPU para DRA, siga estes passos:
Crie um node pool com o hardware necessário. O exemplo seguinte cria um conjunto de nós que tem uma instância
g2-standard-24no SO otimizado para contentores com duas GPUs L4.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --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 o seguinte:
NODEPOOL_NAME: o nome do seu node pool.CLUSTER_NAME: o nome do seu cluster.CONTROL_PLANE_LOCATION: a região ou a zona do painel de controlo do cluster, comous-central1ouus-central1-a.
Instale manualmente os controladores nos nós do SO otimizado para contentores ou do Ubuntu. Para obter instruções detalhadas, consulte o artigo Instale manualmente os controladores da GPU NVIDIA.
TPU
Para usar a DRA para as TPUs, tem de desativar o plug-in do dispositivo TPU adicionando a etiqueta do nó gke-no-default-tpu-device-plugin=true. O exemplo seguinte
cria um conjunto de nós da TPU Trillium com suporte de DRA:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--location=CONTROL_PLANE_LOCATION \
--node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
--machine-type=ct6e-standard-8t
Substitua o seguinte:
NODEPOOL_NAME: o nome do seu node pool.CLUSTER_NAME: o nome do seu cluster.CONTROL_PLANE_LOCATION: a região ou a zona do painel de controlo do cluster, comous-central1ouus-central1-a.
Instale controladores DRA
GPU
Extraia e atualize o gráfico Helm que contém o controlador NVIDIA DRA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstale o controlador NVIDIA DRA com a versão
25.3.2:helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.3.2" --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, use o caminho do diretório
nvidiaDriverRoot="/opt/nvidia".
TPU
Clone o repositório
ai-on-gkepara aceder aos gráficos Helm que contêm os controladores DRA para GPUs e TPUs:git clone https://github.com/ai-on-gke/common-infra.gitNavegue para o diretório que contém os gráficos:
cd common-infra/common/chartsInstale o controlador DRA da TPU:
./tpu-dra-driver/install-tpu-dra-driver.sh
Verifique se a sua infraestrutura está pronta para a DRA
Para verificar se os pods do controlador DRA estão em execução, selecione uma das seguintes opções:
GPU
kubectl get pods -n nvidia-dra-driver-gpuO resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sTPU
kubectl get pods -n tpu-dra-driverO resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30sConfirme se a página
ResourceSliceapresenta os dispositivos de hardware que adicionou:kubectl get resourceslices -o yamlSe usou o exemplo na secção anterior, o resultado é semelhante ao seguinte, consoante tenha configurado GPUs ou TPUs:
GPU
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: ""TPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1beta1 kind: ResourceSlice metadata: # lines omitted for clarity spec: devices: - basic: attributes: index: int: 0 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "0" - basic: attributes: index: int: 1 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "1" - basic: attributes: index: int: 2 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "2" - basic: attributes: index: int: 3 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "3" driver: tpu.google.com nodeName: gke-tpu-b4d4b61b-fwbg pool: generation: 1 name: gke-tpu-b4d4b61b-fwbg resourceSliceCount: 1 kind: List metadata: resourceVersion: ""