ist Teil einer Serie über verteilte KI über mehrere GPUs:

Einführung

Bevor wir uns mit fortgeschrittenen Parallelitätstechniken befassen, müssen wir die Schlüsseltechnologien verstehen, die es GPUs ermöglichen, miteinander zu kommunizieren.

Aber warum müssen GPUs überhaupt kommunizieren? Beim Coaching von KI-Modellen auf mehreren GPUs verarbeitet jede GPU unterschiedliche Datenstapel, aber alle müssen synchronisiert bleiben, indem sie während der Backpropagation Farbverläufe teilen oder Modellgewichte austauschen. Die Einzelheiten darüber, was wann kommuniziert wird, hängen von Ihrer Parallelitätsstrategie ab, die wir in den nächsten Blogbeiträgen ausführlich untersuchen werden. Bedenken Sie vorerst nur, dass modernes KI-Coaching kommunikationsintensiv ist und eine effiziente Datenübertragung von GPU zu GPU für die Leistung von entscheidender Bedeutung ist.

Der Kommunikationsstapel

PCIe

PCIe (Peripheral Part Interconnect Categorical) verbindet Erweiterungskarten wie GPUs über unabhängige serielle Punkt-zu-Punkt-Lanes mit dem Motherboard. Das bieten verschiedene PCIe-Generationen für eine GPU mit 16 Lanes:

  • Gen4 x16: ~32 GB/s bidirektional
  • Gen5 x16: ~64 GB/s bidirektional
  • Gen6 x16: ~128 GB/s bidirektional (zu Ihrer Data: 16 Lanes × 8 GB/s/Lane = 128 GB/s)

Excessive-Finish-Server-CPUs bieten typischerweise 128 PCIe-Lanes und moderne GPUs benötigen 16 Lanes für optimale Bandbreite. Aus diesem Grund sehen Sie normalerweise 8 GPUs professional Server (128 = 16 x 8). Der Stromverbrauch und der physische Platz im Servergehäuse machen es außerdem unpraktisch, mehr als 8 GPUs in einem einzelnen Knoten zu verwenden.

NVLink

NVLink ermöglicht die direkte GPU-zu-GPU-Kommunikation innerhalb desselben Servers (Knotens) unter vollständiger Umgehung der CPU. Diese von NVIDIA entwickelte Verbindung schafft einen direkten Speicher-zu-Speicher-Pfad zwischen GPUs mit enormer Bandbreite:

  • NVLink 3 (A100): ~600 GB/s professional GPU
  • NVLink 4 (H100): ~900 GB/s professional GPU
  • NVLink 5 (Blackwell): Bis zu 1,8 TB/s professional GPU
Quelle: GitHub (MIT-Lizenz)

Hinweis: auf NVLink für die CPU-GPU-Kommunikation

Bestimmte CPU-Architekturen unterstützen NVLink als PCIe-Ersatz und beschleunigen die CPU-GPU-Kommunikation erheblich, indem der PCIe-Engpass bei Datenübertragungen überwunden wird, z. B. beim Verschieben von Trainingsstapeln von der CPU auf die GPU. Diese CPU-GPU-NVLink-Funktion macht CPU-Offloading (eine Technik, die VRAM spart, indem Daten stattdessen im RAM gespeichert werden) für reale KI-Anwendungen praktisch. Da die Skalierung des RAM in der Regel kostengünstiger ist als die Skalierung des VRAM, bietet dieser Ansatz erhebliche wirtschaftliche Vorteile.

Zu den CPUs mit NVLink-Unterstützung gehören IBM POWER8, POWER9 und NVIDIA Grace.

Allerdings gibt es einen Haken. In einem Server mit 8x H100 muss jede GPU mit 7 anderen kommunizieren und diese 900 GB/s auf sieben Punkt-zu-Punkt-Verbindungen mit jeweils etwa 128 GB/s aufteilen. Hier kommt NVSwitch ins Spiel.

NVSwitch

NVSwitch fungiert als zentraler Hub für die GPU-Kommunikation und leitet Daten bei Bedarf dynamisch zwischen GPUs weiter (wechselt, wenn Sie so wollen). Mit NVSwitch kann jede Hopper-GPU mit 900 GB/s gleichzeitig mit allen anderen Hopper-GPUs kommunizieren, d. h. die Spitzenbandbreite hängt nicht davon ab, wie viele GPUs kommunizieren. Dies macht NVSwitch „nicht blockierend“. Jede GPU stellt über mehrere NVLink-Verbindungen eine Verbindung zu mehreren NVSwitch-Chips her und sorgt so für maximale Bandbreite.

