Este documento mostra como usar a rede automatizada para VMs com acelerador, como GPUs e TPUs, para simplificar a configuração de rede para cargas de trabalho com acelerador do Google Kubernetes Engine (GKE). Isto é essencial para executar inteligência artificial (IA), aprendizagem automática (AA) e computação de elevado desempenho (HPC) em máquinas otimizadas para aceleradores.
Este documento pressupõe familiaridade com os conceitos fundamentais do GKE, as cargas de trabalho de GPU e TPU, e a rede VPC. Em concreto, deve conhecer:
Esta página destina-se a arquitetos da nuvem e especialistas em redes que concebem e arquitetam a rede da respetiva organização. Para uma vista geral de todos os conjuntos de documentação do GKE, consulte o artigo Explore a documentação do GKE. Para saber mais sobre as funções comuns e as tarefas de exemplo referenciadas no Google Cloud conteúdo, consulte Funções e tarefas de utilizador comuns do GKE.
O GKE simplifica a execução de IA e ML de alto desempenho em aceleradores especializados. Com a rede automatizada para VMs com acelerador, pode ativar a conectividade de alta velocidade e com várias redes, essencial para protocolos como o RDMA, com um único indicador de configuração. Esta automatização elimina o processo manual complexo de configurar várias redes VPC, gerir intervalos de endereços IP e configurar interfaces de rede para cada conjunto de nós e Pod. Quando usa um único parâmetro para criar um conjunto de nós, o GKE fornece todos os recursos de rede do Kubernetes e da nuvem necessários.
Terminologia
Os seguintes termos são essenciais para compreender a arquitetura de rede das VMs com acelerador.
- Nuvem virtual privada (VPC): uma VPC é uma versão virtual de uma rede física, implementada na rede de produção da Google. Fornece conetividade para as instâncias de máquinas virtuais (VMs) do Compute Engine, os clusters do GKE e outros recursos.
- NIC Titanium: uma NIC inteligente que transfere tarefas de processamento de rede da CPU, libertando a CPU para se concentrar nas suas cargas de trabalho. Em máquinas com GPU, processam todo o tráfego que não seja comunicação direta entre GPUs. Nas máquinas de TPU, todas as NICs são NICs Titanium.
- Sub-rede: uma sub-rede é uma parte segmentada de uma VPC maior. Cada sub-rede está associada a uma região e tem um intervalo de endereços IP definido.
- Controlador de interface de rede (NIC): um NIC é uma interface de rede virtual que liga uma instância de VM a uma rede. Cada NIC está anexada a uma VPC e uma sub-rede específicas.
- Rede anfitriã: a rede principal usada pelas interfaces de rede (NICs) principais do nó para comunicação geral do cluster, como tráfego do plano de controlo e rede de pods normal.
- Rede de dados: uma rede dedicada para transferência de dados de elevado desempenho entre VMs de aceleradores. Para GPUs, trata-se frequentemente de um GPUDirect VPC com RDMA. Para as TPUs, esta pode ser uma segunda rede de anfitriões.
- Acesso direto à memória remoto(RDMA): O RDMA é uma tecnologia que permite que os dispositivos de rede troquem dados diretamente com a memória principal de um computador sem envolver o sistema operativo nem a CPU. Isto reduz significativamente a latência e melhora o débito, o que é fundamental para cargas de trabalho de HPC e ML.
- NVLink: NVLink é uma tecnologia de interconexão de alta velocidade desenvolvida pela NVIDIA para ligar várias GPUs num único nó, o que lhes permite partilhar memória e trabalhar em conjunto em grandes conjuntos de dados.
- Atribuição dinâmica de recursos (DRA) do Kubernetes: a DRA é uma funcionalidade do Kubernetes que oferece uma forma mais flexível para os pods pedirem e consumirem recursos, como GPUs e outro hardware especializado. Permite um controlo detalhado da atribuição de recursos.
Como funciona a rede automatizada
As máquinas otimizadas para aceleradores têm uma arquitetura de rede especializada para suportar a comunicação de alto débito e baixa latência entre GPUs e TPUs. Cada máquina física contém várias GPUs ou TPUs, frequentemente ligadas por interconexões de alta velocidade, como o NVLink. As máquinas também têm uma ou mais NICs para rede geral e várias NICs de GPU para interconexões de alta velocidade.
Quando cria um nó do GKE que usa um tipo de máquina otimizado para aceleradores, o GKE configura várias NICs na VM subjacente. As NICs do anfitrião ligam-se às redes VPC do anfitrião para a comunicação e a gestão gerais do cluster, de modo a comunicar com o plano de controlo. As NICs de GPU ligam-se a uma rede VPC dedicada de alto desempenho, muitas vezes com RDMA ativado e uma definição de MTU elevada (8896), para facilitar a comunicação GPUDirect.
Quando um Pod pede GPUs ou TPUs, pode configurá-lo para aceder às interfaces de rede de alto desempenho no nó. Pode pedir todas as NICs disponíveis ou um subconjunto específico. Cada interface de rede reivindicada é dedicada a um único Pod e não é partilhada. Esta configuração de rede garante que o agrupamento tem acesso exclusivo à largura de banda total e aos recursos dessa interface, uma vantagem fundamental para cargas de trabalho sensíveis ao desempenho.
Limitações
- A rede automatizada para VMs de acelerador não é suportada em clusters do Autopilot.
- A rede automatizada requer que o cluster use o GKE Dataplane V2.
- Tipos de máquinas suportados: as redes automatizadas são suportadas nas famílias de máquinas A3, A4 e TPU Trillium (v6e) otimizadas para aceleradores.
- Node pools de zona única obrigatórios: tem de usar um node pool com uma única zona.
- Quando usar o DRANET gerido do GKE para configurar cargas de trabalho, consulte as principais considerações e as limitações do DRANET gerido do GKE.
- Não pode usar a API de várias redes e a DRANET no mesmo conjunto de nós. Tem de escolher um método de anexo de rede para os seus agrupamentos.
Configurações de rede de máquinas otimizadas pelo acelerador
As máquinas otimizadas para aceleradores têm configurações de rede variáveis consoante o respetivo tipo. A tabela seguinte resume as especificações de rede para vários tipos de máquinas.
VMs com acelerador de GPU
| Tipo de máquina | Número de GPUs | Número de NICs Titanium | Número de NICs de GPU | Tecnologia GPUDirect | VPCs adicionais |
|---|---|---|---|---|---|
| A3 | 8 (H100) | 1 | 4 | TCPX | 4 para NICs de GPU |
| A3 Mega | 8 (H100) | 1 | 8 | TCPXO | 8 para NICs de GPU |
| A3 Ultra | 8 (H200) | 2 | 8 | RDMA | 2 (1 para a segunda NIC, 1 para as NICs da GPU) |
| A4 | 8 (B200) | 2 | 8 | RDMA | 2 (1 para a segunda NIC, 1 para as NICs da GPU) |
| A4X | 4 (GB200) | 1 | 4 | RDMA | 2 (1 para a segunda NIC, 1 para as NICs da GPU) |
VMs com acelerador de TPU
| Tipo de máquina | Número de chips de TPU | Número de NICs | VPCs adicionais |
|---|---|---|---|
| TPU Trillium (v6e) (ct6e-standard-4t) | 4 | 2 | 2 (1 para a 2.ª NIC e 1 para a VNIC adicional na 1.ª NIC) |
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.
Certifique-se de que o cluster usa a versão 1.34.1-gke.1829001 ou posterior do GKE.
Certifique-se de que o cluster tem o GKE Dataplane V2. Pode ativar esta funcionalidade quando cria um novo cluster ou atualiza um existente.
Crie um novo cluster:
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2Substitua o seguinte:
CLUSTER_NAME: o nome do novo cluster.CLUSTER_VERSION: a versão do cluster tem de ser 1.34.1-gke.1829001 ou posterior.
Atualize um cluster existente:
gcloud container clusters update CLUSTER_NAME \ --enable-dataplane-v2Substitua
CLUSTER_NAMEpelo nome do seu cluster.
Se planeia implementar cargas de trabalho de GPU que usam RDMA, verifique a existência dos recursos
DeviceClass:kubectl get deviceclass mrdma.google.com
Crie um node pool com um perfil de rede predefinido
Para criar automaticamente uma rede que ligue todas as máquinas com GPUs ou TPUs
numa única zona, crie um conjunto de nós com o perfil de autorede de aceleradores.
gcloud
Para criar um conjunto de nós com um perfil de rede configurado automaticamente, execute o seguinte comando:
gcloud beta container node-pools create NODE_POOL_NAME \
--accelerator-network-profile=auto \
--node-locations=ZONE \
--machine-type=MACHINE_TYPE
Para mais informações sobre a criação de pools de nós com aceleradores, consulte os artigos Execute GPUs em pools de nós do Autopilot e Implemente cargas de trabalho de TPU no Autopilot. Quando seguir as instruções nestes documentos, acrescente a flag --accelerator-network-profile=auto ao comando gcloud container node-pools create.
Para pools de nós de fatias de TPUs com vários anfitriões, também tem de adicionar a flag --tpu-topology.
Substitua o seguinte:
NODE_POOL_NAME: o nome do novo node pool.ZONE: a zona do node pool.MACHINE_TYPE: o tipo de máquina dos nós, por exemplo,a3-ultragpu-8g.
REST
Num pedido ao método nodePools.create, especifique o campo accelerator_network_profile:
{
"nodePool": {
"name": "NODE_POOL_NAME",
"machineType": "MACHINE_TYPE",
...
"accelerator_network_profile": "auto"
}
}
Substitua o seguinte:
NODE_POOL_NAME: o nome do novo node pool.MACHINE_TYPE: o tipo de máquina dos nós, por exemplo,a3-ultragpu-8g.
Agende uma carga de trabalho que use GPUs
As secções seguintes mostram como configurar um conjunto de nós de GPU e uma carga de trabalho para usar interfaces de rede RDMA com o DRANET gerido pelo GKE. Para mais detalhes, consulte o artigo Atribua recursos de rede através do DRANET gerido do GKE.
Ative o controlador DRANET gerido do GKE num pool de nós de GPU
Para ativar o controlador GKE DRANET num conjunto de nós de GPU que suporte RDMA, adicione a etiqueta cloud.google.com/gke-networking-dra-driver=true quando criar o conjunto de nós.
gcloud beta container node-pools create NODE_POOL_NAME \
--region=REGION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_LOCATIONS \
--accelerator type=ACCELERATOR_TYPE,count=ACCELERATOR_COUNT,gpu-driver-version=DRIVER_VERSION \
--machine-type=MACHINE_TYPE \
--num-nodes=NUM_NODES \
--reservation-affinity=specific \
--reservation=projects/RESERVATION_PROJECT/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK \
--accelerator-network-profile=auto \
--node-labels=cloud.google.com/gke-networking-dra-driver=true
Substitua o seguinte:
NODE_POOL_NAME: o nome do novo node pool.REGION: a Google Cloud região do seu cluster.CLUSTER_NAME: o nome do seu cluster.ACCELERATOR_TYPE: o tipo de acelerador de GPU:Por exemplo:
- VMs A4: introduza
nvidia-b200. - VMs A3 Ultra: introduza
nvidia-h200-141gb.
- VMs A4: introduza
ACCELERATOR_COUNT: o número de GPUs a associar aos nós no node pool. Por exemplo, para as VMs a4-highgpu-8g e a3-ultragpu-8g, a quantidade de GPUs é 8.DRIVER_VERSION: a versão do controlador da GPU a usar. Por exemplo,defaultoulatest.MACHINE_TYPE: o tipo de máquina do node pool, por exemplo,a3-ultragpu-8g.NUM_NODES: o número de nós para o node pool. Para o início flexível, este valor tem de ser definido como 0.RESERVATION_PROJECT: o ID do projeto da reserva.RESERVATION_NAME: o nome da sua reserva. Para encontrar este valor, consulte o artigo Veja pedidos de reserva futuros.RESERVATION_BLOCK: o nome de um bloco específico na reserva. Para encontrar este valor, consulte o artigo Veja pedidos de reserva futuros.
Este comando usa perfis de rede de aceleradores para configurar automaticamente redes VPC e sub-redes para as suas VMs de acelerador. Em alternativa, pode especificar explicitamente a sua rede de VPC e sub-redes.
Implemente recursos RDMA de uma carga de trabalho
Para atribuir recursos RDMA a um pod, especifique um ResourceClaimTemplate.
Crie um
ResourceClaimTemplatepara definir como atribuir os dispositivos RDMA. O seguinte manifesto pede todos os dispositivosmrdmadisponíveis no nó. Guarde o manifesto comoall-mrdma-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-mrdma spec: spec: devices: requests: - name: req-mrdma exactly: deviceClassName: mrdma.google.com allocationMode: AllAplique o manifesto:
kubectl apply -f all-mrdma-template.yamlImplemente a sua carga de trabalho e consulte o
ResourceClaimTemplate. O manifesto seguinte implementa um Pod que faz referência ao modeloall-mrdma, o que concede ao Pod acesso às interfaces RDMA no nó. Guarde o manifesto comoagnhost-rdma-pod.yaml:apiVersion: v1 kind: Pod metadata: name: agnhost-rdma namespace: default labels: app: agnhost spec: containers: - name: agnhost image: registry.k8s.io/e2e-test-images/agnhost:2.39 args: ["netexec", "--http-port", "80"] ports: - name: agnhost-port containerPort: 80 resources: claims: - name: rdma limits: nvidia.com/gpu: 1 resourceClaims: - name: rdma resourceClaimTemplateName: all-mrdmaAplique o manifesto:
kubectl apply -f agnhost-rdma-pod.yamlVerifique se as interfaces de rede adicionais atribuídas estão visíveis no Pod.
kubectl exec agnhost-rdma -- ls /sys/class/netO exemplo de saída seguinte mostra as interfaces
eth0elopredefinidas, bem como as interfaces RDMA atribuídas, comogpu0rdma0. O número e os nomes das interfaces de rede (NICs) variam consoante o tipo de máquina do nó do GKE.eth0 gpu0rdma0 gpu1rdma0 gpu2rdma0 gpu3rdma0 lo
Agende uma carga de trabalho que use TPUs
As secções seguintes mostram como configurar um conjunto de nós de TPU e uma carga de trabalho para usar interfaces de rede não RDMA com o DRANET gerido pelo GKE. Para mais detalhes, consulte o artigo Atribua recursos de rede através do DRANET gerido do GKE.
Valide as DeviceClasses de rede
Verifique se os recursos de DeviceClass rede existem no seu cluster.
kubectl get deviceclass netdev.google.com
O resultado é semelhante ao seguinte:
NAME AGE
netdev.google.com 2d22h
Ative o controlador DRANET gerido pelo GKE num conjunto de nós de fatia de TPU
Para ativar o controlador DRANET do GKE ao criar um conjunto de nós de fatia de TPU, adicione a etiqueta cloud.google.com/gke-networking-dra-driver=true.
gcloud beta container node-pools create NODE_POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_LOCATIONS \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--num-nodes=NUM_NODES \
--accelerator-network-profile=auto \
--node-labels=cloud.google.com/gke-networking-dra-driver=true
Substitua o seguinte:
NODE_POOL_NAME: o nome do novo node pool.LOCATION: a Google Cloud região ou a zona do seu cluster.CLUSTER_NAME: o nome do seu cluster.NODE_LOCATIONS: as Google Cloud zonas dos nós no node pool.MACHINE_TYPE: o tipo de máquina a usar para os nós. Para mais informações sobre os tipos de máquinas compatíveis com a TPU, consulte o artigo Escolha a versão da TPU.TPU_TOPOLOGY: a topologia da TPU, por exemplo,2x4x4. O formato da topologia depende da versão da TPU. Para saber mais sobre as topologias de TPUs, consulte o artigo Escolha uma topologia.NUM_NODES: o número de nós no node pool.
Para mais informações, consulte o artigo Crie um conjunto de nós de fatia de TPU de host único.
Implemente uma carga de trabalho que reivindique todos os dispositivos de rede
Para atribuir dispositivos de rede não RDMA a um pod, especifique um ResourceClaimTemplate.
Crie um
ResourceClaimTemplateque faça referência aonetdev.google.comDeviceClass. O manifesto seguinte pede todos os dispositivos de rede não RDMA disponíveis no nó.Guarde o manifesto como
all-netdev-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-netdev spec: spec: devices: requests: - name: req-netdev exactly: deviceClassName: netdev.google.com allocationMode: AllAplique o manifesto:
kubectl apply -f all-netdev-template.yamlImplemente a sua carga de trabalho e consulte o
ResourceClaimTemplate. O manifesto seguinte implementa um pod que usa o modeloall-netdevpara conceder ao pod acesso a todos os dispositivos de rede não RDMA no nó. Guarde o manifesto comonetdev-pod.yaml:apiVersion: v1 kind: Pod metadata: name: agnhost-netdev namespace: default labels: app: agnhost spec: containers: - name: agnhost image: registry.k8s.io/e2e-test-images/agnhost:2.39 args: ["netexec", "--http-port", "80"] ports: - name: agnhost-port containerPort: 80 resources: claims: - name: netdev limits: google.com/tpu: 4 nodeSelector: cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY resourceClaims: - name: netdev resourceClaimTemplateName: all-netdevSubstitua o seguinte:
TPU_ACCELERATOR: o tipo de acelerador de TPU, por exemplo,tpu-v5p-slice.TPU_TOPOLOGY: a topologia da TPU, por exemplo,2x4x4.
Aplique o manifesto:
kubectl apply -f netdev-pod.yamlVerifique se as interfaces de rede adicionais atribuídas estão visíveis no Pod.
kubectl exec agnhost-netdev -- ls /sys/class/netO exemplo de saída seguinte mostra as interfaces
eth0elopredefinidas, juntamente com os dispositivos de rede atribuídos, que têm nomes comoeth1eeth2. O número de NICs e os respetivos nomes variam consoante o tipo de máquina do nó do GKE.eth0 eth1 eth2 lo
Resolver problemas
Para verificar a configuração de rede de um conjunto de nós, execute o seguinte comando:
gcloud beta container node-pools describe NODE_POOL_NAME \
--zone=ZONE \
--cluster=CLUSTER_NAME
Substitua o seguinte:
NODE_POOL_NAME: o nome do seu node pool.ZONE: a zona do node pool.CLUSTER_NAME: o nome do seu cluster.
O resultado mostra as redes e sub-redes adicionais anexadas ao grupo de nós.
O que se segue?
- Leia sobre as máquinas otimizadas para aceleradores.
- Saiba como aprovisionar GPUs com o DRA.
- Saiba como configurar o suporte de várias redes para pods.
- Saiba como atribuir recursos de rede com o DRANET gerido do GKE