Verwenden der topologieorientierten Planung in Amazon SageMaker HyperPod
Die Effizienz der Datenübertragung ist ein entscheidender Faktor für High Performance Computing (HPC) - und Machine-Learning-Workloads. Wenn Sie UltraServer mit Amazon SageMaker HyperPod verwenden, wendet SageMaker HyperPod automatisch Topologie-Labels auf Ihre Ressourcen an. Die topologieorientierte Planung hilft bei der Zuweisung von Ressourcen, um den Datenübertragungsaufwand zu minimieren, indem sowohl die Instance-Topologie (wie Ressourcen innerhalb einer Instance verbunden sind) als auch die Netzwerktopologie (wie Instances miteinander verbunden sind) berücksichtigt werden. Weitere Informationen zur Instance-Topologie finden Sie unter Instance-Topologie von Amazon EC2.
Die topologieorientierte Planung funktioniert mit beiden Clustern auf Slurm und Amazon EKS. Allgemeine Informationen darüber, wie Topologie mit Slurm funktioniert, finden Sie im Topologie-Leitfaden
In Amazon SageMaker HyperPod stammen die Kosten für die Datenübertragung in der Regel aus drei Hauptquellen:
-
Datenübertragung von GPU zu GPU: Moderne Technologien wie NVLink- und NVLink-Switches ermöglichen eine Datenübertragung mit hohem Durchsatz zwischen GPUs, ohne dass andere Rechenressourcen benötigt werden. Dies ist äußerst effizient, beschränkt sich jedoch normalerweise auf eine einzelne Instance.
-
Datenübertragung von GPU zu CPU: NUMA-Systeme (Non-Uniform Memory Access) verfügen über mehrere Systembusse auf einer einzigen Hauptplatine. In einer typischen EC2-Instance-Architektur wie p5.48xlarge gibt es zwei verschiedene Systembusse mit jeweils einer CPU und 4 GPUs. Für eine optimale Leistung sollten Prozesse, die Daten auf GPUs laden oder von ihnen lesen, auf einer CPU ausgeführt werden, die mit demselben Systembus wie die GPU verbunden ist.
-
Netzwerkkommunikation zwischen Instances: Instances übertragen Daten über eine Kette von Netzwerk-Switches. Der kürzeste Pfad entspricht in der Regel der niedrigsten Latenz.
UltraServer-Architektur
SageMaker HyperPod unterstützt die UltraServer-Architektur mit p6e-gb200.36xlarge-Instances. Ein UltraServer enthält bis zu 18 p6e-gb200.36xlarge-Instances mit 4 GPUs auf jeder Instance. Alle GPUs auf allen Knoten sind über NVLink-Switches miteinander verbunden, sodass die Datenübertragung zwischen zwei beliebigen GPUs ohne Netzwerkschnittstellen ermöglicht wird.
Diese Architektur bietet eine deutliche Leistungssteigerung im Vergleich zu einzelnen Instances. Um diese Architektur effektiv nutzen zu können, sollten Jobs von einem einzigen UltraServer aus an Rechenknoten übermittelt werden.
EKS-Topologie-Label
In Übereinstimmung mit der EC2-Instance-Topologie kennzeichnet HyperPod Ihre Knoten automatisch mit den folgenden Labels:
-
topology.kubernetes.io/region — das, in dem sich der Knoten befindet. AWS-Region
-
topology.kubernetes.io/zone — Die Availability Zone, in der sich der Knoten befindet.
-
topology.k8s.aws/network-node-layer — NetworkNodes beschreibt den Netzwerkknotensatz einer Instance. In jedem Netzwerkknotensatz sind die Netzwerkknoten absteigend in hierarchischer Reihenfolge aufgeführt. Der mit der Instance verbundene Netzwerkknoten ist der letzte Netzwerkknoten in der Liste. Es gibt bis zu vier Netzwerkknotenschichten, und jeder Knoten ist mit einer Bezeichnung gekennzeichnet. Verfügbare Ebenen sind
topology.k8s.aws/network-node-layer-1,topology.k8s.aws/network-node-layer-2,topology.k8s.aws/network-node-layer-3. -
topology.k8s.aws/ultraserver-id — Ein Bezeichner, der verwendet wird, um alle Instances zu kennzeichnen, die zu derselben NVLink-Domain in einem Ultraserver gehören. Weitere Informationen zur Verwendung von UltraServers mit SageMaker HyperPod finden Sie unter Verwenden von UltraServern in Amazon SageMaker HyperPod.
Mithilfe dieser Labels können Sie die topologieorientierte Planung in der HyperPod Task Governance nutzen, um Topologiebezeichnungen und Anmerkungen anzubringen, um die Trainingseffizienz Ihrer Workloads zu optimieren. Weitere Informationen finden Sie unter Verwenden von topologieorientierter Planung in Amazon SageMaker HyperPod Task Governance.
Slurm-Netzwerktopologie-Plugins
Slurm bietet integrierte Plugins zur Erkennung der Netzwerktopologie. Die UltraServer-Architektur in SageMaker HyperPod unterstützt das Block-Plugin.
Verwenden des Topologie-/Block-Plugins
NVIDIA hat ein Topologie-/Block-Plugin entwickelt, das eine hierarchische Planung für Knotenblöcke mit den folgenden Merkmalen ermöglicht:
Ein Block ist ein aufeinanderfolgender Bereich von Knoten
Blöcke können sich nicht überlappen
Alle Knoten in einem Block werden einem Job zugewiesen, bevor der nächste Block verwendet wird
Die Planungsblockgröße ist die kleinste konfigurierte Blockgröße
Jede höhere Blockebenengröße ist eine Zweierpotenz als die vorherige
Dieses Plugin weist Knoten auf der Grundlage der definierten Netzwerktopologie zu.
Konfiguration
Um die topologieorientierte Planung mit dem Topologie-/Block-Plugin zu konfigurieren,
-
SageMaker HyperPod konfiguriert das Topologie-/Block-Plugin automatisch. Wenn Sie das Plugin konfigurieren möchten, geben Sie Folgendes in der Datei topology.conf in Ihrem Slurm-Konfigurationsverzeichnis an:
BlockName=us1 Nodes=ultraserver1-[0-17] BlockName=us2 Nodes=ultraserver2-[0-17] BlockSizes=18 -
Stellen Sie sicher, dass Ihr Paket beinhaltet:
slurm.confTopologyPlugin=topology/block
Verwendung
Beim Einreichen von Jobs können Sie die folgenden zusätzlichen Argumente mit den srun Befehlen sbatch und verwenden:
--segment=N: Geben Sie die Anzahl der Knoten an, die gruppiert werden sollen. Die Größe des Segments muss kleiner oder gleich der Größe des Planungsblocks sein.--exclusive=topo: Fordert an, dass keine anderen Jobs im selben Block platziert werden. Dies ist nützlich für Benchmarking und leistungsabhängige Anwendungen.
Im Folgenden finden Sie Beispielszenarien, die Sie in Betracht ziehen könnten, wenn Sie über die Zuweisung von Blöcken nachdenken.
Ordnen Sie einem leeren System einen ganzen Block von Knoten zu
sbatch -N18
Ordnen Sie einem leeren System zwei Knotenblöcke zu
sbatch -N36
Ordnen Sie einem Block 18 Knoten zu + 6 Knoten einem anderen Block
sbatch -N24
Ordnen Sie einem Block 12 Knoten und einem anderen Block 12 Knoten zu
sbatch -N24 —segment=12
Mit —exclusive=topo muss der Job in einem Block platziert werden, in dem es keine anderen Jobs gibt
sbatch -N12 —exclusive=topo
Bewährte Methoden für die UltraServer-Topologie
Für eine optimale Leistung mit der UltraServer-Architektur in SageMaker HyperPod:
-
Stellen Sie die entsprechenden Blockgrößen ein: Konfigurieren Sie
BlockSizes=18(oder 17, wenn ein Knoten frei ist), sodass sie der UltraServer-Architektur entsprechen. -
Verwenden Sie Segmente für eine bessere Verfügbarkeit: Verwenden Sie die
sbatchBefehle--segment=16--segment=8, oder--segment=9mitsrunund, um die Flexibilität bei der Auftragsplanung zu verbessern. -
Berücksichtigen Sie die Auftragsgröße und die Segmentgröße:
Falls
BlockSizes=18, Jobs mit bis zu 18 Instances werden immer auf einem einzigen UltraServer ausgeführt.Falls
BlockSizes=16, werden Jobs mit weniger als 16 Instances immer auf einem einzigen UltraServer ausgeführt, während Jobs mit 18 Instances auf einem oder zwei UltraServern ausgeführt werden können.
Wenn Sie über Segmentierung nachdenken, beachten Sie Folgendes
Mit
--segment=1kann jede Instance auf einem separaten UltraServer ausgeführt werden.Bei
-N 18 --segment 9dieser Option werden 9 Knoten auf einem UltraServer platziert, und weitere 9 Knoten können auf demselben oder einem anderen UltraServer platziert werden.Mit
-N 24 --segment 8kann der Job auf 2 oder 3 UltraServern ausgeführt werden, wobei jeweils 8 Knoten zusammen auf demselben Server platziert werden.
Einschränkungen bei der topologieorientierten Planung von SageMaker HyperPod
Das topology/block-Plugin hat Einschränkungen bei heterogenen Clustern (Clustern mit unterschiedlichen Instance-Typen):
Nur Knoten, die in Blöcken aufgeführt sind, können von Slurm geplant werden
Jeder Block muss mindestens
BlockSizes[0]Knoten enthalten
Bei heterogenen Clustern sollten Sie die folgenden Alternativen in Betracht ziehen:
Verwenden Sie das Block-Plug-In nicht mit heterogenen Clustern. Isolieren Sie stattdessen UltraServer-Knoten in einer anderen Partition.
Erstellen Sie einen separaten Cluster mit nur UltraServern in derselben VPC und verwenden Sie das Multicluster-Setup von Slurm.