Während NVSwitch als knoteninterne Lösung begann, wurde es erweitert, um mehrere Knoten miteinander zu verbinden und GPU-Cluster zu schaffen, die bis zu 256 GPUs mit All-to-All-Kommunikation bei nahezu lokalen NVLink-Geschwindigkeiten unterstützen.

Die Generationen von NVSwitch sind:

  • Erste Era: Unterstützt bis zu 16 GPUs professional Server (kompatibel mit Tesla V100)
  • Zweite Era: Unterstützt auch bis zu 16 GPUs mit verbesserter Bandbreite und geringerer Latenz
  • Dritte Era: Entwickelt für H100-GPUs, unterstützt bis zu 256 GPUs

InfiniBand

InfiniBand übernimmt die Kommunikation zwischen Knoten. Obwohl es viel langsamer (und billiger) als NVSwitch ist, wird es häufig in Rechenzentren zur Skalierung auf Tausende von GPUs verwendet. Modernes InfiniBand unterstützt NVIDIA GPUDirect® RDMA (Distant Direct Reminiscence Entry), sodass Netzwerkadapter ohne CPU-Beteiligung direkt auf den GPU-Speicher zugreifen können (kein teures Kopieren in den Host-RAM).

Zu den aktuellen InfiniBand-Geschwindigkeiten gehören:

  • HDR: ~25 GB/s professional Port
  • NDR: ~50 GB/s professional Port
  • NDR200: ~100 GB/s professional Port

Diese Geschwindigkeiten sind aufgrund des Netzwerkprotokoll-Overheads und der Notwendigkeit zweier PCIe-Durchläufe (einer beim Sender und einer beim Empfänger) deutlich langsamer als bei knoteninternem NVLink.

Wichtige Designprinzipien

Lineare Skalierung verstehen

Die lineare Skalierung ist der heilige Gral des verteilten Rechnens. Vereinfacht ausgedrückt bedeutet dies, dass eine Verdoppelung Ihrer GPUs Ihren Durchsatz verdoppeln und Ihre Trainingszeit halbieren sollte. Dies geschieht, wenn der Kommunikationsaufwand im Vergleich zur Rechenzeit minimal ist und jede GPU mit voller Kapazität arbeiten kann. Allerdings ist eine perfekte lineare Skalierung bei KI-Workloads selten, da die Kommunikationsanforderungen mit der Anzahl der Geräte wachsen und es normalerweise unmöglich ist, eine perfekte Überlappung zwischen Pc und Kommunikation zu erreichen (wird im Folgenden erläutert).

Die Bedeutung der Überschneidung von Pc und Kommunikation

Wenn eine GPU im Leerlauf darauf wartet, dass Daten übertragen werden, bevor sie verarbeitet werden können, verschwenden Sie Ressourcen. Kommunikationsvorgänge sollten sich so weit wie möglich mit Berechnungen überschneiden. Wenn dies nicht möglich ist, bezeichnen wir diese Kommunikation als „exponierte Operation“.

Intra-Node vs. Inter-Node: Die Efficiency-Klippe

Moderne Motherboards der Serverklasse unterstützen bis zu 8 GPUs. Innerhalb dieses Bereichs können Sie dank der knoteninternen Kommunikation mit hoher Bandbreite und geringer Latenz oft eine nahezu lineare Skalierung erreichen.

Sobald Sie über 8 GPUs hinaus skalieren und mehrere über InfiniBand verbundene Knoten verwenden, werden Sie einen starken Leistungsabfall feststellen. Die Kommunikation zwischen Knoten ist viel langsamer als NVLink zwischen Knoten, was zu Netzwerkprotokoll-Overhead, höherer Latenz und Bandbreitenbeschränkungen führt. Wenn Sie weitere GPUs hinzufügen, muss sich jede GPU mit mehr Friends koordinieren, sodass mehr Zeit im Leerlauf auf den Abschluss der Datenübertragungen wartet.

Abschluss

Folgen Sie mir auf X für weitere kostenlose KI-Inhalte @l_cesconetto

Herzlichen Glückwunsch, dass Sie es bis zum Ende geschafft haben! In diesem Beitrag haben Sie Folgendes erfahren:

  • Die Grundlagen der CPU-GPU- und GPU-GPU-Kommunikation:
    • PCIe, NVLink, NVSwitch und InfiniBand
  • Wichtige Designprinzipien für verteiltes GPU-Computing
  • Sie sind jetzt in der Lage, beim Entwerfen Ihrer KI-Workloads wesentlich fundiertere Entscheidungen zu treffen

Im nächsten Blogbeitrag befassen wir uns mit unserer ersten Parallelitätstechnik, der Distributed Knowledge Parallelism.

  1. NVIDIA-Weblog
  2. GPU Direct

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert