Orchestrierung

Wenn Sie sich für Vertex AI-Trainingscluster interessieren, wenden Sie sich an Ihren Vertriebsmitarbeiter, um Zugriff zu erhalten.

In Vertex AI-Trainingsclustern 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 regeln. 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 Anmeldeknotenpools und der Konfiguration eines freigegebenen Home-Verzeichnisses für Ihre Nutzer.

Partitionen

Mit Partitionen werden Knoten in logischen Gruppen zusammengefasst, 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" ]
  }
]

Anmeldeknoten

Der Anmeldeknotenpool bietet dedizierte Knoten, die als primärer Einstiegspunkt für die Interaktion von Nutzern mit dem Cluster dienen. Im Feld login_node_pool_id wird die eindeutige Kennung für diesen Pool angegeben.

Beispiel:

"login_node_pool_id": "login"

Speicher für Basisverzeichnis

Im 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.

Sie müssen den vollständigen Ressourcennamen der Filestore-Instanz für diesen Wert angeben.

Beispiel:

"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"

Erweiterte Slurm-Konfiguration

Mit Vertex AI-Trainingsclustern können Sie eine ausgewählte Gruppe von slurm.conf-Parametern anpassen. Diese Einstellungen können jedoch nur bei der ersten Clustererstellung konfiguriert und danach nicht mehr geändert werden.

Buchhaltung

Mit Vertex AI-Trainingsclustern können Sie integrierte Abrechnungsfunktionen verwenden, um die Ressourcennutzung in Ihrem Cluster zu verfolgen. Einen vollständigen Leitfaden zum Überwachen von Messwerten wie jobbezogener CPU-Zeit und Speichernutzung finden Sie in der offiziellen Slurm-Abrechnungsdokumentation.

Parameter Wert Beispiel
AccountingStorageEnforce Durch Kommas getrennte Strings associations,limits,qos

Vorzeitiges Beenden und Priorität

Mit Vertex AI-Trainingsclustern können Sie die Job-Preemption von Slurm konfigurieren, um zu verwalten, wie Jobs geplant und priorisiert werden. Die Unterbrechung funktioniert mit dem Plugin für die Priorität mit mehreren Faktoren, um zu ermitteln, ob laufende Jobs pausiert werden sollen, um Platz für Arbeiten mit höherer Priorität zu schaffen.

Eine vollständige konzeptionelle Übersicht finden Sie in der offiziellen Slurm-Dokumentation zum Multifactor Priority Plugin und zur Präemption.

Parameter für die Unterbrechung

Parameter Wert Beispiel
PREEMPT_TYPE String preempt/partition_prio
PREEMPT_MODE Durch Kommas getrennte Strings SUSPEND,GANG
PREEMPT_EXEMPT_TIME String 00:00:00

Prioritätsparameter

Parameter Wert Beispiel
PRIORITY_TYPE String priority/multifactor
PRIORITY_WEIGHT_AGE Ganzzahl 0
PRIORITY_WEIGHT_ASSOC Ganzzahl 0
PRIORITY_WEIGHT_FAIRSHARE Ganzzahl 0
PRIORITY_WEIGHT_JOB_SIZE Ganzzahl 0
PRIORITY_WEIGHT_PARTITION Ganzzahl 0
PRIORITY_WEIGHT_QOS Ganzzahl 0
PRIORITY_WEIGHT_TRES Durch Kommas getrennte Strings cpu=100,mem=150

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-Skripts enthält, das nach Abschluss des Jobs ausgeführt werden soll.

Dies ist nützlich, um eine eindeutige Jobumgebung einzurichten oder automatisierte Bereinigungsaufgaben auszuführen.

Beispiel für eine Clusterspezifikation

Das folgende Beispiel zeigt eine vollständige JSON-Konfiguration zum Erstellen eines Trainingsclusters. Sie können diese Spezifikation an Ihre Bedürfnisse 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",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "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

Verwenden Sie das Dienstprogramm sprio, um die Prioritätskomponenten der einzelnen Jobs in der Warteschlange zu prüfen. So lässt sich besser nachvollziehen, warum bestimmte Jobs vor anderen ausgeführt werden.

Eine detaillierte Anleitung zur Verwendung finden Sie in der Dokumentation zum sprio-Dienstprogramm.

Beispiele für die Unterbrechung

Die offizielle Slurm-Dokumentation enthält mehrere funktionierende Beispiele für verschiedene Preemption-Strategien. Sie finden diese auf der Seite Slurm Preemption (Slurm-Unterbrechung).

Nächste Schritte

Im Folgenden geht es um die letzten Schritte des Machine-Learning-Lebenszyklus: Verwalten, Bereitstellen und Überwachen Ihrer trainierten Modelle.

  • Modell für die Inferenz bereitstellen: Stellen Sie Ihr trainiertes Modell auf einem Vertex AI-Endpunkt bereit, um Online-Inferenzanfragen im großen Maßstab zu bearbeiten.
  • Lebenszyklus Ihres Modells verwalten: Mit Vertex AI Model Registry können Sie Ihre Modelle versionieren, vergleichen und verwalten. Eine Pipeline kann so konfiguriert werden, dass ein neues Modell nach erfolgreichem Training automatisch 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 verfolgen, um Probleme zu beheben und die Orchestrierung zu optimieren.
    • Modellmonitoring: Richten Sie nach der Bereitstellung das Monitoring ein, um Drift und Anomalien bei 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 verwalten, indem Sie die Ausführungshäufigkeit berücksichtigen.
    • Bei seltenen Ausführungen können Sie einen letzten Pipelineschritt hinzufügen, um den Cluster zu löschen und so 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 des Jobs zu verkürzen.