Anleitung: Konten und Jobplanung in einem Cluster verwalten

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

In dieser Anleitung wird gezeigt, wie Sie die Abrechnungs- und Quality of Service (QoS)-Funktionen von Slurm verwenden, um einen einzelnen Trainingscluster effektiv zu verwalten, der von mehreren Teams mit unterschiedlichen Prioritäten und Ressourcenanforderungen gemeinsam genutzt wird.

Das Ziel

Am Ende dieser Anleitung haben Sie ein Framework zum Verwalten von Clusterressourcen, das Folgendes kann:

  • Ressourcenlimits pro Team erzwingen
  • Jobs basierend auf ihrer Dringlichkeit priorisieren und unterbrechen
  • Eine klare Abrechnung des Ressourcenverbrauchs bereitstellen.
  • Die Clusternutzung maximieren und gleichzeitig für Fairness sorgen

Vorbereitung

  • Ein aktiver Trainingscluster mit konfigurierten Einstellungen für Abrechnung, Preemption und Priorität zum Verwalten von Konten sowie zum Planen und Priorisieren von Jobs.

  • Orchestrate

  • Erweiterte Slurm-Einstellungen

  • sudo-Zugriff auf den Anmeldeknoten des Clusters, um Administratorbefehle auszuführen.

Grundlegende Konzepte: Die Bausteine der Slurm-Abrechnung

Slurm verwendet eine klare und flexible Hierarchie zur Verwaltung von Ressourcen. Es ist wichtig, diese vier Bausteine zu verstehen.

Komponente Beispiel Zweck
Konto Ein Team oder Projekt Die primäre Einheit zum Gruppieren von Nutzern und Festlegen allgemeiner Ressourcenlimits (z. B. kann team_ace maximal 10 Knoten verwenden).
Nutzer Einzelner Forscher Die Person, die einen Job einreicht. Jeder Nutzer muss zu einem Standardkonto gehören.
Partition Eine Hardware-Warteschlange Eine logische Gruppierung von Knoten. Für maximale Flexibilität empfehlen wir eine einzelne Partition mit allen Knoten.
QOS Ein Regelwerk Ein benannter Satz von Regeln, der Joblimits (z. B. „Jobs in dieser Dienstqualität können nur 2 Knoten verwenden“) und die Priorität für die Planung definiert.

Mit diesem Modell können Sie ein Kontingent auf hoher Ebene für ein gesamtes Konto festlegen und ein detaillierteres Limit pro Job mit einer QOS anwenden.

Die Rollen: Administrator und Researcher

Zwei unterschiedliche Rollen interagieren mit diesem System: der Clusteradministrator und der Forscher.

Clusteradministrator

  • Primäres Tool: sacctmgr (Slurm-Kontoverwaltung)
  • Ihre Aufgabe: Sie erstellen das „Gerüst“ aus Konten, Nutzern und QoS-Regeln. Dies ist in der Regel eine Aufgabe, die nur einmal konfiguriert und dann bei Bedarf aktualisiert werden muss.
  • Wichtige Aufgaben: Konten erstellen, Nutzer Konten zuweisen, QOS-Regelwerke definieren und verknüpfen.

Forscher

  • Primäre Tools: sbatch, squeue, sinfo
  • Ihre Aufgabe: Forschungsjobs senden und überwachen.
  • Das Besondere: Wenn ein Forscher einen Job einreicht, prüft Slurm automatisch die Regeln, die mit seinem Konto und seiner QOS verknüpft sind. Wenn der Job ein Limit überschreitet, wird er von Slurm mit einer eindeutigen Fehlermeldung abgelehnt.

Das Tutorial: Eine schrittweise Anleitung

In der folgenden Anleitung werden diese Konzepte anhand einer Reihe von progressiven Szenarien in die Praxis umgesetzt. In dieser Anleitung wird davon ausgegangen, dass Sie die Rolle des Clusteradministrators haben. Ihre Aufgabe ist es, ein Konto (team_ace) und einen Nutzer (user_alice) einzurichten. Die Szenarien beginnen ohne Einschränkungen und es werden nach und nach Kontrollschichten hinzugefügt.

Teil 1: Ersteinrichtung (keine Einschränkungen)

Erstellen Sie das Konto und weisen Sie den Nutzer zu.

  • Ziel: Erstellen Sie die grundlegende Hierarchie für team_ace und user_alice.
  • Methode: Fügen Sie mit sacctmgr ein Konto und dann einen Nutzer hinzu, der mit diesem Konto verknüpft ist.
