Questo documento spiega come eseguire workload di computing ad alte prestazioni (HPC) sui cluster Google Kubernetes Engine (GKE) che utilizzano la serie di macchine H4D e l'accesso diretto alla memoria remota (RDMA).
H4D è una serie di macchine della famiglia di macchine ottimizzate per il calcolo per Compute Engine. La serie di macchine è ottimizzata per prestazioni elevate, costi contenuti e scalabilità. H4D è ideale per le applicazioni che scalano su più nodi. Le istanze H4D configurate per l'utilizzo di RDMA supportano una larghezza di banda di rete fino a 200 Gbps tra i nodi.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Ottieni la capacità per le VM H4D dopo aver scelto un'opzione di consumo. Per le VM H4D è consigliata l'allocazione densa delle risorse. L'allocazione densa delle risorse è disponibile con alcuni dei modelli di provisioning per H4D e offre funzionalità di gestione dei cluster avanzate per la capacità H4D. Per ottenere la capacità:
Assicurati di rispettare i seguenti requisiti di versione di GKE:
- Utilizza GKE versione 1.32.6-gke.1060000 o successive per creare un pool di nodi con VM H4D riservate in modalità GKE Standard.
Utilizza GKE versione 1.33.2-gke.4731000 o successive per creare quanto segue:
- Nodi H4D con avvio flessibile
- Nodi H4D con Autopilot
- Nodi H4D con scalabilità automatica del cluster nei cluster Standard
- Nodi H4D con provisioning automatico dei nodi nei cluster Standard
Utilizza solo le località in cui è disponibile il tipo di macchina H4D. Per saperne di più, consulta la tabella in Regioni e zone disponibili, filtrando per
H4D.Utilizza solo immagini dei nodi Container-Optimized OS node images.
Esamina le limitazioni di H4D.
Esamina come gestire la manutenzione dell'host, perché i tipi di macchine H4D non supportano la migrazione live. Per saperne di più, consulta Esperienza di manutenzione per le istanze H4D e Gestire le interruzioni dei nodi GKE che non eseguono la migrazione live.
Configura il cluster GKE e le reti
Puoi utilizzare Cluster Toolkit per creare rapidamente un cluster GKE pronto per la produzione che utilizza VM H4D con prenotazione. Le istruzioni di Cluster Toolkit in questa sezione utilizzano il progetto GKE H4D.
In alternativa, puoi utilizzare Google Cloud CLI per la massima flessibilità nella configurazione dell'ambiente cluster con VM con prenotazione o con avvio flessibile.
Cluster Toolkit
Configura Cluster Toolkit. Ti consigliamo di utilizzare Cloud Shell perché le dipendenze sono già preinstallate per Cluster Toolkit.
Recupera l'indirizzo IP della macchina host su cui hai installato Cluster Toolkit:
curl ifconfig.meSalva questo indirizzo IP da utilizzare per la variabile
IP_ADDRESSin un passaggio successivo.Crea un bucket Cloud Storage per archiviare lo stato del deployment di Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioningSostituisci le seguenti variabili:
BUCKET_NAME: il nome del nuovo bucket Cloud Storage.PROJECT_ID: il tuo Google Cloud ID progetto.COMPUTE_REGION_TERRAFORM_STATE: la regione di Compute in cui vuoi archiviare lo stato del deployment di Terraform.
Nel progetto
examples/gke-h4d/gke-h4d-deployment.yamldel repository GitHub, inserisci le seguenti impostazioni nelle sezioniterraform_backend_defaultsevarsin modo che corrispondano ai valori specifici del tuo deployment:DEPLOYMENT_NAME: un nome univoco per il deployment, che deve avere una lunghezza compresa tra 6 e 30 caratteri. Se il nome del deployment non è univoco all'interno di un progetto, la creazione del cluster non riesce. Il valore predefinito ègke-h4d.BUCKET_NAME: il nome del bucket Cloud Storage che hai creato nel passaggio precedente.PROJECT_ID: il tuo Google Cloud ID progetto.COMPUTE_REGION: la regione di Compute per il cluster, che deve corrispondere alla regione in cui le macchine sono disponibili per la prenotazione.COMPUTE_ZONE: la zona di computing per il node pool di macchine H4D. Tieni presente che questa zona deve corrispondere alla zona in cui le macchine sono disponibili nella prenotazione.NODE_COUNT: il numero di nodi H4D nel cluster.IP_ADDRESS/SUFFIX: l'intervallo di indirizzi IP a cui vuoi consentire di connettersi al cluster. Questo blocco CIDR deve includere l'indirizzo IP della macchina che vuoi utilizzare per chiamare Terraform. Per saperne di più, consulta Come funzionano le reti autorizzate lavorano.-
- Per inserire il pool di nodi in un punto qualsiasi della prenotazione, fornisci il nome della prenotazione (
RESERVATION_NAME). Per scegliere come target un blocco specifico all'interno della prenotazione, utilizza i nomi della prenotazione e del blocco nel seguente formato:
RESERVATION_NAME/reservationBlocks/BLOCK_NAMESe non sai quali blocchi sono disponibili nella prenotazione, consulta Visualizzare la topologia di una prenotazione.
- Per inserire il pool di nodi in un punto qualsiasi della prenotazione, fornisci il nome della prenotazione (
Genera le Credenziali predefinite dell'applicazione (ADC) per fornire l'accesso a Terraform. Se utilizzi Cloud Shell, puoi eseguire il seguente comando:
gcloud auth application-default loginEsegui il deployment del progetto per eseguire il provisioning dell'infrastruttura GKE utilizzando i tipi di macchine H4D:
./gcluster deploy -d examples/gke-h4d/gke-h4d-deployment.yaml examples/gke-h4d/gke-h4d.yamlQuando richiesto, seleziona (A)pply per eseguire il deployment del progetto.
Inoltre, questo progetto esegue il provisioning di un'istanza Filestore e la connette al cluster GKE con un volume permanente (PV). Questo progetto include un modello di job di esempio. Questo modello esegue un job parallelo che legge e scrive dati in questo spazio di archiviazione condiviso. Negli output del deployment viene visualizzato un comando
kubectl createche può essere utilizzato per attivare il job di esempio.
Google Cloud CLI
Sostituisci i seguenti valori per i comandi in questa sezione:
PROJECT_ID: il tuo Google Cloud ID progetto.CLUSTER_NAME: il nome del cluster.CONTROL_PLANE_LOCATION: la località di Compute Engine del control plane del cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali. I cluster regionali sono consigliati per i workload di produzione. Per i cluster regionali, la regione deve includere una zona in cui è disponibile H4D. Per i cluster zonali, la zona deve avere la disponibilità di H4D. Se utilizzi una prenotazione, la regione e la zona devono corrispondere alla regione e alla zona della prenotazione.COMPUTE_ZONE: la zona del pool di nodi. Deve essere una zona in cui è disponibile H4D. Se utilizzi una prenotazione, la regione e la zona devono corrispondere alla regione e alla zona della prenotazione. Non puoi creare un node pool multizona se vuoi che i nodi H4D funzionino con Cloud RDMA.RDMA_NETWORK_PREFIX: il prefisso della rete RDMA (ad esempio,h4d-rdma).RDMA_SUBNET_CIDR: l'intervallo CIDR della subnet RDMA. Assicurati che questo intervallo non si sovrapponga alle reti predefinite del cluster.NODE_POOL_NAME: il nome del pool di nodi H4D.NODE_COUNT: il numero di nodi H4D da creare nel pool di nodi.H4D_MACHINE_TYPE: il tipo di macchina H4D da utilizzare (ad esempio,h4d-highmem-192-lssd).
Crea un cluster con gcloud CLI seguendo questi passaggi:
Crea VPC e subnet: configura il Virtual Private Cloud (VPC) e la subnet predefiniti per il cluster. Per la scheda di interfaccia di rete (NIC) IRDMA, crea un VPC e una subnet dedicati. Il VPC creato con le seguenti istruzioni utilizza, come richiesto, un profilo di rete VPC Falcon.
Crea un VPC per l'interfaccia di rete IRDMA che utilizza il protocollo di trasporto RDMA su Falcon:
gcloud compute --project=PROJECT_ID \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=COMPUTE_ZONE-vpc-falcon \ --subnet-mode=customCrea una subnet per la rete VPC Falcon:
gcloud compute --project=PROJECT_ID \ networks subnets create \ RDMA_NETWORK_PREFIX-sub-0 \ --network=RDMA_NETWORK_PREFIX-net \ --region=CONTROL_PLANE_LOCATION \ --range=RDMA_SUBNET_CIDR
Crea un cluster GKE con multi-networking: crea il cluster. Facoltativamente, con questo comando puoi fornire in modo esplicito gli intervalli CIDR secondari per servizi e pod.
Esegui questo comando:
gcloud container clusters create CLUSTER_NAME --project PROJECT_ID \ --enable-dataplane-v2 --enable-ip-alias --location=CONTROL_PLANE_LOCATION \ --enable-multi-networking \ [--services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]Se utilizzi questi flag facoltativi, sostituisci i seguenti valori aggiuntivi:
SERVICE_CIDR: l'intervallo CIDR secondario per i servizi.POD_CIDR: l'intervallo CIDR secondario per i pod.
Quando utilizzi questi flag, verifica che gli intervalli CIDR non si sovrappongano agli intervalli di subnet per le reti di nodi aggiuntive. Ad esempio,
SERVICE_CIDR=10.65.0.0/19ePOD_CIDR=10.64.0.0/19.Crea oggetti di rete GKE: configura la rete VPC utilizzando i set di parametri di rete GKE. Applica gli oggetti
GKENetworkParamSeteNetwork:kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: rdma-0 spec: vpc: RDMA_NETWORK_PREFIX-net vpcSubnet: RDMA_NETWORK_PREFIX-sub-0 deviceMode: RDMA --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: rdma-0 spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: rdma-0 EOFCrea un node pool H4D: crea un pool di nodi che utilizza H4D e si connette alla rete VPC Falcon. Puoi utilizzare i nodi H4D con prenotazione e il posizionamento compatto. In alternativa, puoi utilizzare i nodi H4D di cui è stato eseguito il provisioning con avvio flessibile. Seleziona la scheda corrispondente all'opzione di consumo:
Con prenotazione
Crea una policy di risorse per il posizionamento compatto. Il posizionamento compatto ottimizza le prestazioni per i workload HPC ad alto accoppiamento, che vengono eseguiti su più nodi, assicurando che i nodi siano posizionati fisicamente l'uno rispetto all'altro all'interno di una zona.
Esegui questo comando:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION --collocation collocatedSostituisci i seguenti valori:
POLICY_NAME: il nome della policy di risorse (ad esempio,h4d-compact).REGION: la regione del cluster.
Crea un pool di nodi che utilizza H4D e si connette alla rete RDMA:
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME --num-nodes=NODE_COUNT \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLESostituisci
MAX_UNAVAILABLEcon il numero massimo di nodi che possono non essere disponibili contemporaneamente durante un upgrade del node pool. Per il posizionamento compatto, ti consigliamo di eseguire upgrade rapidi senza sovraccarico per ottimizzare la probabilità di trovare nodi in colocation durante gli upgrade.
Avvio flessibile
Crea un pool di nodi che utilizza i nodi H4D di cui è stato eseguito il provisioning con avvio flessibile e si connette alla rete VPC Falcon:
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --flex-start --enable-autoscaling --reservation-affinity=none \ --min-nodes=0 --max-nodes=MAX_NODES --num-nodes=0Sostituisci
MAX_NODEScon il numero massimo di nodi per la scalabilità automatica del pool di nodi specificato per zona.
Prepara l'immagine Docker
Prepara l'immagine utilizzando il seguente Dockerfile di esempio:
FROM docker.io/rockylinux/rockylinux:8.10
RUN dnf -y install https://depot.ciq.com/public/download/ciq-sigcloud-next-8/ciq-sigcloud-next-8.x86_64/Packages/c/ciq-sigcloud-next-release-6-1.el8_10.cld_next.noarch.rpm
&& dnf -y update ciq-sigcloud-next-release
&& dnf clean all
RUN dnf install rdma-core libibverbs-utils librdmacm-utils infiniband-diags perftest -y
Per saperne di più sulle immagini che supportano IRDMA, consulta le schede Interfacce nelle tabelle in Dettagli del sistema operativo.
Configura i manifest per RDMA
Abilita Cloud RDMA aggiungendo le seguenti annotazioni ai metadati del pod:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"rdma-0"},
]
Testa RDMA con rping
Verifica la funzionalità di Cloud RDMA eseguendo rping tra un pod server e un pod client:
Nel pod server, esegui il comando
rping:rping -sNel pod client, esegui il comando
rping:rping -c -C 2 -d -a SERVER_IPSostituisci
SERVER_IPcon l'indirizzo IP del pod server.Se l'operazione va a buon fine, l'output sarà simile al seguente:
created cm_id 0x5b597bf94800 cma_event type RDMA_CM_EVENT_ADDR_RESOLVED cma_id 0x5b597bf94800 (parent) cma_event type RDMA_CM_EVENT_ROUTE_RESOLVED cma_id 0x5b597bf94800 (parent) rdma_resolve_addr - rdma_resolve_route successful created pd 0x5b597bf94fa0 created channel 0x5b597bf96830 created cq 0x5b597bf94ff0 created qp 0x5b597bf96c00 rping_setup_buffers called on cb 0x5b597bf8c820 allocated & registered buffers... cq_thread started. cma_event type RDMA_CM_EVENT_ESTABLISHED cma_id 0x5b597bf94800 (parent) ESTABLISHED rdma_connect successful RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion rping_free_buffers called on cb 0x5b597bf8c820 destroy cm_id 0x5b597bf94800
Passaggi successivi
- Scopri di più sul computing ad alte prestazioni.
- Scopri le best practice per l'esecuzione di workload HPC su GKE.
- Alcuni workload HPC richiedono una Message Passing Interface (MPI) per eseguire workload ad alto accoppiamento e multi-nodo con RDMA. Per saperne di più su come impostare MPI nel cluster per i nodi H4D, consulta Eseguire workload MPI su GKE H4D.