Orchestrierung

Wenn Sie sich für Trainingscluster der Gemini Enterprise Agent Platform interessieren, wenden Sie sich an Ihren Vertriebsmitarbeiter, um Zugriff zu erhalten.

Für Trainingscluster der Gemini Enterprise Agent Platform wird Simple Linux Utility for Resource Management (Slurm) als Orchestrator verwendet, um Jobs in Ihrem Cluster zu verwalten und zu planen.

Slurm ist ein weit verbreitetes Open-Source-System für die Clusterverwaltung und Jobplanung, das für seine Skalierbarkeit und Fehlertoleranz bekannt ist.

Hauptmerkmale von Slurm

  • Slurm weist eine Reihe von Compute-Knoten für die ausschließliche Verwendung durch einen bestimmten Job für einen definierten Zeitraum zu. So hat ein Job dedizierten Zugriff auf die Ressourcen, die für die Ausführung ohne Störungen 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 Compute-Ressourcen zu steuern. Dabei werden Faktoren wie Jobgröße, Nutzerpriorität und Wartezeit berücksichtigt, um eine faire und effiziente Ressourcennutzung im gesamten Cluster zu gewährleisten.

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 Compute-Knoten in Partitionen, der Angabe eines dedizierten Anmelde-Knotenpools und der Konfiguration eines gemeinsamen Basisverzeichnisses für Ihre Nutzer.

Partitionen

Partitionen gruppieren Knoten in logischen Mengen, was für die Verwaltung verschiedener Maschinentypen oder Zugriffsebenen nützlich sein kann. Sie werden als Liste im Feld „partitions“ der slurm_spec definiert.

Jedes Partitionsobjekt hat die folgenden Pflichtfelder:

  • id: Eine eindeutige Kennung für die Partition.
  • node_pool_ids: Eine Liste mit den IDs eines oder mehrerer 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 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

Das Feld home_directory_storage gibt die Filestore-Instanz an, die auf allen Knoten im Cluster als Verzeichnis /home bereitgestellt werden soll. So wird ein gemeinsames, persistentes 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 Trainingsclustern der Gemini Enterprise Agent Platform können Sie eine ausgewählte Gruppe von slurm.conf-Parametern anpassen. Diese Einstellungen können jedoch nur bei der Erstellung des Clusters konfiguriert und danach nicht mehr geändert werden.

Buchhaltung

Mit Trainingsclustern der Gemini Enterprise Agent Platform können Sie integrierte Buchhaltungsfunktionen verwenden, um die Ressourcennutzung in Ihrem Cluster zu verfolgen. Eine vollständige Anleitung zum Monitoring von Messwerten wie der jobbezogenen CPU-Zeit und der Arbeitsspeichernutzung finden Sie in der offiziellen Slurm-Ressourcenerfassungsdokumentation.

Parameter Wert Beispiel
AccountingStorageEnforce Kommagetrennte Strings associations,limits,qos

Vorabnutzung und Priorität

Mit Trainingsclustern der Gemini Enterprise Agent Platform können Sie die Job-Vorabnutzung von Slurm konfigurieren, um zu verwalten, wie Jobs geplant und priorisiert werden. Die Vorabnutzung funktioniert mit dem Multifaktor-Prioritäts-Plug-in, um zu ermitteln, ob laufende Jobs pausiert werden sollen, um Platz für Arbeit mit höherer Priorität zu schaffen.

Eine vollständige konzeptionelle Übersicht finden Sie in der offiziellen Slurm-Dokumentation zu den Multifaktor-Prioritäts-Plug-ins und zur Vorabnutzung.

Parameter für die Vorabnutzung

Parameter Wert Beispiel
PREEMPT_TYPE String preempt/partition_prio
PREEMPT_MODE Kommagetrennte 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 Kommagetrennte Strings cpu=100,mem=150

Prolog- und Epilog-Skripts

Mit den folgenden Feldern können Sie benutzerdefinierte Bash-Skripts konfigurieren, die automatisch zu Beginn (Prolog) und am Ende (Epilog) jedes Jobs ausgeführt werden:

  • 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 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",
      "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

Laufenden Cluster verwalten

Nachdem Ihr Cluster mit den ausgewählten Buchhaltungs- und Vorabnutzungseinstellungen 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 umfassende Liste aller sacctmgr Optionen finden Sie in der offiziellen Slurm-Buchhaltungsdokumentation.

Jobpriorität prüfen

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

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

Beispiele für die Vorabnutzung

Die offizielle Slurm-Dokumentation enthält mehrere funktionierende Beispiele für verschiedene Vorabnutzungsstrategien. Sie finden sie auf der Seite zur Slurm-Vorabnutzung.

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 Inferenz bereitstellen: Stellen Sie Ihr trainiertes Modell auf einem Gemini Enterprise Agent Platform-Endpunkt bereit, um Online-Inferenzanfragen im großen Maßstab zu verarbeiten.
  • Lebenszyklus des 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.
  • Pipelineausführungen und Modellleistung überwachen:
  • Kosten optimieren und Clusterlebenszyklus verwalten: Wenn Sie automatisierte Pipelines verwenden, verwalten Sie den Lebenszyklus des Clusters anhand der Ausführungshäufigkeit.
    • Bei seltenen Ausführungen fügen Sie einen letzten Pipelineschritt hinzu, 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 lassen Sie den Cluster aktiv, um die Jobstartzeit zu verkürzen.