# --- (Run as Admin) ---

# 1. Create the 'team_ace' account
sudo sacctmgr add account team_ace Description="The Ace Team"

# 2. Create the 'user_alice' user and map them to their default account
# (Note: 'user_alice' must already exist as a Linux user on the node)
sudo sacctmgr add user user_alice Account=team_ace

# 3. Show the hierarchy we just built to confirm
sacctmgr show associations where account=team_ace

Ergebnis: Als Nutzer user_alice können Sie jetzt einen großen Job senden. Da keine Beschränkungen vorhanden sind, wird ein Job mit 7 Knoten akzeptiert und sofort ausgeführt (vorausgesetzt, 7 Knoten sind im Leerlauf).

Teil 2: Konten Gruppenlimits hinzufügen

Wenden Sie als Nächstes eine Ressourcenbeschränkung auf das team_ace-Konto an, sodass das gesamte Team auf maximal 6 Knoten und 4 Jobs beschränkt ist.

  • Ziel: Legen Sie eine Gesamtobergrenze für Ressourcen für ein ganzes Team fest.

  • Methode: Wir wenden dieses Limit auf das team_ace-Konto an. Dazu verwenden wir GrpJobs (Group Jobs) und GrpTRES (Group Trackable Resources, in diesem Fall node=6).

# --- (Run as Admin) ---

# 1. Add group-level job and node limits to the 'team_ace' account
sudo sacctmgr modify account where name=team_ace set GrpJobs=4 GrpTRES=node=6

# 2. View the limits to confirm the change
sacctmgr show association where account=team_ace

Ergebnisse: Führen Sie die folgenden Tests als user_alice aus, um zu prüfen, ob die neuen Limits funktionieren:

  1. Knotenlimit: Das Einreichen eines Jobs mit 7 Knoten schlägt jetzt fehl. Der Job wird in den Status „Ausstehend“ (PD) mit dem Grund (AssocGrpNodeLimit) versetzt.
  2. Joblimit: Wenn Sie fünf Jobs mit einem einzelnen Knoten einreichen, werden vier Jobs ausgeführt (R) und der fünfte Job wird mit dem Grund (AssocGrpJobsLimit) als ausstehend (PD) angezeigt.

Die Kontolimits funktionieren einwandfrei.

Teil 3: Mit QOS ein Limit pro Job hinzufügen

Das Gruppenlimit auf Kontoebene dient dazu, die gesamte Ressourcennutzung eines Teams zu begrenzen. Es wird jedoch nicht verhindert, dass ein Nutzer einen einzelnen Job einreicht, der das gesamte Kontingent des Teams verbraucht. Um die Größe einzelner Jobs zu steuern, verwenden Sie im nächsten Schritt eine Quality of Service (QoS).

  • Ziel: Die maximale Größe eines einzelnen Jobs, der vom Team eingereicht wird, soll begrenzt werden.
  • Die Methode: Wir erstellen eine Dienstqualität (Quality of Service, QoS) mit dem Namen qos1 mit einer MaxTRESPerJob=node=2-Regel. Wir legen dann diese QOS als Standard für das gesamte team_ace-Konto fest.
# --- (Run as Admin) ---

# 1. Create a QOS with a per-job limit of 2 nodes
sudo sacctmgr add qos qos1 MaxTRESPerJob=node=2

# 2. Allow the 'team_ace' account to use this QOS
sudo sacctmgr modify account where account=team_ace set QOS=qos1

# 3. Set 'qos1' as the DEFAULT QOS for all users in this account
sudo sacctmgr modify account where account=team_ace set DefaultQOS=qos1

Ergebnis: Wenn user_alice jetzt einen Job mit 3 Knoten sendet, wird der Job in den Status „Ausstehend“ versetzt. Der Grund dafür ist (QOSMaxNodePerJobLimit). Der Nutzer hat sein Gesamtkontingent (6 Knoten) noch nicht überschritten, aber die QoS-Regel pro Job verletzt.

Teil 4: Benutzerspezifische Überschreibung hinzufügen

Was ist, wenn user_alice ein Praktikant ist und auf noch kleinere Aufgaben beschränkt werden muss, ohne dass der Rest des Teams davon betroffen ist?

  • Ziel: Ein restriktiveres Limit für einen einzelnen Nutzer festlegen.
  • Die Methode: Wir erstellen eine neue, restriktivere QOS (qos_intern) und wenden sie als Standard speziell für user_alice an. Dadurch wird die Standard-QOS des Kontos überschrieben.

