In den Trainingsclustern der Gemini Enterprise Agent Platform wird Simple Linux Utility for Resource Management (Slurm) als Orchestrator zum Verwalten und Planen von Jobs in Ihrem Cluster verwendet.
Slurm ist ein weit verbreitetes Open-Source-System für die Clusterverwaltung und Jobplanung, das für seine Skalierbarkeit und Fehlertoleranz bekannt ist.
Wichtige Funktionen von Slurm
- Slurm weist eine Reihe von Rechenknoten für die ausschließliche Verwendung durch einen bestimmten Job für einen definierten Zeitraum zu. So wird sichergestellt, dass ein Job dedizierten Zugriff auf die Ressourcen hat, die für die Ausführung ohne Beeinträchtigung erforderlich sind.
- Slurm bietet ein Framework für die Verwaltung des gesamten Lebenszyklus eines Jobs – von der Einreichung und Ausführung bis hin zum Monitoring und Abschluss. Dieses System wurde speziell für die Verarbeitung paralleler Jobs entwickelt, die auf einer Reihe zugewiesener Knoten ausgeführt werden.
- Slurm verwaltet eine Warteschlange mit ausstehenden Jobs und verwendet eine ausgefeilte Priorisierungs-Engine, um den Zugriff auf Rechenressourcen zu vermitteln. Durch die Berücksichtigung von Faktoren wie Jobgröße, Nutzerpriorität und Wartezeit sorgt dieses System für eine faire und effiziente Ressourcennutzung im gesamten Cluster.
Grundlegende Clusterkonfiguration
Bevor Sie Jobs ausführen können, müssen Sie die grundlegende Struktur Ihres Slurm-Clusters definieren. In diesem Abschnitt werden die wichtigsten Konfigurationseinstellungen beschrieben, einschließlich der Organisation von Rechenknoten in Partitionen, der Angabe eines dedizierten Anmelde-Knotenpools und der Konfiguration eines freigegebenen Home-Verzeichnisses für Ihre Nutzer.
Partitionen
Mit Partitionen werden Knoten in logische Gruppen unterteilt, was für die Verwaltung verschiedener Maschinentypen oder Zugriffsebenen nützlich sein kann. Sie werden als Liste im Feld „partitions“ des slurm_spec definiert.
Jedes Partitionsobjekt hat die folgenden erforderlichen Felder:
id: Eine eindeutige Kennung für die Partition.node_pool_ids: Eine Liste mit den IDs von einem oder mehreren Knotenpools, die zu dieser Partition gehören.
Beispiel:
"partitions": [
{
"id": "a4",
"node_pool_ids": [ "a4" ]
}
]
Jobs, die ohne --partition eingereicht werden, werden auf der Standardpartition ausgeführt. Wenn Sie die Standardpartition angeben möchten, legen Sie default_partition_id in slurm_spec auf die id einer Ihrer Partitionen fest. Wenn Sie das Feld leer lassen, ist die erste Partition in der Liste die Standardpartition.
Anmeldeknoten
Der Anmeldeknotenpool bietet dedizierte Knoten, die als primärer Einstiegspunkt für Nutzer dienen, um mit dem Cluster zu interagieren. Das Feld login_node_pool_id gibt die eindeutige Kennung für diesen Pool an.
Beispiel:
"login_node_pool_id": "login"
Speicher für Basisverzeichnis
Mit dem Feld home_directory_storage wird die Filestore-Instanz angegeben, die als /home-Verzeichnis auf allen Knoten im Cluster bereitgestellt werden soll. Dadurch wird ein gemeinsames, dauerhaftes Basisverzeichnis für alle Nutzer bereitgestellt.
Für diesen Wert müssen Sie den vollständigen Ressourcennamen der Filestore-Instanz angeben.
Beispiel:
"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"
Erweiterte Slurm-Konfiguration
Mit Trainingsclustern der Gemini Enterprise Agent Platform können Sie slurm.conf-Parameter festlegen und in einem laufenden Cluster ändern. Weitere Informationen finden Sie unter Slurm-Konfigurationszuordnungen.
Abrechnung, Preemption und Priorität
Die Slurm-Abrechnung ist in jedem Cluster aktiviert, sodass Sie die Ressourcennutzung pro Job, z. B. CPU-Zeit und Arbeitsspeicher, nachverfolgen können. Sie können auch Abrechnungslimits erzwingen, die Jobpriorität gewichten und die Unterbrechung über config aktivieren, wie in der Beispielclusterspezifikation. Informationen zur Funktionsweise finden Sie in der Slurm-Dokumentation zu Abrechnung, zum Multifaktor-Prioritäts-Plug-in und zum vorzeitigen Beenden.
Prolog- und Epilog-Scripts
Sie können benutzerdefinierte Bash-Skripts so konfigurieren, dass sie automatisch am Anfang (Prolog) und am Ende (Epilog) jedes Jobs ausgeführt werden. Verwenden Sie dazu die folgenden Felder:
prolog_bash_scripts: Eine Liste von Strings, wobei jeder String den vollständigen Inhalt eines Bash-Skripts enthält, das vor Beginn des Jobs ausgeführt werden soll.epilog_bash_scripts: Eine Liste von Strings, wobei jeder String den vollständigen Inhalt eines Bash-Scripts enthält, das nach Abschluss des Jobs ausgeführt werden soll.
Das ist nützlich, um eine eindeutige Jobumgebung einzurichten oder automatisierte Bereinigungsaufgaben auszuführen.
Beispiel für eine Clusterspezifikation
Das folgende Beispiel zeigt eine JSON-Konfiguration zum Erstellen eines Trainingsclusters. Sie können diese Spezifikation an Ihre eigenen Anforderungen anpassen.
{ // ... other cluster configurations ... "orchestratorSpec": { "slurmSpec": { "partitions": [ { "id": "a4", "node_pool_ids": ["a4"] } ], "login_node_pool_id": "login", "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID", "config": { "AccountingStorageEnforce": "associations,limits,qos", "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "REQUEUE", "PreemptExemptTime": "00:10:00" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'First prolog script running'", "#!/bin/bash\necho 'Second prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ] // ... other Slurm settings ... } } }
Clusterverwaltung und ‑betrieb
Aktiven Cluster verwalten
Nachdem Ihr Cluster mit den ausgewählten Abrechnungs- und Preemption-Einstellungen erstellt wurde, können Sie die Befehlszeilentools von Slurm verwenden, um Nutzerkonten zu verwalten und die Jobplanung zu überwachen.
Kontoverwaltung mit sacctmgr
Der Befehl sacctmgr ist das primäre Tool zum Verwalten von Nutzer- und Kontoinformationen in der Slurm-Datenbank. Wenn Sie beispielsweise einem Konto einen neuen Nutzer hinzufügen und ihm Zugriff auf eine Partition gewähren möchten, führen Sie den folgenden Befehl aus:
sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>
Eine vollständige Liste aller sacctmgr-Optionen finden Sie in der offiziellen Slurm-Abrechnungsdokumentation.
Jobpriorität prüfen
Mit dem Tool sprio können Sie die Prioritätskomponenten der einzelnen Jobs in der Warteschlange prüfen. Das ist nützlich, um zu verstehen, warum bestimmte Jobs vor anderen ausgeführt werden.
Eine detaillierte Anleitung finden Sie in der Dokumentation zum sprio-Dienstprogramm.
Beispiele für Unterbrechungen
In der offiziellen Slurm-Dokumentation finden Sie mehrere funktionierende Beispiele für verschiedene Preemption-Strategien. Sie finden sie auf der Seite Slurm Preemption.
Nächste Schritte
Im Folgenden geht es um die letzten Schritte des Machine-Learning-Lebenszyklus: Verwaltung, Bereitstellung und Monitoring Ihrer trainierten Modelle.
- Modell für die Inferenz bereitstellen: Stellen Sie Ihr trainiertes Modell auf einem Gemini Enterprise Agent Platform-Endpunkt bereit, um Online-Inferenzanfragen im großen Maßstab zu bearbeiten.
- Lebenszyklus Ihres Modells verwalten: Mit der Gemini Enterprise Agent Platform Model Registry können Sie Ihre Modelle versionieren, vergleichen und verwalten. Eine Pipeline kann so konfiguriert werden, dass nach erfolgreichem Training automatisch ein neues Modell registriert wird.
- Pipeline-Ausführungen und Modellleistung überwachen:
- Pipeline-Monitoring: Sie können den Ausführungsgraphen, die Artefakte und die Leistung Ihrer Pipeline-Ausführungen im Blick behalten, um Probleme zu beheben und die Orchestrierung zu optimieren.
- Model Monitoring: Richten Sie nach der Bereitstellung das Monitoring ein, um Drift und Anomalien in der Vorhersageleistung Ihres Modells zu erkennen. So lässt sich die Genauigkeit des Modells im Laufe der Zeit aufrechterhalten.
- Kosten optimieren und Clusterlebenszyklus verwalten: Wenn Sie automatisierte Pipelines verwenden, können Sie den Clusterlebenszyklus anhand der Ausführungshäufigkeit verwalten.
- Bei seltenen Ausführungen sollten Sie einen letzten Pipelineschritt hinzufügen, um den Cluster zu löschen und Kosten zu sparen. Dazu müssen Sie in der Regel eine benutzerdefinierte Pipelinekomponente erstellen, die die Löschfunktion aufruft.
- Bei häufigen Ausführungen sollten Sie den Cluster aktiv lassen, um die Startzeit von Jobs zu verkürzen.