Auf dieser Seite wird beschrieben, wie Sie einen KI-optimierten Google Kubernetes Engine-Cluster (GKE) erstellen, in dem A4X-VMs verwendet werden, um Ihre KI- und ML-Arbeitslasten zu unterstützen. Weitere Informationen zu A4X finden Sie unter A4X-Serie.
Die A4X-Maschinenreihe wurde entwickelt, um die Ausführung von KI/ML-Clustern im großen Maßstab zu ermöglichen. Sie bietet Funktionen wie die gezielte Platzierung von Arbeitslasten, erweiterte Steuerelemente für die Clusterwartung und Topology Aware Scheduling. Weitere Informationen finden Sie unter Clusterverwaltung – Übersicht.
GKE bietet eine einheitliche Plattform, auf der Sie eine Vielzahl von Arbeitslasten für Ihre Organisationen ausführen können. So wird der Betriebsaufwand für die Verwaltung mehrerer Plattformen reduziert. Sie können Arbeitslasten wie leistungsstarkes verteiltes Vortraining, Modellabstimmung, Modellinferenz, Anwendungsbereitstellung und unterstützende Dienste ausführen.
Auf dieser Seite erfahren Sie, wie Sie einen GKE-Cluster mit der Google Cloud CLI erstellen, um Ihren Cluster basierend auf den Anforderungen Ihrer Arbeitslast maximal flexibel zu konfigurieren. Alternativ können Sie das Cluster Toolkit verwenden, um Ihren Cluster schnell mit Standardeinstellungen bereitzustellen, die Best Practices für viele Anwendungsfälle entsprechen.
- Weitere Informationen finden Sie unter KI-optimierten GKE-Cluster mit Standardkonfiguration erstellen.
- Informationen zum Erstellen eines Clusters, der A4 oder A3 Ultra verwendet, finden Sie unter Benutzerdefinierten KI-optimierten GKE-Cluster erstellen, der A4 oder A3 Ultra verwendet.
Optionen für die Clusterkonfiguration mit GPUDirect RDMA
Wenn Sie Ihren Cluster mit der Google Cloud CLI erstellen möchten, können Sie eine der folgenden Clusterkonfigurationsoptionen auswählen:
- Wenn Sie verteilte KI-Arbeitslasten ausführen möchten: Erstellen Sie einen GKE-Cluster mit GPUDirect RDMA. Folgen Sie dazu der Anleitung auf dieser Seite.
- Wenn Sie keine verteilten KI-Arbeitslasten ausführen möchten: Erstellen Sie einen GKE-Cluster ohne GPUDirect RDMA. Weitere Informationen finden Sie unter Cluster ohne GPUDirect RDMA erstellen.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die nötigen Berechtigungen zum Erstellen und Verwalten eines GKE-Cluster haben:
-
Kubernetes Engine-Administrator (
roles/container.admin) -
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor) -
Compute-Administrator (
roles/compute.admin) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin) - Service Account Admin (
roles/iam.serviceAccountAdmin) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) -
Storage-Administrator (
roles/storage.admin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Kapazität erhalten
Sie können Kapazität für A4X-VMs erhalten, indem Sie eine zukünftige Reservierung erstellen. Weitere Informationen zu vorausschauenden Reservierungen finden Sie in der Tabelle unter Verbrauchsoption auswählen> Vorausschauende Reservierungen in AI Hypercomputer.
Informationen zum Abrufen von Kapazität mit einer vorausschauenden Reservierung finden Sie in der Tabelle unter Kapazität abrufen in der Zeile Vorausschauende Reservierungen in AI Hypercomputer.
Voraussetzungen
Für einen KI-optimierten GKE-Cluster mit A4X-VMs gelten die folgenden Anforderungen:
Für A4X müssen Sie für Version 1.33 oder höher die GKE-Version 1.33.4-gke.1036000 oder höher verwenden. Oder verwenden Sie für 1.32 die GKE-Version 1.32.8-gke.1108000 oder höher. Mit diesen Versionen wird sichergestellt, dass A4X Folgendes verwendet:
- R580, die Mindest-GPU-Treiberversion für A4X.
- Coherent Driver-based Memory Management (CDMM), das standardmäßig aktiviert ist. NVIDIA empfiehlt, diesen Modus in Kubernetes-Clustern zu aktivieren, um zu hohe Arbeitsspeicherangaben zu vermeiden. Mit CDMM kann der GPU-Speicher über den Treiber anstelle des Betriebssystems verwaltet werden. So wird vermieden, dass das Betriebssystem den GPU-Arbeitsspeicher online schaltet, und der GPU-Arbeitsspeicher wird dem Betriebssystem als NUMA-Knoten (Non-Uniform Memory Access) zur Verfügung gestellt. GPUs mit mehreren Instanzen werden nicht unterstützt, wenn CDMM aktiviert ist. Weitere Informationen zu CDMM finden Sie unter Hardware- und Software-Support.
- GPUDirect RDMA, das empfohlen wird, damit A4X-Knotenpools die Netzwerkfunktionen von A4X nutzen können.
Die GKE-Knoten müssen ein Knoten-Image für Container-Optimized OS verwenden. Ubuntu- und Windows-Knotenimages werden nicht unterstützt.
Ihre GKE-Arbeitslast muss alle verfügbaren GPUs und Ihr Pod alle verfügbaren sekundären NICs auf einem einzelnen GKE-Knoten verwenden. Mehrere Pods können RDMA nicht auf einem einzelnen GKE-Knoten gemeinsam nutzen.
Bei dieser Einrichtung wird ein NCCL-Test ausgeführt. Um diesen NCCL-Test auszuführen, benötigen Sie ein VM-Mindestkontingent von 2 (4 GPUs pro VM bei Verwendung von
a4x-highgpu-4godera4x-highgpu-4g-nolssd).Sie müssen das Bereitstellungsmodell reservierungsgebunden verwenden, um Cluster mit A4X zu erstellen. Andere Bereitstellungsmodelle werden nicht unterstützt.
GPUDirect RDMA ist nicht mit NCCL Fast Socket oder GPUDirect TCPX/TCPXO kompatibel. Aktivieren Sie NCCL Fast Socket nicht und installieren Sie das TCPX-/TCPXO-Plug-in nicht in Clustern, die GPUDirect RDMA verwenden.
Hinweise zum Erstellen eines Clusters
Beachten Sie beim Erstellen eines Clusters Folgendes:
- Clusterstandort auswählen:
- Prüfen Sie, ob der von Ihnen ausgewählte Maschinentyp am von Ihnen verwendeten Standort verfügbar ist. Weitere Informationen finden Sie unter GPU-Standorte.
- Für dichte Reservierungen können Sie einen zonalen Cluster erstellen. Ersetzen Sie in diesem Fall das Flag
--regiondurch das Flag--zone=COMPUTE_ZONE, wobeiCOMPUTE_ZONEdie Zone Ihrer Steuerungsebene ist. - Wenn Sie Knotenpools in einem regionalen Cluster erstellen, können Sie mit dem Flag
--node-locationsdie Zonen für Ihre GKE-Knoten angeben.
- Treiberversion auswählen:
- Die Treiberversion kann einen der folgenden Werte haben:
default: Installieren Sie die Standardtreiberversion für Ihre GKE-Knotenversion. Weitere Informationen zu den Anforderungen an Standardtreiberversionen finden Sie im Abschnitt Anforderungen.latest: Installieren Sie die neueste verfügbare Treiberversion für Ihre GKE-Version. Diese Option ist nur für Knoten verfügbar, die Container-Optimized OS verwenden.disabled: Automatische Treiberinstallation überspringen. Sie müssen einen Treiber manuell installieren, nachdem Sie den Knotenpool erstellt haben.
- Weitere Informationen zu den standardmäßigen und neuesten GPU-Treiberversionen für GKE-Knotenversionen finden Sie in der Tabelle im Abschnitt NVIDIA-GPU-Treiber manuell installieren.
- Die Treiberversion kann einen der folgenden Werte haben:
Reservierungsaffinität auswählen:
- Hier finden Sie Informationen zu Ihrer Reservierung, z. B. den Namen Ihrer Reservierung oder den Namen eines bestimmten Blocks in Ihrer Reservierung. Informationen zum Ermitteln dieser Werte finden Sie unter Zukünftige Reservierungsanfragen anzeigen.
- Das Flag
--reservation-affinitykann die Wertespecificoderanyhaben. Für verteilte KI-Arbeitslasten mit hoher Leistung empfehlen wir jedoch, eine bestimmte Reservierung zu verwenden. Wenn Sie eine bestimmte Reservierung verwenden, einschließlich freigegebener Reservierungen, geben Sie den Wert des Flags
--reservationim folgenden Format an:projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMEErsetzen Sie die folgenden Werte:
PROJECT_ID: Projekt-ID in Google Cloud .RESERVATION_NAME: der Name Ihrer Reservierung.BLOCK_NAME: der Name eines bestimmten Blocks innerhalb der Reservierung.
Wenn Sie eine Reservierung mit untergeordneten Blöcken verwenden möchten, damit VMs in einem einzelnen untergeordneten Block innerhalb von
BLOCK_NAMEplatziert werden, fügen Sie Folgendes am Ende des Pfads hinzu:/reservationSubBlocks/SUB_BLOCK_NAMEErsetzen Sie
SUB_BLOCK_NAMEdurch den Namen des Unterblocks.
KI-optimierten GKE-Cluster erstellen, der A4X und GPUDirect RDMA verwendet
Bei verteilten KI-Arbeitslasten werden häufig mehrere GPU-Knoten miteinander verbunden, um als ein einzelner Computer zu fungieren. A4X ist eine Exascale-Plattform, die auf der Rack-Scale-Architektur NVIDIA GB200 NVL72 basiert. Dieser Maschinentyp ermöglicht die Skalierung und Zusammenarbeit über mehrere GPUs hinweg und bietet eine leistungsstarke Cloud-Umgebung für KI-Arbeitslasten. Weitere Informationen zur Netzwerkarchitektur für A4X, einschließlich der Netzwerkbandbreite und der NIC-Anordnung, finden Sie unter A4X-Maschinentypen.
Führen Sie die folgenden Schritte aus, um Ihre GKE-Standardcluster mit A4X und GPUDirect RDMA zu erstellen. Die Schritte werden in den nächsten Abschnitten beschrieben:
- VPCs und Subnetze erstellen
- GKE-Cluster mit Multi-Networking erstellen
- GKE-Netzwerkobjekte erstellen
- Arbeitslastrichtlinie erstellen
- Knotenpool mit A4X erstellen
- RDMA-Binärprogramm installieren und NCCL konfigurieren
- NVIDIA Compute Domain CRD und DRA-Treiber installieren
VPCs und Subnetze erstellen
A4X-VMs haben die folgende Konfiguration:
- Vier NVIDIA B200-GPUs pro virtueller Maschine, die über NVLink verbunden sind
- Zwei Arm-basierte NVIDIA Grace-CPUs
- Vier CX-7-Netzwerkkarten (NICs) mit 400 Gbit/s für die GPU-zu-GPU-Vernetzung
- Zwei Google Titanium-Netzwerkkarten (NICs) mit 200 Gbit/s für externe Dienste
KI- und ML-Arbeitslasten wie verteiltes Training erfordern eine leistungsstarke Beschleunigung, um die Leistung zu optimieren, indem die Ausführungszeiten von Jobs verkürzt werden. Für Arbeitslasten, die hohe Leistung, hohen Durchsatz und niedrige Latenz erfordern, reduziert GPUDirect RDMA die Netzwerk-Hops, die für die Übertragung von Nutzlasten zu und von GPUs erforderlich sind. Bei diesem Ansatz wird die verfügbare Netzwerkbandbreite effizienter genutzt.
Eine der Google Titanium-NICs, die der CPU zugeordnet ist, verwendet das Standardnetzwerk in GKE. Sie müssen also keine neue VPC für diese NIC erstellen, solange Sie genügend IP-Adressbereiche für das Standardnetzwerk haben.
Sie können mit den folgenden Befehlen eine VPC für die zweite CPU-Titanium-NIC (gVNIC) und eine weitere VPC für die vier CX-7-RDMA-NICs erstellen.
Um die Netzwerkbandbreite zu maximieren, wird mit dem Befehl zum Erstellen eines VPC für die zusätzlichen GVNIC-Sets die maximale Übertragungseinheit (Maximum Transmission Unit, MTU) auf 8.896 festgelegt. Der RDMA-VPC-Standardport ist die empfohlene Einstellung 8896. Weitere Informationen finden Sie unter MTU-Einstellungen und GPU-Maschinentypen.
Legen Sie Umgebungsvariablen fest, die Ihrer Bereitstellung entsprechen:
export REGION="COMPUTE_REGION" export ZONE="COMPUTE_ZONE" export PROJECT="PROJECT_ID" export GVNIC_NETWORK_PREFIX="GVNIC_NETWORK_PREFIX" export RDMA_NETWORK_PREFIX="RDMA_NETWORK_PREFIX"Ersetzen Sie die folgenden Variablen:
COMPUTE_REGION: Die Region Ihres Clusters.COMPUTE_ZONE: die Zone des Knotenpools.PROJECT_ID: Projekt-ID in Google Cloud .GVNIC_NETWORK_PREFIX: Das GVNIC-Netzwerkpräfix, z. B.a4x-gvnic.RDMA_NETWORK_PREFIX: Das RDMA-Netzwerkpräfix, z. B.a4x-rdma.
Zwei VPC-Netzwerke erstellen:
# Create a VPC for the additional GVNIC gcloud compute --project=${PROJECT} \ networks create \ GVNIC_NETWORK_PREFIX-net \ --subnet-mode=custom \ --mtu=8896 gcloud compute --project=${PROJECT} \ networks subnets create \ GVNIC_NETWORK_PREFIX-sub \ --network=GVNIC_NETWORK_PREFIX-net \ --region=${REGION} \ --range=192.168.0.0/24 gcloud compute --project=${PROJECT} \ firewall-rules create \ GVNIC_NETWORK_PREFIX-internal \ --network=GVNIC_NETWORK_PREFIX-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 # Create HPC VPC for the RDMA NICs with 4 subnets. gcloud compute --project=${PROJECT} \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=${ZONE}-vpc-roce \ --subnet-mode=custom # Create subnets for the HPC VPC. for N in $(seq 0 3); do gcloud compute --project=${PROJECT} \ networks subnets create \ RDMA_NETWORK_PREFIX-sub-$N \ --network=RDMA_NETWORK_PREFIX-net \ --region=${REGION} \ --range=192.168.$((N+1)).0/24 & # offset to avoid overlap with gvnics done
GKE-Cluster mit Multi-Networking erstellen
GKE-Standardcluster mit mehreren Netzwerken erstellen:
gcloud container clusters create CLUSTER_NAME \ --enable-dataplane-v2 --enable-ip-alias --location=COMPUTE_REGION \ --enable-multi-networking --cluster-version=CLUSTER_VERSION \ --enable-kubernetes-unstable-apis=resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices \ [--services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]Gehen Sie beim Vorbereiten dieses Befehls so vor:
- Entfernen Sie das Flag
--enable-kubernetes-unstable-apis, das zum Aktivieren von DRA verwendet wird, wenn Sie einen Cluster mit GKE-Version 1.34 oder höher erstellen. Dieses Flag ist nur erforderlich, wenn Sie einen Cluster mit Version 1.32 oder 1.33 erstellen. Wenn Sie eine Beta API aktivieren, müssen Sie schließlich von der Beta API migrieren, wenn sie verworfen und mit späteren Kubernetes-Nebenversionen entfernt wird. Weitere Informationen finden Sie unter Einstellung von Beta APIs. Ersetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.CLUSTER_VERSION: die Version Ihres neuen Clusters. Weitere Informationen dazu, welche Version von GKE Ihre Konfiguration unterstützt, finden Sie in diesem Dokument unter Anforderungen.COMPUTE_REGION: der Name der Compute-Region.
Optional können Sie die sekundären CIDR-Bereiche für Dienste und Pods explizit angeben. Wenn Sie diese optionalen Flags verwenden, ersetzen Sie die folgenden Variablen:
SERVICE_CIDR: der sekundäre CIDR-Bereich für Dienste.POD_CIDR: der sekundäre CIDR-Bereich für Pods.
Wenn Sie diese Flags verwenden, müssen Sie prüfen, ob sich die CIDR-Bereiche nicht mit Subnetzbereichen für zusätzliche Knotennetzwerke überschneiden. Beispiel:
SERVICE_CIDR=10.65.0.0/19undPOD_CIDR=10.64.0.0/19. Weitere Informationen finden Sie unter Pod-IPv4-Adressbereiche hinzufügen.
- Entfernen Sie das Flag
GKE-Netzwerkobjekte erstellen
Sie müssen die im vorherigen Abschnitt erstellten VPC-Netzwerke über GKE-Netzwerkparametersätze konfigurieren. Insbesondere muss die zweite CPU-Titanium-NIC (gVNIC) im NetDevice-Modus konfiguriert werden und jede der vier CX-7-RDMA-NICs im RDMA-Modus.
Dieser Befehl verwendet die folgenden Namen:
- Das VPC-Netzwerk für die Titanium-NIC (gVNIC) der CPU heißt
GVNIC_NETWORK_PREFIX-netund das SubnetzGVNIC_NETWORK_PREFIX-sub. - Die VPC für CX-7-RDMA-NICs heißt
RDMA_NETWORK_PREFIX-netund die Subnetze heißenRDMA_NETWORK_PREFIX-sub-[0…3].
Erstellen Sie die GKE-Netzwerkobjekte mit dem folgenden Befehl:
kubectl apply -f - <<EOF
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: gvnic-1
spec:
vpc: GVNIC_NETWORK_PREFIX-net
vpcSubnet: GVNIC_NETWORK_PREFIX-sub
deviceMode: NetDevice
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: gvnic-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: gvnic-1
---
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
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-1
spec:
vpc: RDMA_NETWORK_PREFIX-net
vpcSubnet: RDMA_NETWORK_PREFIX-sub-1
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-2
spec:
vpc: RDMA_NETWORK_PREFIX-net
vpcSubnet: RDMA_NETWORK_PREFIX-sub-2
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-2
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-2
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-3
spec:
vpc: RDMA_NETWORK_PREFIX-net
vpcSubnet: RDMA_NETWORK_PREFIX-sub-3
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-3
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-3
EOF
Arbeitslastrichtlinie erstellen
Zum Erstellen einer Partition ist eine Arbeitslastrichtlinie erforderlich. Weitere Informationen finden Sie unter Arbeitslastrichtlinie für MIGs.
Erstellen Sie eine HIGH_THROUGHPUT-Arbeitslastrichtlinie, in der das Feld accelerator_topology auf 1x72 festgelegt ist.
gcloud beta compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--type HIGH_THROUGHPUT \
--accelerator-topology 1x72 \
--project PROJECT \
--region COMPUTE_REGION
Ersetzen Sie Folgendes:
WORKLOAD_POLICY_NAME: der Name Ihrer Arbeitslastrichtlinie.PROJECT: Name Ihres ProjektsCOMPUTE_REGION: der Name der Compute-Region.
Knotenpool mit A4X erstellen
Wir empfehlen, einen Knotenpool zu erstellen, der das GKE-GPU-Geräte-Plug-in verwendet. Dieses Plug-in bietet die von GKE verwaltete GPU-Ressourcenverwaltung. Dieser Ansatz bietet folgende Vorteile:
- Einfache Bereitstellung und Upgrades
- Automatische Treiberinstallation
- Von GKE verwaltete GPU-Funktionen wie Messwerte und partitionierte GPUs
- Wichtige Korrekturen bei Sicherheitslücken
Alternativ können Sie den NVIDIA GPU-Operator verwenden, falls dies für Ihren Anwendungsfall erforderlich ist. Weitere Informationen finden Sie unter Warum den NVIDIA GPU-Operator verwenden?.
A4X-Knotenpool mit dem GKE-GPU-Geräte-Plug-in erstellen
Erstellen Sie einen A4X-Knotenpool, der das GKE-GPU-Geräte-Plug-in verwendet:
gcloud container node-pools create NODE_POOL_NAME \
--location COMPUTE_REGION \
--node-locations COMPUTE_ZONE \
--cluster CLUSTER_NAME \
--num-nodes=NODE_COUNT \
--machine-type MACHINE_TYPE \
--accelerator type=nvidia-gb200,count=4,gpu-driver-version=DRIVER_VERSION \
--additional-node-network network=GVNIC_NETWORK_PREFIX-net,subnetwork=GVNIC_NETWORK_PREFIX-sub \
--additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \
--additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-1 \
--additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-2 \
--additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-3 \
--scopes "https://www.googleapis.com/auth/cloud-platform" \
--reservation-affinity=specific \
--reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \
--placement-policy=WORKLOAD_POLICY_NAME
Ersetzen Sie Folgendes:
NODE_POOL_NAMEist der Name des Knotenpools.COMPUTE_REGION: Die Region Ihres Clusters.COMPUTE_ZONE: die Zone des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.NODE_COUNT: Die Anzahl der Knoten für den Knotenpool, die maximal 18 betragen darf. Wir empfehlen, 18 Knoten zu verwenden, um die GPU-Topologie von1x72in einem Unterblock mit einer NVLink-Domain zu erhalten.MACHINE_TYPE:a4x-highgpu-4godera4x-highgpu-4g-nolssd, je nachdem, ob Sie lokale SSDs verwenden möchten.DRIVER_VERSION: die zu installierende NVIDIA-Treiberversion. Er kann einen der folgenden Werte haben:default,latestoderdisabled.RESERVATION_NAME: Der Name Ihrer Reservierung. Informationen zum Ermitteln dieses Werts finden Sie unter Zukünftige Reservierungsanfragen ansehen.BLOCK_NAME: der Name eines bestimmten Blocks innerhalb der Reservierung. Informationen zum Ermitteln dieses Werts finden Sie unter Zukünftige Reservierungsanfragen ansehen.WORKLOAD_POLICY_NAME: Der Name der Workload-Richtlinie, die Sie zuvor erstellt haben.
A4X-Knotenpool mit dem NVIDIA GPU Operator erstellen
Alternativ können Sie den NVIDIA GPU-Operator verwenden. Gehen Sie dazu so vor:
Führen Sie den Befehl
gcloud container node-pools createaus dem vorherigen Abschnitt mit den folgenden Änderungen aus:- Ändern Sie
gpu-driver-version=latestzugpu-driver-version=disabled. Bei dieser Änderung wird die automatische Installation von GPU-Treibern übersprungen, da sie bei Verwendung des NVIDIA GPU-Operators nicht unterstützt wird. - Legen Sie
--node-labels="gke-no-default-nvidia-gpu-device-plugin=true"fest, um das von GKE verwaltete GPU-Geräte-Plug-in-DaemonSet zu deaktivieren.
- Ändern Sie
Wenden Sie das Manifest des GKE-GPU-Treiberinstallations-DaemonSets an. Mit diesem Manifest wird ein GPU-Treiberinstallations-Pod auf jedem A4X-Knoten bereitgestellt:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/cos/daemonset-preloaded.yamlGPU-Stack mit dem NVIDIA GPU Operator in Google Kubernetes Engine (GKE) verwalten:
- Folgen Sie im Abschnitt zum Erstellen und Einrichten des GPU-Knotenpools der Anleitung ab dem Schritt zum Abrufen von Anmeldedaten für die Authentifizierung.
NVIDIA GPU Operator installieren Führen Sie alle Schritte aus, ersetzen Sie aber den Befehl im referenzierten Abschnitt, mit dem der NVIDIA GPU Operator mit Helm installiert wird. Verwenden Sie stattdessen den folgenden Befehl:
helm install --wait --generate-name \ -n gpu-operator \ nvidia/gpu-operator \ --version="25.3.0" \ -f <(cat <<EOF hostPaths: driverInstallDir: /home/kubernetes/bin/nvidia toolkit: installDir: /home/kubernetes/bin/nvidia cdi: enabled: true default: true driver: enabled: false daemonsets: tolerations: - key: nvidia.com/gpu operator: Equal value: present effect: NoSchedule - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule node-feature-discovery: worker: tolerations: - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule - key: "node-role.kubernetes.io/master" operator: "Equal" value: "" effect: "NoSchedule" - key: "node-role.kubernetes.io/control-plane" operator: "Equal" value: "" effect: "NoSchedule" - key: nvidia.com/gpu operator: Exists effect: NoSchedule EOF )
RDMA-Binärprogramm installieren und NCCL konfigurieren
Wenden Sie das folgende DaemonSet an, um die RDMA-Binärdateien und die NCCL-Bibliothek auf jedem Knoten zu installieren. Auf jeder zugrunde liegenden VM werden die RDMA-Binärdateien im Verzeichnis /home/kubernetes/bin/gib und die NCCL-Bibliothek im Verzeichnis /home/kubernetes/bin/nvidia/lib64 installiert.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-rdma/nccl-rdma-installer-a4x.yaml
NVIDIA Compute Domain CRD und DRA-Treiber installieren
Installieren Sie die CRD für die NVIDIA-Compute-Domain und den DRA-Treiber. Weitere Informationen finden Sie unter NVIDIA DRA Driver for GPUs.
Prüfen Sie, ob Helm in Ihrer Entwicklungsumgebung installiert ist. Helm ist in der Cloud Shell vorinstalliert.
Es gibt keine spezielle Helm-Versionsanforderung. Sie können jedoch mit dem folgenden Befehl prüfen, ob Helm installiert ist.
helm versionWenn die Ausgabe ähnlich wie
Command helm not foundist, können Sie die Helm-CLI mit diesem Befehl installieren:curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.shFügen Sie das NVIDIA-Helm-Repository hinzu:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateErstellen Sie ein
ResourceQuotafür den DRA-Treiber:export POD_QUOTA=POD_QUOTA kubectl create ns nvidia-dra-driver-gpu kubectl apply -n nvidia-dra-driver-gpu -f - << EOF apiVersion: v1 kind: ResourceQuota metadata: name: nvidia-dra-driver-gpu-quota spec: hard: pods: ${POD_QUOTA} scopeSelector: matchExpressions: - operator: In scopeName: PriorityClass values: - system-node-critical - system-cluster-critical EOFErsetzen Sie
POD_QUOTAdurch eine Zahl, die mindestens das Doppelte der Anzahl der A4X-Knoten im Cluster plus 1 ist. Wenn Sie beispielsweise 18 A4X-Knoten in Ihrem Cluster haben, müssen Sie die Variable auf mindestens 37 festlegen.Installieren Sie den DRA-Treiber:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="DRIVER_VERSION" \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ -f <(cat <<EOF nvidiaDriverRoot: /home/kubernetes/bin/nvidia resources: gpus: enabled: false controller: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "nvidia.com/gpu" operator: "DoesNotExist" kubeletPlugin: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-accelerator operator: In values: - nvidia-gb200 - key: kubernetes.io/arch operator: In values: - arm64 tolerations: - key: nvidia.com/gpu operator: Equal value: present effect: NoSchedule - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule EOF )Ersetzen Sie
DRIVER_VERSIONdurch Version 25.3.1 oder höher.
Arbeitslastmanifest für Multi-Networking, RDMA und die IMEX-Domain konfigurieren
Fügen Sie den Pod-Metadaten die folgenden Annotationen hinzu:
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"} ]So fügen Sie eine Knotenaffinitätsregel hinzu, um die Planung auf Arm-Knoten zu ermöglichen:
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - arm64Weitere Informationen finden Sie unter Arbeitslast für eine einzelne Architektur planen.
Fügen Sie der Pod-Spezifikation die folgenden Volumes hinzu:
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gibFügen Sie dem Container, der GPUs anfordert, die folgenden Mounts, Umgebungsvariablen und Ressourcen hinzu. Der Arbeitslastcontainer muss alle vier GPUs anfordern:
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia - name: gib mountPath: /usr/local/gib env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 4Erstellen Sie die ComputeDomain-Ressource für die Arbeitslast:
apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: a4x-compute-domain spec: numNodes: NUM_NODES channel: resourceClaimTemplate: name: a4x-compute-domain-channelErsetzen Sie
NUM_NODESdurch die Anzahl der Knoten, die für die Arbeitslast erforderlich sind.Geben Sie die ResourceClaimTemplate an, die der Pod verwenden soll:
spec: ... volumes: ... containers: - name: my-container ... resources: limits: nvidia.com/gpu: 4 claims: - name: compute-domain-channel ... resourceClaims: - name: compute-domain-channel resourceClaimTemplateName: a4x-compute-domain-channelLegen Sie alle erforderlichen Umgebungsvariablen fest, um NCCL zu konfigurieren. Verwenden Sie das folgende Shell-Skript aus dem Arbeitslastcontainer:
source /usr/local/gib/scripts/set_nccl_env.sh
Eine vollständige Pod-Spezifikation sieht so aus:
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
name: a4x-compute-domain
spec:
numNodes: NUM_NODES
channel:
resourceClaimTemplate:
name: a4x-compute-domain-channel
---
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
]
spec:
...
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 4
claims:
- name: compute-domain-channel
...
resourceClaims:
- name: compute-domain-channel
resourceClaimTemplateName: a4x-compute-domain-channel
Netzwerkleistung testen
Wir empfehlen, die Funktionalität der bereitgestellten Cluster zu prüfen. Verwenden Sie dazu NCCL/gIB-Tests, die NVIDIA Collective Communications Library (NCCL)-Tests sind, die für die Google-Umgebung optimiert wurden.
Nächste Schritte
- Informationen zum Planen von Arbeitslasten in Ihren GKE-Clustern mit TAS und Kueue finden Sie unter GKE-Arbeitslasten mit Topology Aware Scheduling planen.
- Informationen zum Verwalten häufiger Ereignisse, die für GKE-Cluster und KI-Arbeitslasten relevant sind, finden Sie unter KI-optimierte GKE-Cluster verwalten.