MLperf Stack: Slurm, Pyxis, Enroot

Der MLperf Benchmark gilt als einer der Benchmark-Testsätze, die es Ihnen ermöglichen, die Leistung von Servern mit GPUs und KI-Beschleunigern genau zu beurteilen. Leider ist es nicht der Benchmark, an den jeder gewöhnt ist, bei dem es ausreicht, eine ausführbare Datei auszuführen und das fertige Ergebnis nach einiger Zeit zu erhalten. MLperf ist eine Sammlung von Skripten, die Tests mit verschiedenen Datensätzen ermöglichen. Die Datensätze selbst sind nicht im Benchmark-Kit enthalten. Sie müssen sie separat herunterladen und zur Arbeit vorbereiten.
In modernen Versionen von MLperf kann dieser Satz von Skripten nicht auf einem sauberen System ausgeführt werden. Um den Benchmark in Aktion zu testen, müssen Sie die Umgebung entsprechend für die meisten Tests vorbereiten. Die Autoren von MLperf wählten Slurm Workload Manager als Job-Management-Tool aus, das in den meisten Supercomputern der Welt verwendet wird. Diese Open-Source-Anwendung ermöglicht eine flexible Verwaltung von Workloads, indem sie Rechenaufgaben unter allen Clusterteilnehmern verteilt.
Ein minimaler Slurm-Cluster besteht aus einem Rechenknoten und einem Verwaltungsknoten. Idealerweise sind dies zwei verschiedene Server, die miteinander über die Hostnamen kommunizieren, die im Falle von Linux in der /etc/hosts-Datei angegeben sind. Zusätzlich zum konfigurierten Cluster benötigt MLperf zwei Plugins: Pyxis und Enroot. Das erste ist eine Erweiterung, die es einem nicht privilegierten Benutzer ermöglicht, containerisierte Workloads auszuführen. Das Zweite entfernt die meisten Isolierungsmechanismen aus regulären Containern, wodurch fast alle Leistungskosten bei Beibehaltung der Dateisystemtrennung eliminiert werden.
Schritt 1. Bereiten Sie das System vor
Beginnen Sie mit der Aktualisierung des Paketcacherepositories und der installierten Pakete:
sudo apt update && sudo apt -y upgrade
Vergessen Sie nicht, die Nvidia-Treiber mit dem Autoinstall-Befehl oder manuell zu installieren, mit unserem Schritt-für-Schritt-Leitfaden:
sudo ubuntu-drivers autoinstall
Starten Sie den Server neu:
sudo shutdown -r now
Schritt 2. Installieren Sie Slurm
Für diese Anleitung wurde Ubuntu 22.04 LTS als Betriebssystem ausgewählt, daher kann Slurm direkt aus dem Standard-Repository installiert werden. Das slurm-wlm-Paket enthält sowohl slurmd für den Rechenknoten als auch slurmctld für den Steuerungsknoten. Installieren Sie das Paket:
sudo apt install slurm-wlm
Standardmäßig wird nach der Installation keiner der Daemons arbeiten, weil die Hauptkonfigurationsdatei, slurm.conf, fehlt. Die Entwickler haben sich bemüht, die Einstiegshürde zu senken, indem sie eine Webseite mit einem Konfigurator erstellt haben. Hier können Sie die Konfigurationsdatei selbstständig in Teilen zusammenstellen, wobei Ihnen für jeden Punkt Hinweise gegeben werden.
Bitte beachten Sie, dass es für eine Standardinstallation auf Ubuntu 22.04 LTS sinnvoll ist, LinuxProc anstelle von Cgroup zu wählen. Wenn Sie auf die Schaltfläche Senden am unteren Rand der Seite klicken, erhalten Sie den endgültigen Text der Konfigurationsdatei. Kopieren Sie ihn in Ihre Zwischenablage und führen Sie den folgenden Befehl aus:
sudo nano /etc/slurm/slurm.conf
Fügen Sie den Inhalt der Zwischenablage ein und speichern Sie die Datei. Jetzt können Sie den Rechenknoten-Daemon starten:
sudo systemctl start slurmd.service
Sie können den Status des Daemons mit folgendem Befehl überprüfen:
sudo systemctl status slurmd.service
Schritt 3. Richten Sie den Slurm-Controller ein
Bevor Sie den Controller-Daemon starten können, müssen Sie einige zusätzliche Schritte durchführen. Zuerst müssen Sie ein Verzeichnis erstellen, in dem der Daemon serviceinformationen zu laufenden Aufträgen speichern kann:
sudo mkdir -p /var/spool/slurmctld
Das Verzeichnis wurde erfolgreich erstellt, aber derzeit kann der slurm-Benutzer, der den Controller betreibt, dort nichts schreiben. Lassen Sie es der Eigentümer des Verzeichnisses werden:
sudo chown slurm:slurm /var/spool/slurmctld
Jetzt können Sie den Controller-Daemon starten:
sudo systemctl start slurmctld.service
Um den Betriebsstatus des Controllers zu überprüfen, können Sie den Standardbefehl verwenden:
sudo systemctl status slurmctld.service
Sie können auch sofort den aktuellen Status des Systems anzeigen, insbesondere wie viele Rechenknoten mit dem Controller verbunden sind und ihren aktuellen Zustand bestimmen:
sinfo
PARTITION VERFÜGBAR ZEITLIMITE KNOTEN STATUS KNOTENLISTE debug* up unendlich 1 unbeschäftigt gpuserver
Schritt 4. Installieren Sie Pyxis
Slurm erweitert seine Fähigkeiten mit dem SPANK-Mechanismus (Slurm Plug-in Architecture for Node and Job [K]control). Es muss nicht separat von der Hauptanwendung installiert oder konfiguriert werden. Es empfiehlt sich jedoch, vor jeder Plugin-Installation beide Daemons vorübergehend zu stoppen:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
Da der Installationsprozess von Pyxis den Aufbau aus dem Quellcode beinhaltet, müssen Sie zuerst ein Paket installieren, das die Entwicklerbibliotheken enthält:
sudo apt -y install libslurm-dev
Der Pyxis-Build-Prozess geht davon aus, dass die Anwendung aus dem Quellcode installiert wird und er wird die Dateien im absoluten Pfad /use/include/slurm suchen. In unserem Beispiel hat das slurm-wlm-Paket sie in das andere Verzeichnis /usr/include/slurm-wlm platziert. Um dieses Problem zu lösen, erstellen Sie einfach einen symbolischen Link:
sudo ln -s /usr/include/slurm-wlm /usr/include/slurm
Klonen Sie den Quellcode des Plugins aus dem offiziellen Nvidia-Repository:
git clone https://github.com/NVIDIA/pyxis
Öffnen Sie das heruntergeladene Verzeichnis:
cd pyxis
Starten Sie den Kompiliervorgang:
sudo make install
Sobald die Kompilierung abgeschlossen ist, müssen Sie einen weiteren symbolischen Link erstellen:
sudo ln -s /usr/local/share/pyxis/pyxis.conf /etc/slurm/plugstack.conf.d/pyxis.conf
Jetzt ist alles bereit, um beide Daemons zu starten:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Wenn es korrekt gemacht wurde, sehen Sie bei Ausführung des folgenden Befehls neue Optionen markiert als [pyxis]:
srun --help
Schritt 5. Installieren Sie Enroot
Wie beim vorherigen Plugin macht es Sinn, zunächst die Daemons zu stoppen:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
Verwenden Sie anschließend die Shell-Funktion zum Speichern der CPU-Architekturdaten in einer separaten Variablen. Dies ist nützlich für die Ausführung nachfolgender Befehle, da sie automatisch den gespeicherten Wert ersetzen, anstatt eine manuelle Bearbeitung zu erfordern:
arch=$(dpkg --print-architecture)
Laden Sie das DEB-Paket herunter:
curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.4.1/enroot_3.4.1-1_${arch}.deb
Sie können es mit dem dpkg-Dienstprogramm installieren:
sudo dpkg -i enroot_3.4.1-1_${arch}.deb
Wenn das System meldet, dass einige Abhängigkeiten fehlen, können Sie diese manuell installieren:
sudo apt-get -f install
Schließlich starten Sie beide Daemons:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Dies ist die Mindestmenge an Schritten, die erforderlich sind, um einen einfachen Slurm-Cluster mit Pyxis- und Enroot-Plugins zu implementieren. Weitere Informationen finden Sie in der offiziellen Dokumentation auf der Projektwebsite.
Siehe auch:
Aktualisiert: 28.03.2025
Veröffentlicht: 09.07.2024