Sie können höhere Netzwerkbandbreiten von mindestens 100 Gbit/s verwenden, um die Leistung verteilter Arbeitslasten zu verbessern, die auf Ihren GPU-VMs ausgeführt werden.
Für VMs mit angehängten GPUs in Compute Engine sind folgende höhere Netzwerkbandbreiten verfügbar:
- Bei N1-VMs für allgemeine Zwecke, an die T4- und V100-GPUs angeschlossen sind, können Sie basierend auf der Kombination aus GPU und Anzahl der vCPUs eine maximale Netzwerkbandbreite von bis zu 100 Gbit/s erhalten.
- Bei beschleunigungsoptimierten A2- und G2-VMs können Sie je nach Maschinentyp eine maximale Netzwerkbandbreite von bis zu 100 Gbit/s erhalten.
- Für beschleunigungsoptimierte A3-VMs können Sie eine maximale Netzwerkbandbreite von bis zu 1.800 Gbit/s erhalten.
Informationen zu den Konfigurationen oder Maschinentypen, die diese höheren Netzwerkbandbreiten unterstützen, finden Sie unter Netzwerkbandbreiten und GPUs.
Allgemeine Informationen zur Netzwerkbandbreite in der Compute Engine finden Sie unter Netzwerkbandbreite.
Übersicht
Führen Sie die folgenden empfohlenen Schritte aus, um die für jede GPU-VM verfügbare höhere Netzwerkbandbreite zu nutzen:
- Erstellen Sie Ihre GPU-VM mit einem Betriebssystem-Image, das Google Virtual NIC (gVNIC) unterstützt. Für A3-VMs wird empfohlen, ein Container-Optimized OS-Image zu verwenden.
- Optional: Installieren Sie Fast Socket. Fast Socket verbessert die NCCL-Leistung in Netzwerken mit 100 Gbit/s oder mehr, indem die Konflikte zwischen mehreren TCP-Verbindungen reduziert werden. Auf einigen Deep Learning VM-Images (DLVM) ist Fast Socket vorinstalliert.
Deep Learning-VM-Images verwenden
Sie können Ihre VMs mit einem beliebigen GPU-unterstützten Image aus dem Deep Learning VM-Image-Projekt erstellen. Auf allen GPU-unterstützten DLVM-Images sind der GPU-Treiber, die ML-Software und das gVNIC vorinstalliert. Eine Liste der DLVM-Images finden Sie unter Image auswählen.
Wenn Sie Fast Socket verwenden möchten, können Sie ein DLVM-Image wie tf-latest-gpu-debian-10
oder tf-latest-gpu-ubuntu-1804
auswählen.
VMs mit höherer Netzwerkbandbreite erstellen
Für höhere Netzwerkbandbreiten wird empfohlen, Google Virtual NIC (gVNIC) zu aktivieren. Weitere Informationen finden Sie unter Google Virtual NIC verwenden.
Für A3-VMs ist gVNIC-Version 1.4.0rc3 oder höher erforderlich. Diese Treiberversion ist auf Container-Optimized OS verfügbar. Für alle anderen Betriebssysteme müssen Sie gVNIC Version 1.4.0rc3 oder höher installieren.
So erstellen Sie eine VM mit angeschlossenen GPUs und einer höheren Netzwerkbandbreite:
- Sehen Sie sich die maximal verfügbare Netzwerkbandbreite für jeden Maschinentyp mit angeschlossenen GPUs an.
Erstellen Sie die GPU-VM. In den folgenden Beispielen wird gezeigt, wie A3, A2 und N1 mit angehängten V100-VMs erstellt werden.
In diesen Beispielen werden VMs mithilfe der Google Cloud CLI erstellt. Alternativ können Sie zum Erstellen dieser VMs auch die Google Cloud Console oder die Compute Engine API verwenden. Weitere Informationen zum Erstellen von GPU-VMs finden Sie unter VM mit angehängten GPUs erstellen.
A3 (H100)
Eine ausführliche Anleitung zum Einrichten von A3-VMs zur Maximierung der Netzwerkleistung finden Sie unter den folgenden Links:
- Informationen zu
a3-edgegpu-8g
- unda3-highgpu-8g
-VMs finden Sie unter A3-VM mit aktiviertem GPUDirect-TCPX erstellen. - Informationen zu
a3-megagpu-8g
-VMs finden Sie unter A3 Mega Slurm-Cluster für ML-Training bereitstellen.
A2 (A100)
Führen Sie beispielsweise den folgenden Befehl aus, um eine VM mit einer maximalen Bandbreite von 100 Gbit/s, acht AA-GPUs und dem DLVM-Image
tf-latest-gpu
zu erstellen:gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --machine-type=a2-highgpu-8g \ --maintenance-policy=TERMINATE --restart-on-failure \ --image-family=tf-latest-gpu \ --image-project=deeplearning-platform-release \ --boot-disk-size=200GB \ --network-interface=nic-type=GVNIC \ --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \ --scopes=https://www.googleapis.com/auth/cloud-platform
Dabei gilt:
VM_NAME
ist der Name Ihrer VM.PROJECT_ID
ist Ihre Projekt-ID.ZONE
ist die Zone für die VM. Diese Zone muss den angegebenen GPU-Typ unterstützen. Weitere Informationen zu Zonen finden Sie unter GPU-Regionen und Zonenverfügbarkeit.
N1 (V100)
Wenn Sie beispielsweise eine VM mit einer maximalen Bandbreite von 100 Gbit/s, acht V100-GPUs und dem DLVM-Image
tf-latest-gpu
erstellen möchten, führen Sie den folgenden Befehl aus:gcloud compute instances create VM_NAME \ --project PROJECT_ID \ --custom-cpu 96 \ --custom-memory 624 \ --image-project=deeplearning-platform-release \ --image-family=tf-latest-gpu \ --accelerator type=nvidia-tesla-v100,count=8 \ --maintenance-policy TERMINATE \ --metadata="install-nvidia-driver=True" \ --boot-disk-size 200GB \ --network-interface=nic-type=GVNIC \ --zone=ZONE
- Informationen zu
Wenn Sie keine GPU-unterstützten Deep Learning-VM-Images oder Container-Optimized OS verwenden, installieren Sie GPU-Treiber. Weitere Informationen finden Sie unter GPU-Treiber installieren.
Optional: Installieren Sie Fast Socket auf der VM.
Nach dem Erstellen der VM-Instanz können Sie die Netzwerkbandbreite prüfen.
Installieren Sie Fast Socket.
Die NVIDIA Collective Communications Library (NCCL) wird von Deep-Learning-Frameworks wie TensorFlow, PyTorch und Horovod für Training mit mehreren GPUs und Knoten verwendet.
Fast Socket ist ein Google-eigener Netzwerktransport für NCCL. In Compute Engine verbessert Fast Socket die Leistung von NCCL in 100-Gbit/s-Netzwerken durch Reduzierung der Konflikte zwischen mehreren TCP-Verbindungen. Weitere Informationen zur Arbeit mit NCCL finden Sie im NCCL-Nutzerhandbuch.
Die aktuelle Evaluierung zeigt, dass Fast Socket den Gesamtdurchsatz um 30 % bis 60 % abhängig von der Nachrichtengröße verbessert.
Zum Einrichten einer Fast Socket-Umgebung können Sie entweder ein Deep Learning-VM-Image mit vorinstalliertem Fast Socket oder Fast Socket manuell auf einer Linux-VM installieren. Informationen dazu, ob Fast Socket vorinstalliert ist, finden Sie unter Aktivierung von Fast Socket prüfen.
Bevor Sie Fast Socket auf einer Linux-VM installieren, müssen Sie NCCL installieren. Eine ausführliche Anleitung finden Sie in der NVIDIA NCCL-Dokumentation.
CentOS/RHEL
Führen Sie die folgenden Schritte aus, um Fast Socket auf einer CentOS- oder RHEL-VM herunterzuladen und zu installieren:
Fügen Sie das Paket-Repository hinzu und importieren Sie öffentliche Schlüssel.
sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM [google-fast-socket] name=Fast Socket Transport for NCCL baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
Installieren Sie Fast Socket.
sudo yum install google-fast-socket
Prüfen Sie, ob Fast Socket aktiviert ist.
SLES
Führen Sie die folgenden Schritte aus, um Fast Socket auf einer SLES-VM herunterzuladen und zu installieren:
Fügen Sie das Paket-Repository hinzu.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
Fügen Sie Repository-Schlüssel hinzu.
sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Installieren Sie Fast Socket.
sudo zypper install google-fast-socket
Prüfen Sie, ob Fast Socket aktiviert ist.
Debian/Ubuntu
Führen Sie die folgenden Schritte aus, um Fast Socket auf eine Debian- oder Ubuntu-VM herunterzuladen und zu installieren:
Fügen Sie das Paket-Repository hinzu.
echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
Fügen Sie Repository-Schlüssel hinzu.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Installieren Sie Fast Socket.
sudo apt update && sudo apt install google-fast-socket
Prüfen Sie, ob Fast Socket aktiviert ist.
Aktivierung von Fast Socket prüfen
Führen Sie auf Ihrer VM die folgenden Schritte aus:
Suchen Sie das NCCL-Basisverzeichnis.
sudo ldconfig -p | grep nccl
Auf einem DLVM-Image erhalten Sie beispielsweise die folgende Ausgabe:
libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2 libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so
Hier sehen Sie, dass das NCCL-Basisverzeichnis
/usr/local/nccl2
ist.Prüfen Sie, ob NCCL das Fast Socket-Plug-in lädt. Dafür müssen Sie das NCCL-Testpaket herunterladen. Führen Sie den folgenden Befehl aus, um das Testpaket herunterzuladen:
git clone https://github.com/NVIDIA/nccl-tests.git && \ cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY
Ersetzen Sie
NCCL_HOME_DIRECTORY
durch das NCCL-Basisverzeichnis.Führen Sie im Verzeichnis
nccl-tests
den Prozessall_reduce_perf
aus:NCCL_DEBUG=INFO build/all_reduce_perf
Wenn Fast Socket aktiviert ist, wird im Ausgabelog die Nachricht
FastSocket plugin initialized
angezeigt.# nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1 # # Using devices # Rank 0 Pid 63324 on fast-socket-gpu device 0 [0x00] Tesla V100-SXM2-16GB ..... fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled. fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized ......
Netzwerkbandbreite prüfen
Wenn Sie mit GPUs mit hoher Bandbreite arbeiten, können Sie ein Netzwerktraffic-Tool wie iperf2 verwenden, um die Netzwerkbandbreite zu messen.
Zur Prüfung von Bandbreitengeschwindigkeiten benötigen Sie mindestens zwei VM mit angeschlossenen GPUs, die die getestete Bandbreitengeschwindigkeit unterstützen.
Führen Sie mit iPerf auf Debian-basierten Systemen den Benchmark durch.
Zwei VMs erstellen, die die erforderlichen Bandbreitengeschwindigkeiten unterstützen.
Wenn beide VMs ausgeführt werden, stellen Sie eine SSH-Verbindung zu einer der VMs her.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Dabei gilt:
VM_NAME
ist der Name der ersten VMPROJECT_ID
: Ihre Projekt-ID
Führen Sie auf der ersten VM die folgenden Schritte aus:
Installieren Sie
iperf
.sudo apt-get update && sudo apt-get install iperf
Rufen Sie die interne IP-Adresse für diese VM ab. Behalten Sie den Überblick, in dem sie sie aufschreiben.
ip a
Starten Sie den iPerf-Server.
iperf -s
Dadurch wird ein Server gestartet, der die Verbindungen überwacht, um die Benchmark zu ermitteln. Lassen Sie dies für die Dauer des Tests ausgeführt.
Stellen Sie über ein neues Client-Terminal mit SSH eine Verbindung zur zweiten VM her.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Dabei gilt:
VM_NAME
ist der Name der zweiten VMPROJECT_ID
: Ihre Projekt-ID
Führen Sie auf der zweiten VM die folgenden Schritte aus:
Installieren Sie iPerf.
sudo apt-get update && sudo apt-get install iperf
Führen Sie den iperf-Test aus und geben Sie die IP-Adresse der ersten VM als Ziel an.
iperf -t 30 -c internal_ip_of_instance_1 -P 16
Dies führt einen 30-Sekunden-Test aus und generiert ein Ergebnis, das der folgenden Ausgabe ähnelt. Wenn iPerf die andere VM nicht erreichen kann, müssen Sie gegebenenfalls die Netzwerk- oder Firewall-Einstellungen auf den VMs oder in der Cloud Console anpassen.
Wenn Sie die maximal verfügbare Bandbreite von 100 Gbit/s oder 1.000 Gbit/s (A3) verwenden, beachten Sie Folgendes:
Aufgrund von Header-Overheads für Protokolle wie Ethernet, IP und TCP auf dem Virtualisierungs-Stack erreicht der Durchsatz, gemessen mit
netperf
, eine Leistung von etwa 90 Gbit/s oder 800 Gbit/s (A3). Im Allgemeinen als Goodput bezeichnet.TCP kann die Netzwerkgeschwindigkeit von 100 oder 1.000 Gbit/s erreichen. Andere Protokolle wie UDP sind langsamer.
Aufgrund von Faktoren wie Protokoll-Overhead und Netzwerküberlastung kann die End-to-End-Leistung von Datenstreams etwas geringer sein.
Sie müssen mehrere TCP-Streams verwenden, um die maximale Bandbreite zwischen VM-Instanzen zu erreichen. Google empfiehlt 4 bis 16 Streams. Bei 16 Abläufen wird der Durchsatz häufig maximiert. Je nach Anwendung und Software-Stack müssen Sie möglicherweise die Einstellungen für Ihre Anwendung oder Ihren Code anpassen, um mehrere Streams einzurichten.
Nächste Schritte
- Mehr zum Monitoring der GPU-Leistung finden Sie unter Monitoring der GPU-Leistung.
- GPU-Hostwartungen