In diesem Dokument wird die Einrichtung für A3 Mega-, A3 High- oder A3 Edge-VM-Instanzen (virtuelle Maschinen) beschrieben, an die acht NVIDIA H100-GPUs angehängt sind und die eine der folgenden GPUDirect-Technologien verwenden: GPUDirect-TCPX oder GPUDirect-TCPXO. Informationen zum Erstellen einer A3 High-Instanz mit weniger als 8 GPUs finden Sie unter A3 High- oder A2-Instanz erstellen.
Die GPUDirect-Technologie, die Sie verwenden, hängt vom ausgewählten A3-Maschinentyp ab.
- GPUDirect-TCPXO: ist ein RDMA-ähnlicher, ausgelagerter Netzwerkstack, der auf A3 Mega-Maschinentypen (
a3-megagpu-8g) mit acht H100-GPUs unterstützt wird. - GPUDirect-TCPX: Eine optimierte Version von Gast-TCP, die eine geringere Latenz bietet und auf A3 High- (
a3-highgpu-8g) und A3 Edge-Maschinentypen (a3-edgegpu-8g) mit acht H100-GPUs unterstützt wird.
Die accelerator-optimierte A3-Maschinenserie hat 208 vCPUs und bis zu 1.872 GB Arbeitsspeicher. Die Maschinentypen a3-megagpu-8g, a3-highgpu-8g und a3-edgegpu-8g bieten 80 GB GPU-Speicher pro GPU. Diese Maschinentypen können eine Netzwerkbandbreite von bis zu 1.800 Gbit/s nutzen. Sie eignen sich daher ideal für große transformerbasierte Sprachmodelle, Datenbanken und Hochleistungs-Computing (HPC).
Sowohl GPUDirect-TCPX als auch GPUDirect-TCPXO verwenden die NVIDIA GPUDirect-Technologie, um die Leistung zu steigern und die Latenz für Ihre A3-VMs zu verringern. Dies wird erreicht, indem Datennutzlasten direkt vom GPU-Speicher an die Netzwerkschnittstelle übertragen werden, ohne die CPU und den Systemspeicher zu durchlaufen. Dies ist eine Form von Remote Direct Memory Access (RDMA). In Kombination mit Google Virtual NIC (gVNIC) können A3-VMs im Vergleich zu den beschleunigungsoptimierten A2- oder G2-Maschinentypen der vorherigen Generation den höchsten Durchsatz zwischen VMs in einem Cluster erzielen.
In diesem Dokument wird beschrieben, wie Sie eine A3 Mega-, A3 High- oder A3 Edge-VM erstellen und entweder GPUDirect-TCPX oder GPUDirect-TCPXO aktivieren, um die verbesserte GPU-Netzwerkleistung zu testen.
Hinweise
- Informationen zu Einschränkungen und zusätzlichen erforderlichen Schritten zum Erstellen von Instanzen mit angehängten GPUs, z. B. zum Auswählen eines Betriebssystem-Images und zum Prüfen des GPU-Kontingents, finden Sie unter Übersicht zum Erstellen einer Instanz mit angehängten GPUs.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud Dienste und APIs überprüft. Zum Ausführen von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei der Compute Engine authentifizieren:
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud initWenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
- Set a default region and zone.
-
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) für das Projekt zu gewähren, um die Berechtigungen zu erhalten, die Sie für die Erstellung von VMs benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen von VMs erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die genau erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Folgende Berechtigungen sind zum Erstellen von VMs erforderlich:
compute.instances.createfür das Projekt-
Zum Erstellen der VM mit einem benutzerdefinierten Image:
compute.images.useReadOnlyfür das Image -
Zum Erstellen der VM mit einem Snapshot:
compute.snapshots.useReadOnlyfür den Snapshot -
Zum Erstellen der VM mit einer Instanzvorlage:
compute.instanceTemplates.useReadOnlyfür die Instanzvorlage -
Zum Angeben eines Subnetzes für Ihre VM:
compute.subnetworks.usefür das Projekt oder für das ausgewählte Subnetz -
Zum Festlegen einer statischen IP-Adresse für die VM:
compute.addresses.usefür das Projekt -
Zum Zuweisen einer externen IP-Adresse zur VM, wenn Sie ein VPC-Netzwerk verwenden:
compute.subnetworks.useExternalIpfür das Projekt oder für das ausgewählte Subnetz -
Zum Zuweisen eines Legacy-Netzwerks zur VM:
compute.networks.usefür das Projekt -
Zum Zuweisen einer externen IP-Adresse zur VM, wenn Sie ein Legacy-Netzwerk verwenden:
compute.networks.useExternalIpfür das Projekt -
Zum Festlegen von Metadaten der VM-Instanz für die VM:
compute.instances.setMetadatafür das Projekt -
Zum Festlegen von Tags für die VM:
compute.instances.setTagsfür die VM -
Zum Festlegen von Labels für die VM:
compute.instances.setLabelsfür die VM -
Zum Festlegen eines Dienstkontos für die VM:
compute.instances.setServiceAccountfür die VM -
Zum Erstellen eines neuen Laufwerks für die VM:
compute.disks.createfür das Projekt -
Zum Anhängen eines vorhandenen Laufwerks im Lese- oder Lese-/Schreibmodus:
compute.disks.usefür das Laufwerk -
Zum Anhängen eines vorhandenen Laufwerks im Lesemodus:
compute.disks.useReadOnlyfür das Laufwerk
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Übersicht
So testen Sie die Netzwerkleistung mit GPUDirect:
- Richten Sie ein oder mehrere VPC-Netzwerke (Virtual Private Cloud) mit einer großen konfigurierten MTU ein.
- Erstellen Sie Ihre GPU-Instanz.
VPC-Netzwerke einrichten
Damit Ihre GPU-VMs effizient kommunizieren können, müssen Sie ein Verwaltungsnetzwerk und ein oder mehrere Datennetzwerke erstellen. Das Verwaltungsnetzwerk wird für den externen Zugriff, z. B. SSH, und für die meisten allgemeinen Netzwerkkommunikationen verwendet. Die Datennetzwerke werden für die leistungsstarke Kommunikation zwischen den GPUs auf verschiedenen VMs verwendet, z. B. für RDMA-Traffic (Remote Direct Memory Access).
Für diese VPC-Netzwerke empfehlen wir, die maximale Übertragungseinheit (Maximum Transmission Unit, MTU) auf einen höheren Wert festzulegen. Höhere MTU-Werte steigern die Paketgröße und reduzieren den Paketheader-Overhead, wodurch der Nutzlastdatendurchsatz erhöht wird. Weitere Informationen zum Erstellen von VPC-Netzwerken finden Sie unter MTU-Netzwerk im Jumbo Frame erstellen und prüfen.
Verwaltungsnetzwerk, Subnetz und Firewallregel erstellen
Führen Sie die folgenden Schritte aus, um das Verwaltungsnetzwerk einzurichten:
Erstellen Sie das Verwaltungsnetzwerk mit dem Befehl
networks create:gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \ --project=PROJECT_ID \ --subnet-mode=custom \ --mtu=8244Erstellen Sie das Verwaltungssubnetz mit dem Befehl
networks subnets create:gcloud compute networks subnets create NETWORK_NAME_PREFIX-mgmt-sub \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --region=REGION \ --range=192.168.0.0/24Erstellen Sie Firewallregeln mit dem Befehl
firewall-rules create.Erstellen Sie eine Firewallregel für das Verwaltungsnetzwerk.
gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-internal \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16Erstellen Sie die Firewallregel
tcp:22, um einzuschränken, welche Quell-IP-Adressen eine SSH-Verbindung zu Ihrer VM herstellen können.gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ssh \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=SSH_SOURCE_IP_RANGEErstellen Sie die Firewallregel
icmp, mit der Sie nach Problemen mit der Datenübertragung im Netzwerk suchen können.gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ping \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=icmp \ --source-ranges=0.0.0.0/0
Ersetzen Sie Folgendes:
NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.PROJECT_ID: Ihre Projekt-ID.REGION: Die Region, in der Sie die Netzwerke erstellen möchten.SSH_SOURCE_IP_RANGE: IP-Bereich im CIDR-Format. Hier wird angegeben, welche Quell-IP-Adressen über SSH eine Verbindung zu Ihrer VM herstellen können.
Datennetzwerke, Subnetze und Firewallregeln erstellen
Die Anzahl der Datennetzwerke hängt vom Typ der GPU-Maschine ab, die Sie erstellen.A3 Mega
Für A3 Mega sind acht Datennetzwerke erforderlich. Verwenden Sie den folgenden Befehl, um acht Datennetzwerke jeweils mit Subnetzen und Firewallregeln zu erstellen.
for N in $(seq 1 8); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
--project=PROJECT_ID \
--subnet-mode=custom \
--mtu=8244
gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
--project=PROJECT_ID \
--network=NETWORK_NAME_PREFIX-data-net-$N \
--region=REGION \
--range=192.168.$N.0/24
gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
--project=PROJECT_ID \
--network=NETWORK_NAME_PREFIX-data-net-$N \
--action=ALLOW \
--rules=tcp:0-65535,udp:0-65535,icmp \
--source-ranges=192.168.0.0/16
done
A3 High und A3 Edge
Für A3 High und A3 Edge sind vier Datennetzwerke erforderlich. Verwenden Sie den folgenden Befehl, um vier Datennetzwerke jeweils mit Subnetzen und Firewallregeln zu erstellen.
for N in $(seq 1 4); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
--project=PROJECT_ID \
--subnet-mode=custom \
--mtu=8244
gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
--project=PROJECT_ID \
--network=NETWORK_NAME_PREFIX-data-net-$N \
--region=REGION \
--range=192.168.$N.0/24
gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
--project=PROJECT_ID \
--network=NETWORK_NAME_PREFIX-data-net-$N \
--action=ALLOW \
--rules=tcp:0-65535,udp:0-65535,icmp \
--source-ranges=192.168.0.0/16
done
A3 Mega-Instanzen erstellen (GPUDirect-TCPXO)
Erstellen Sie Ihre A3-Mega-Instanzen mit dem Container-Optimized OS-Image cos-121-lts oder höher.
COS
Wenn Sie die Netzwerkleistung mit GPUDirect-TCPXO testen möchten, müssen Sie mindestens zwei A3 Mega-VM-Instanzen erstellen.
Erstellen Sie jede VM mit dem Container-Optimized OS-Image cos-121-lts oder höher und geben Sie die VPC-Netzwerke an, die Sie im vorherigen Schritt erstellt haben.
A3 Mega-VMs benötigen neun Google Virtual NIC-Netzwerkschnittstellen (gVNIC), eine für das Verwaltungsnetzwerk und acht für die Datennetzwerke.
Wählen Sie je nach Bereitstellungsmodell, das Sie zum Erstellen der VM verwenden möchten, eine der folgenden Optionen aus:
Standard
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=a3-megagpu-8g \
--maintenance-policy=TERMINATE \
--restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM-Instanz.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.
Spot
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=a3-megagpu-8g \
--maintenance-policy=TERMINATE \
--restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
--provisioning-model=SPOT \
--instance-termination-action=TERMINATION_ACTION
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM-Instanz.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM bei einem Preemption-Ereignis beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
Flex-Start
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=a3-megagpu-8g \
--maintenance-policy=TERMINATE \
--restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
--provisioning-model=FLEX_START \
--instance-termination-action=TERMINATION_ACTION \
--max-run-duration=RUN_DURATION \
--request-valid-for-duration=VALID_FOR_DURATION \
--reservation-affinity=none
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM-Instanz.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM am Ende der Laufzeit beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
RUN_DURATION: Die maximale Zeit, die die VM ausgeführt wird, bevor Compute Engine sie beendet oder löscht. Sie müssen den Wert als Anzahl der Tage, Stunden, Minuten oder Sekunden gefolgt vond,h,mbzw.sformatieren. Ein Wert von30mdefiniert beispielsweise eine Zeit von 30 Minuten und ein Wert von1h2m3seine Zeit von einer Stunde, zwei Minuten und drei Sekunden. Sie können einen Wert zwischen 10 Minuten und 7 Tagen angeben.VALID_FOR_DURATION: Die maximale Wartezeit für die Bereitstellung der angeforderten Ressourcen. Sie müssen den Wert als Anzahl der Tage, Stunden, Minuten oder Sekunden gefolgt vond,h,mbzw.sformatieren. Geben Sie basierend auf den zonalen Anforderungen für Ihre Arbeitslast eine der folgenden Zeitspannen an, um die Wahrscheinlichkeit zu erhöhen, dass Ihre Anfrage zum Erstellen von VMs erfolgreich ist:- Wenn für Ihre Arbeitslast die Erstellung der VM in einer bestimmten Zone erforderlich ist, geben Sie eine Dauer zwischen 90 Sekunden (
90s) und zwei Stunden (2h) an. Bei längeren Zeiträumen ist die Wahrscheinlichkeit höher, dass Sie Ressourcen erhalten. - Wenn die VM in einer beliebigen Zone innerhalb der Region ausgeführt werden kann, geben Sie eine Dauer von null Sekunden (
0s) an. Dieser Wert gibt an, dass Compute Engine Ressourcen nur zuweist, wenn sie sofort verfügbar sind. Wenn die Erstellungsanfrage fehlschlägt, weil Ressourcen nicht verfügbar sind, wiederholen Sie die Anfrage in einer anderen Zone.
- Wenn für Ihre Arbeitslast die Erstellung der VM in einer bestimmten Zone erforderlich ist, geben Sie eine Dauer zwischen 90 Sekunden (
Reservierungsgebunden
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=a3-megagpu-8g \
--maintenance-policy=TERMINATE \
--restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
--provisioning-model=RESERVATION_BOUND \
--instance-termination-action=TERMINATION_ACTION \
--reservation-affinity=specific \
--reservation=RESERVATION_URL
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM-Instanz.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM am Ende des Reservierungszeitraums beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
RESERVATION_URL: die URL der Reservierung, die Sie nutzen möchten. Geben Sie einen der folgenden Werte an:- Wenn Sie die Reservierung im selben Projekt erstellt haben:
example-reservation - Wenn sich die Reservierung in einem anderen Projekt befindet und
Ihr Projekt sie verwenden kann:
projects/PROJECT_ID/reservations/example-reservation.
- Wenn Sie die Reservierung im selben Projekt erstellt haben:
GPU-Treiber installieren
Installieren Sie die GPU-Treiber auf jeder A3 Mega-VM.
Installieren Sie die NVIDIA-GPU-Treiber.
sudo cos-extensions install gpu -- --version=latest
Hängen Sie den Pfad wieder ein.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidia
NICs Zugriff auf die GPUs gewähren
Gewähren Sie auf jeder A3-Mega-VM den NICs Zugriff auf die GPUs.
- Passen Sie die Firewalleinstellungen an, um alle eingehenden TCP-Verbindungen zu akzeptieren und die Kommunikation zwischen den Knoten in Ihrem Cluster zu ermöglichen:
sudo /sbin/iptables -I INPUT -p tcp -m tcp -j ACCEPT
- Konfigurieren Sie das Modul
dmabuf. Laden Sie das Modulimport-helper, das Teil desdmabuf-Frameworks ist. Dieses Framework ermöglicht die schnelle, kopierfreie gemeinsame Nutzung des Arbeitsspeichers zwischen der GPU und der Netzwerkkarte (Network Interface Card, NIC), einer wichtigen Komponente für die GPUDirect-Technologie:sudo modprobe import-helper
- Konfigurieren Sie Docker für die Authentifizierung von Anfragen an Artifact Registry.
docker-credential-gcr configure-docker --registries us-docker.pkg.dev
- Starten Sie
RxDMim Container.RxDMist ein Verwaltungsdienst, der neben der GPU-Anwendung ausgeführt wird, um den GPU-Arbeitsspeicher zu verwalten. Dieser Dienst reserviert und verwaltet GPU-Arbeitsspeicher für eingehenden Netzwerkverkehr. Das ist ein wichtiger Bestandteil der GPUDirect-Technologie und für Hochleistungsnetzwerke unerlässlich. Starten Sie einen Docker-Container mit dem Namenrxdm:docker run --pull=always --rm --detach --name rxdm \ --network=host --cap-add=NET_ADMIN \ --privileged \ --volume /var/lib/nvidia:/usr/local/nvidia \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \ us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.19 \ --num_hops=2 --num_nics=8Führen Sie den Befehl aus, um zu prüfen, ob
RxDMerfolgreich gestartet wurde. Warten Sie, bis die Meldung „Buffer manager initialization complete“ (Pufferverwaltung initialisiert) angezeigt wird, um die erfolgreiche Initialisierung vonRxDMzu bestätigen.docker container logs --follow rxdm
Alternativ können Sie das Protokoll zum Abschluss der
RxDM-Initialisierung prüfen.docker container logs rxdm 2>&1 | grep "Buffer manager initialization complete"
NCCL-Umgebung einrichten
Führen Sie auf jeder A3-Mega-VM die folgenden Schritte aus:
- Installieren Sie die
nccl-net-Bibliothek, ein Plug-in für NCCL, das die GPUDirect-Kommunikation über das Netzwerk ermöglicht.Mit dem folgenden Befehl wird das Installationsprogramm-Image abgerufen und die erforderlichen Bibliotheksdateien in/var/lib/tcpxo/lib64/installiert.NCCL_NET_IMAGE="us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.13-1" docker run --pull=always --rm --privileged \ --network=host --cap-add=NET_ADMIN \ --volume /var/lib/nvidia:/usr/local/nvidia \ --volume /var/lib:/var/lib \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \ ${NCCL_NET_IMAGE} install --install-nccl sudo mount --bind /var/lib/tcpxo /var/lib/tcpxo && sudo mount -o remount,exec /var/lib/tcpxo - Starten Sie einen dedizierten Container
nccl-testsfür NCCL-Tests. Dieser Container ist mit den erforderlichen Tools und Dienstprogrammskripten vorkonfiguriert und bietet so eine saubere und konsistente Umgebung zum Überprüfen der GPUDirect-Einrichtungsleistung.Bei diesem Befehl wird die Variable
NCCL_NET_IMAGEwiederverwendet, die Sie im vorherigen Schritt festgelegt haben.docker run --pull=always --rm --detach --name nccl \ --network=host --cap-add=NET_ADMIN \ --privileged \ --volume /var/lib/nvidia:/usr/local/nvidia \ --volume /var/lib/tcpxo:/var/lib/tcpxo \ --shm-size=8g \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \ ${NCCL_NET_IMAGE} daemon
Benchmark „nccl-tests“ ausführen
Führen Sie auf einer einzelnen A3 Mega-VM die folgenden Schritte aus, um den Benchmark „nccl-tests“ auszuführen:
- Öffnen Sie eine interaktive Bash-Shell im Container
nccl-tests.docker exec -it nccl bash
- Konfigurieren Sie die Umgebung für einen Lauf mit mehreren Knoten, indem Sie SSH einrichten und Hostdateien generieren. Ersetzen Sie
VM_NAME_1undVM_NAME_2durch die Namen der einzelnen VMs./scripts/init_ssh.sh VM_NAME_1 VM_NAME_2 /scripts/gen_hostfiles.sh VM_NAME_1 VM_NAME_2
Dadurch wird ein Verzeichnis mit dem Namen
/scripts/hostfiles2erstellt. - Führen Sie den
all_gather_perf-Benchmark aus, um die kollektive Kommunikationsleistung zu messen:/scripts/run-nccl-tcpxo.sh all_gather_perf "${LD_LIBRARY_PATH}" 8 eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8 1M 512M 3 2 10 8 2 10
Führen Sie in der Bash-Shell des nccl-tests-Containers die folgenden Schritte aus.
A3 High- und Edge-Instanzen erstellen (GPUDirect-TCPX)
Erstellen Sie Ihre A3-High- und Edge-Instanzen mit dem Container-Optimized OS-Image cos-121-lts oder höher.
COS
Wenn Sie die Netzwerkleistung mit GPUDirect-TCPX testen möchten, müssen Sie mindestens zwei A3 High- oder Edge-VMs erstellen. Erstellen Sie jede VM mit dem cos-121-lts-Image für Container-Optimized OS oder höher und geben Sie die VPC-Netzwerke an, die Sie im vorherigen Schritt erstellt haben.
Die VMs müssen die Netzwerkschnittstelle „Google Virtual NIC“ (gVNIC) verwenden. Für A3-High- oder Edge-VMs müssen Sie den gVNIC-Treiber ab Version 1.4.0rc3 verwenden. Diese Treiberversion ist auf Container-Optimized OS verfügbar. Die erste virtuelle NIC wird als primäre NIC für die allgemeine Netzwerk- und Speichernutzung verwendet. Die anderen vier virtuellen NICs sind NUMA-ausgerichtet und mit zwei der acht GPUs auf demselben PCIe-Switch verbunden.
Wählen Sie je nach Bereitstellungsmodell, das Sie zum Erstellen der VM verwenden möchten, eine der folgenden Optionen aus:
Standard
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--maintenance-policy=TERMINATE --restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.MACHINE_TYPE: der Maschinentyp für die VM. Geben Sie entwedera3-highgpu-8godera3-edgegpu-8gan.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.
Spot
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--maintenance-policy=TERMINATE --restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--provisioning-model=SPOT \
--instance-termination-action=TERMINATION_ACTION
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.MACHINE_TYPE: der Maschinentyp für die VM. Geben Sie entwedera3-highgpu-8godera3-edgegpu-8gan.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM bei einem Preemption-Ereignis beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
Flex-Start
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--maintenance-policy=TERMINATE --restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--provisioning-model=FLEX_START \
--instance-termination-action=TERMINATION_ACTION \
--max-run-duration=RUN_DURATION \
--request-valid-for-duration=VALID_FOR_DURATION \
--reservation-affinity=none
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.MACHINE_TYPE: der Maschinentyp für die VM. Geben Sie entwedera3-highgpu-8godera3-edgegpu-8gan.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM am Ende der Laufzeit beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
RUN_DURATION: Die maximale Zeit, die die VM ausgeführt wird, bevor Compute Engine sie beendet oder löscht. Sie müssen den Wert als Anzahl der Tage, Stunden, Minuten oder Sekunden gefolgt vond,h,mbzw.sformatieren. Ein Wert von30mdefiniert beispielsweise eine Zeit von 30 Minuten und ein Wert von1h2m3seine Zeit von einer Stunde, zwei Minuten und drei Sekunden. Sie können einen Wert zwischen 10 Minuten und 7 Tagen angeben.VALID_FOR_DURATION: Die maximale Wartezeit für die Bereitstellung der angeforderten Ressourcen. Sie müssen den Wert als Anzahl der Tage, Stunden, Minuten oder Sekunden gefolgt vond,h,mbzw.sformatieren. Geben Sie basierend auf den zonalen Anforderungen für Ihre Arbeitslast eine der folgenden Zeitspannen an, um die Wahrscheinlichkeit zu erhöhen, dass Ihre Anfrage zum Erstellen von VMs erfolgreich ist:- Wenn für Ihre Arbeitslast die Erstellung der VM in einer bestimmten Zone erforderlich ist, geben Sie eine Dauer zwischen 90 Sekunden (
90s) und zwei Stunden (2h) an. Bei längeren Zeiträumen ist die Wahrscheinlichkeit höher, dass Sie Ressourcen erhalten. - Wenn die VM in einer beliebigen Zone innerhalb der Region ausgeführt werden kann, geben Sie eine Dauer von null Sekunden (
0s) an. Dieser Wert gibt an, dass Compute Engine Ressourcen nur zuweist, wenn sie sofort verfügbar sind. Wenn die Erstellungsanfrage fehlschlägt, weil Ressourcen nicht verfügbar sind, wiederholen Sie die Anfrage in einer anderen Zone.
- Wenn für Ihre Arbeitslast die Erstellung der VM in einer bestimmten Zone erforderlich ist, geben Sie eine Dauer zwischen 90 Sekunden (
Reservierungsgebunden
gcloud compute instances create VM_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--maintenance-policy=TERMINATE --restart-on-failure \
--image-family=cos-121-lts \
--image-project=cos-cloud \
--boot-disk-size=BOOT_DISK_SIZE \
--metadata=cos-update-strategy=update_disabled \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
--network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
--provisioning-model=RESERVATION_BOUND \
--instance-termination-action=TERMINATION_ACTION \
--reservation-affinity=specific \
--reservation=RESERVATION_URL
Ersetzen Sie Folgendes:
VM_NAMEist der Name Ihrer VM.PROJECT_ID: die Projekt-ID.ZONE: eine Zone, die Ihren Maschinentyp unterstützt.MACHINE_TYPE: der Maschinentyp für die VM. Geben Sie entwedera3-highgpu-8godera3-edgegpu-8gan.BOOT_DISK_SIZE: die Größe des Bootlaufwerks in GB, z. B.50.NETWORK_NAME_PREFIX: Das Namenspräfix, das für die VPC-Netzwerke und -Subnetze verwendet werden soll.TERMINATION_ACTION: Gibt an, ob die VM am Ende des Reservierungszeitraums beendet oder gelöscht werden soll. Geben Sie einen der folgenden Werte an:- So beenden Sie die VM:
STOP - So löschen Sie die VM:
DELETE
- So beenden Sie die VM:
RESERVATION_URL: die URL der Reservierung, die Sie nutzen möchten. Geben Sie einen der folgenden Werte an:- Wenn Sie die Reservierung im selben Projekt erstellt haben:
example-reservation - Wenn sich die Reservierung in einem anderen Projekt befindet und
Ihr Projekt sie verwenden kann:
projects/PROJECT_ID/reservations/example-reservation.
- Wenn Sie die Reservierung im selben Projekt erstellt haben:
GPU-Treiber installieren
Führen Sie auf jeder A3-High- oder Edge-VM die folgenden Schritte aus.
- Führen Sie den folgenden Befehl aus, um die NVIDIA-GPU-Treiber zu installieren:
sudo cos-extensions install gpu -- --version=latest
- Mit dem folgenden Befehl können Sie den Pfad neu bereitstellen:
sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidia
NICs Zugriff auf die GPUs gewähren
Gewähren Sie auf jeder A3-High- oder Edge-VM den NICs Zugriff auf die GPUs. Gehen Sie dazu so vor:
- Konfigurieren Sie die Registry.
- Wenn Sie Container Registry verwenden, führen Sie den folgenden Befehl aus:
docker-credential-gcr configure-docker
- Wenn Sie Artifact Registry verwenden, führen Sie den folgenden Befehl aus:
docker-credential-gcr configure-docker --registries us-docker.pkg.dev
- Wenn Sie Container Registry verwenden, führen Sie den folgenden Befehl aus:
- Konfigurieren Sie den Manager für den Empfangsdatenpfad. Der Verwaltungsdienst „GPUDirect-TCPX Receive Data Path Manager“ muss neben den Anwendungen ausgeführt werden, die GPUDirect-TCPX verwenden. Führen Sie den folgenden Befehl aus, um den Dienst auf jeder VM mit Container-Optimized OS zu starten:
docker run --pull=always --rm \ --name receive-datapath-manager \ --detach \ --privileged \ --cap-add=NET_ADMIN --network=host \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \ --volume /run/tcpx:/run/tcpx \ --entrypoint /tcpgpudmarxd/build/app/tcpgpudmarxd \ us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd \ --gpu_nic_preset a3vm --gpu_shmem_type fd --uds_path "/run/tcpx" --setup_param "--verbose 128 2 0" - Prüfen Sie, ob der
receive-datapath-manager-Container gestartet wurde.docker container logs --follow receive-datapath-manager
Die Ausgabe sollte in etwa so aussehen:
I0000 00:00:1687813309.406064 1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
- Wenn Sie die Protokolle nicht mehr ansehen möchten, drücken Sie
ctrl-c. - Installieren Sie IP-Tabellenregeln.
sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
- Konfigurieren Sie die NVIDIA Collective Communications Library (NCCL) und das GPUDirect-TCPX-Plug-in.
Für die Verwendung von NCCL mit GPUDirect-TCPX-Unterstützung sind eine bestimmte NCCL-Bibliotheksversion und eine bestimmte Kombination aus GPUDirect-TCPX-Plug-in-Binärprogrammen erforderlich. Google Cloud hat Pakete bereitgestellt, die diese Anforderung erfüllen.
Führen Sie den folgenden Befehl aus, um das Google Cloud -Paket zu installieren:
docker run --rm -v /var/lib:/var/lib us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx install --install-nccl sudo mount --bind /var/lib/tcpx /var/lib/tcpx sudo mount -o remount,exec /var/lib/tcpx
Wenn dieser Befehl erfolgreich ist, werden die Dateien
libnccl-net.soundlibnccl.soim Verzeichnis/var/lib/tcpx/lib64abgelegt.
Tests ausführen
Führen Sie auf jeder A3-High- oder Edge-VM einen NCCL-Test aus. Gehen Sie dazu so vor:
- Starten Sie den Container.
#!/bin/bash function run_tcpx_container() { docker run \ -u 0 --network=host \ --cap-add=IPC_LOCK \ --userns=host \ --volume /run/tcpx:/tmp \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --volume /var/lib/tcpx/lib64:/usr/local/tcpx/lib64 \ --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/tcpx/lib64 \ "$@" }Mit dem vorherigen Befehl werden die folgenden Aufgaben ausgeführt:
- NVIDIA-Geräte von
/devim Container bereitstellen - Legt den Netzwerk-Namespace des Containers auf den Host fest
- Der Nutzer-Namespace des Containers wird auf „host“ festgelegt
- fügt dem Container die Funktion
CAP_IPC_LOCKhinzu /tmpdes Hosts wird auf/tmpdes Containers bereitgestellt- Der Installationspfad von NCCL und das GPUDirect-TCPX-NCCL-Plug-in werden im Container bereitgestellt und der bereitgestellte Pfad wird
LD_LIBRARY_PATHhinzugefügt
- NVIDIA-Geräte von
- Nachdem Sie den Container gestartet haben, können Anwendungen, die NCCL verwenden, innerhalb des Containers ausgeführt werden. So führen Sie beispielsweise den Test
run-allgatheraus:- Führen Sie auf jeder A3 High- oder Edge-VM Folgendes aus:
$ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
- Führen Sie auf einer VM die folgenden Befehle aus:
- Richten Sie eine Verbindung zwischen den VMs ein. Ersetzen Sie
VM-0undVM-1durch die Namen der einzelnen VMs./scripts/init_ssh.sh VM-0 VM-1 pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd
Dadurch wird auf jeder VM ein
/scripts/hostfiles2-Verzeichnis erstellt. - Führen Sie das Skript aus.
/scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2
- Richten Sie eine Verbindung zwischen den VMs ein. Ersetzen Sie
Die Ausführung des
run-allgather-Scripts dauert etwa zwei Minuten. Am Ende der Protokolle sehen Sie dieall-gather-Ergebnisse.Wenn Sie die folgende Zeile in Ihren NCCL-Protokollen sehen, wurde GPUDirect-TCPX erfolgreich initialisiert.
NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.
- Führen Sie auf jeder A3 High- oder Edge-VM Folgendes aus:
GPU mit mehreren Instanzen
Eine GPU mit mehreren Instanzen partitioniert eine einzelne NVIDIA-H100-GPU innerhalb derselben VM in bis zu sieben unabhängige GPU-Instanzen. Sie werden gleichzeitig ausgeführt, wobei jede Instanz über eigenen Arbeitsspeicher, Cache und eigene Streaming-Multiprozessoren verfügt. Mit dieser Konfiguration kann die NVIDIA H100-GPU eine konsistente Dienstqualität mit bis zu siebenmal höherer Leistung im Vergleich zu früheren GPU-Modellen bereitstellen.
Sie können bis zu sieben Multi-Instanz-GPUs erstellen. Bei H100-GPUs mit 80 GB werden jeder Multi-Instanz-GPU 10 GB Arbeitsspeicher zugewiesen.
Weitere Informationen zur Verwendung von Multi-Instanz-GPUs finden Sie im NVIDIA-Nutzerhandbuch für Multi-Instanz-GPUs.
Führen Sie folgende Schritte aus, um Multi-Instanz-GPUs zu erstellen:
Erstellen Sie Ihre A3 Mega-, A3 High- oder A3 Edge-Instanzen.
Installieren Sie die GPU-Treiber.
Aktivieren Sie den MIG-Modus. Eine Anleitung finden Sie unter MIG aktivieren.
Konfigurieren Sie Ihre GPU-Partitionen. Eine Anleitung finden Sie unter Mit GPU-Partitionen arbeiten.