# --- (Run as Admin) ---

# 1. Create a more restrictive QOS with a 1-node limit
sudo sacctmgr add qos qos_intern MaxTRESPerJob=node=1

# 2. Allow the account to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_intern

# 3. Apply 'qos_intern' as the default QOS for the specific user association
sudo sacctmgr modify user where name=user_alice account=team_ace set DefaultQOS=qos_intern

Ergebnis: Wenn user_alice versucht, den Job mit zwei Knoten zu senden, der zuvor unter qos1 zulässig war, schlägt der Vorgang mit (QOSMaxNodePerJobLimit) fehl. Die spezifischere Regel auf Nutzerebene hat die allgemeine Regel auf Kontoebene erfolgreich überschrieben.

Teil 5: Priorität und Preemption konfigurieren

Konfigurieren Sie schließlich die Jobpriorität und ‑unterbrechung, damit kritische Jobs sofort ausgeführt werden können, auch wenn der Cluster voll ist.

  • Ziel: Erstellen Sie eine QOS mit hoher Priorität („urgent“), die einen Job mit niedrigerer Priorität pausieren oder abbrechen kann, um Ressourcen freizugeben.
  • Die Methode:

    1. Erstellen Sie ein neues qos_urgent mit einem hohen Priority-Wert.
    2. Teile qos_urgent mit, dass es Preempt Jobs ausführen darf, die in qos1 ausgeführt werden.
    3. Konfigurieren Sie qos1 so, dass die zugehörigen Jobs bei einer Unterbrechung REQUEUE werden.

# --- (Run as Admin) ---

# 1. Create a new 'qos_urgent' with a high priority that can preempt 'qos1'
sudo sacctmgr add qos qos_urgent Priority=1000 Preempt=qos1

# 2. Configure 'qos1' to requeue preempted jobs after a 10-second grace period
sudo sacctmgr modify qos where name=qos1 set PreemptMode=REQUEUE GraceTime=10

# 3. Allow the 'team_ace' account and 'user_alice' to use this new QOS
sudo sacctmgr modify account where account=team_ace set QOS+=qos_urgent
sudo sacctmgr modify user where name=user_alice account=team_ace set QOS+=qos_urgent

# 4. For this scenario, remove the group limits so preemption is easier to trigger
sudo sacctmgr modify account where name=team_ace set GrpJobs=-1 GrpTRES=node=-1

Ergebnis:

  1. In einem Terminal wird mit user_alice ein lang andauernder Job mit dem Standard-qos1 gesendet. Die Ausführung beginnt (R).
  2. In einem zweiten Terminal sendet user_alice einen großen Job mit dem dringenden QoS (sbatch --qos=qos_urgent ...).
  3. Innerhalb von Sekunden ändert sich der Status des ersten Jobs von „Wird ausgeführt“ (R) zu „Ausstehend“ (PD) mit dem Grund (Preempted). Der dringende Job wird dann ausgeführt.

Fertig! Sie haben ein System konfiguriert, in dem Arbeit mit hoher Priorität automatisch Arbeit mit niedriger Priorität verdrängt.

Zusammenfassung und nächste Schritte

In diesem Lernprogramm haben Sie gelernt, wie Sie die hierarchischen Abrechnungsfunktionen von Slurm verwenden, um eine detaillierte Kontrolle über einen freigegebenen Cluster zu erhalten. Sie haben nun folgende Möglichkeiten:

  • Globale Limits festlegen: Mit Konten können Sie Gesamtkontingente für Ressourcen für ganze Teams festlegen.
  • Regeln pro Job erzwingen: Mit QOS können Sie die Größe und Priorität einzelner Jobs steuern.
  • Spezifische Überschreibungen erstellen: Wenden Sie für eine detaillierte Steuerung eine andere Dienstqualität auf einen Nutzer an.
  • Priorität garantieren: Konfigurieren Sie das Unterbrechen von Instanzen, damit kritische Arbeitslasten immer ausgeführt werden können.

Dieses mehrschichtige Modell bietet eine flexible und leistungsstarke Möglichkeit, Clusterressourcen fair und effizient zu verwalten. Weitere erweiterte Konfigurationen finden Sie in der offiziellen Slurm-Dokumentation.