Freigeben über


Slurm

CycleCloud Slurm Cluster-Projekt README

Slurm ist ein hochgradig konfigurierbarer Open Source Workload Manager. Weitere Informationen finden Sie in der Übersicht auf der Slurm-Projektwebsite.

Hinweis

Ab CycleCloud 8.4.0 schreiben wir die Slurm-Integration um, um neue Features und Funktionen zu unterstützen. Weitere Informationen finden Sie in der Slurm 3.0-Dokumentation .

Um Slurm auf einem CycleCloud-Cluster zu aktivieren, ändern Sie den "run_list", der im Konfigurationsabschnitt Ihrer Clusterdefinition verfügbar ist. Ein Slurm-Cluster verfügt über zwei Hauptkomponenten: den Masterknoten (oder den Planer), der die Slurm-Software auf einem freigegebenen Dateisystem ausführt, und die ausgeführten Knoten, die dieses Dateisystem bereitstellen und die übermittelten Aufträge ausführen. Ein einfacher Codeausschnitt für Clustervorlagen kann z. B. wie folgt aussehen:

[cluster custom-slurm]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:master]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

Um Slurm auf einem CycleCloud-Cluster zu aktivieren, ändern Sie den run_list Im Konfigurationsabschnitt Ihrer Clusterdefinition. Ein Slurm-Cluster verfügt über zwei Hauptkomponenten: den Planerknoten, der ein freigegebenes Dateisystem bereitstellt und die Slurm-Software ausführt, und die Ausführungsknoten, die das freigegebene Dateisystem bereitstellen und die übermittelten Aufträge ausführen. Ein einfacher Codeausschnitt für Clustervorlagen könnte beispielsweise wie folgt aussehen:

[cluster custom-slurm]

[[node scheduler]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:scheduler]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

Die Bearbeitung vorhandener Slurm-Cluster

Slurm-Cluster, die in CycleCloud-Versionen 7.8 ausgeführt werden, und verwenden später eine aktualisierte Version der automatischen Skalierungs-APIs, mit denen die Cluster mehrere Knotenarrays und Partitionen verwenden können. Damit diese Funktionalität in Slurm funktioniert, füllt CycleCloud die ausgeführten Knoten im Cluster vorab aus. Aufgrund dieser Vorpopulation müssen Sie einen Befehl auf dem Slurm-Schedulerknoten ausführen, nachdem Sie Änderungen am Cluster vorgenommen haben, z. B. das Ändern der Grenzwerte für die automatische Skalierung oder vm-Typen.

Vornehmen von Clusteränderungen

Der in CycleCloud bereitgestellte Slurm-Cluster enthält ein Skript, das die Änderungen erleichtert. Nachdem Sie Änderungen am Cluster vorgenommen haben, führen Sie den nächsten Befehl als Stamm (z. B. durch Ausführen sudo -i) auf dem Slurm-Schedulerknoten aus, um die slurm.conf Datei neu zu erstellen und die Knoten im Cluster zu aktualisieren:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Hinweis

Für CycleCloud-Versionen vor 7.9.10 befindet sich das cyclecloud_slurm.sh Skript in /opt/cycle/jetpack/system/bootstrap/slurm.

Von Bedeutung

Wenn Sie Änderungen vornehmen, die sich auf die VMs für Knoten in einer MPI-Partition auswirken (z. B. VM-Größe, Image oder Cloud-Init), müssen Sie zuerst alle Knoten beenden. Der remove_nodes Befehl druckt in diesem Fall eine Warnung, beendet aber nicht mit einem Fehler. Wenn Sie die virtuellen Computer für Knoten in einer MPI-Partition (z. B. vm-Größe, Image oder Cloud-Init) ändern, während die Knoten ausgeführt werden, können neue Knoten nicht gestartet werden, und der Fehler This node doesn't match existing scaleset attributewird angezeigt.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Hinweis

Für CycleCloud-Versionen < 8.2 befindet sich das cyclecloud_slurm.sh Skript in /opt/cycle/jetpack/system/bootstrap/slurm.

Wenn Sie die virtuellen Computer für Knoten in einer MPI-Partition (z. B. vm-Größe, Image oder Cloud-Init) ändern, während die Knoten ausgeführt werden, können neue Knoten nicht gestartet werden, und der Fehler This node doesn't match existing scaleset attributewird angezeigt. Aus diesem Grund stellt der apply_changes Befehl sicher, dass die Knoten beendet werden. Wenn die Knoten nicht beendet werden, schlägt der Befehl mit dieser Fehlermeldung fehl: Die folgenden Knoten müssen vollständig beendet werden, bevor Änderungen angewendet werden.

Wenn Sie eine Änderung vornehmen, die sich nicht auf die VM-Eigenschaften für MPI-Knoten auswirkt, müssen Sie die Ausführung von Knoten nicht zuerst beenden. In diesem Fall können Sie die Änderungen mit den folgenden beiden Befehlen vornehmen:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Hinweis

Der apply_changes Befehl ist nur in CycleCloud 8.3+ verfügbar. In früheren Versionen müssen Sie die remove_nodes Und-Befehle scale verwenden, um eine Änderung vorzunehmen. Stellen Sie sicher, dass der remove_nodes Befehl keine Warnung über Knoten druckt, die beendet werden müssen.

Erstellen zusätzlicher Partitionen

Die Standardvorlage, die mit Azure CycleCloud ausgeliefert wird, verfügt über zwei Partitionen (hpc und htc), und Sie können benutzerdefinierte Knotenarrays definieren, die direkt Slurm-Partitionen zugeordnet sind. Fügen Sie der Clustervorlage beispielsweise den folgenden Abschnitt hinzu, um eine GPU-Partition zu erstellen:

    [[nodearray gpu]]
    MachineType = $GPUMachineType
    ImageName = $GPUImageName
    MaxCoreCount = $MaxGPUExecuteCoreCount
    Interruptible = $GPUUseLowPrio
    AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs

        [[[configuration]]]
        slurm.autoscale = true
        # Set to true if nodes are used for tightly-coupled multi-node jobs
        slurm.hpc = false

        [[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
        [[[network-interface eth0]]]
        AssociatePublicIpAddress = $ExecuteNodesPublic

Arbeitsspeichereinstellungen

CycleCloud legt automatisch die Arbeitsspeichermenge fest, die Slurm für die Planung zur Verfügung steht. Da der verfügbare Arbeitsspeicher aufgrund von Linux-Kerneloptionen geringfügig variieren kann, und das Betriebssystem und der virtuelle Computer einen kleinen Arbeitsspeicher verwenden, reduziert CycleCloud automatisch den Speicherwert in der Slurm-Konfiguration. Standardmäßig hält CycleCloud 5% des gemeldeten verfügbaren Speichers in einem virtuellen Computer zurück, Sie können diesen Wert jedoch in der Clustervorlage außer Kraft setzen, indem Sie auf den Prozentsatz des Speichers festlegen slurm.dampen_memory , der zurückgehalten werden soll. Wenn Sie z. B. 20% des Arbeitsspeichers eines virtuellen Computers zurückhalten möchten:

    slurm.dampen_memory=20

Deaktivieren der automatischen Skalierung für bestimmte Knoten oder Partitionen

Obwohl das integrierte CycleCloud-Feature "KeepAlive" derzeit nicht für Slurm-Cluster funktioniert, können Sie die autoscale für einen ausgeführten Slurm-Cluster deaktivieren, indem Sie die Datei slurm.conf direkt bearbeiten. Sie können einzelne Knoten oder ganze Partitionen von der automatischen Skalierung ausschließen.

Ausschließen eines Knotens

Um einen oder mehrere Knoten aus der automatischen Skalierung auszuschließen, fügen Sie SuspendExcNodes=<listofnodes> der Slurm-Konfigurationsdatei hinzu. Um beispielsweise Knoten 1 und 2 aus der hpc Partition auszuschließen, fügen Sie den folgenden Code hinzu:/sched/slurm.conf

SuspendExcNodes=hpc-pg0-[1-2]

Starten Sie dann den slurmctld Dienst neu, damit die neue Konfiguration wirksam wird.

Ausschließen einer Partition

Verwenden Sie einen ähnlichen Prozess wie beim Ausschließen von Knoten, um vollständige Partitionen von der Autoskala auszuschließen. Um die gesamte hpc Partition auszuschließen, fügen Sie den folgenden Code hinzu:/sched/slurm.conf

SuspendExcParts=hpc

Starten Sie den slurmctld-Dienst dann neu.

Problembehandlung

UID-Konflikte für Slurm- und Munge-Benutzer

Standardmäßig verwendet dieses Projekt eine UID und eine GID von 11100 für den Slurm-Benutzer und 11101 für den Munge-Benutzer. Wenn diese Standardwerte einen Konflikt mit einem anderen Benutzer oder einer anderen Gruppe verursachen, können Sie diese außer Kraft setzen.

Um die UID- und GID-Werte außer Kraft zu setzen, wählen Sie die Schaltfläche "Bearbeiten " für beide Knoten scheduler aus:

Scheduler bearbeiten

Scheduler bearbeiten

Und das execute-Knotenarray: Nodearray bearbeiten

Fügen Sie dem Configuration Abschnitt die folgenden Attribute hinzu: Konfiguration bearbeiten

    slurm.user.name = slurm
    slurm.user.uid = 11100
    slurm.user.gid = 11100
    munge.user.name = munge
    munge.user.uid = 11101
    munge.user.gid = 11101

Automatische Skalierung

CycleCloud verwendet das Elastic Computing-Feature von Slurm. Um Probleme mit der automatischen Skalierung zu debuggen, überprüfen Sie einige Protokolle auf dem Planerknoten. Stellen Sie zunächst sicher, dass die Wiederaufnahmeaufrufe des Energiesparmodus ausgeführt werden, indem Sie /var/log/slurmctld/slurmctld.log überprüfen. Sie sollten Zeilen wie diese sehen:

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

Suchen Sie nach /var/log/slurmctld/resume.log. Wenn der Wiederaufnahme-Schritt fehlschlägt, überprüfen Sie /var/log/slurmctld/resume_fail.log. Wenn Nachrichten zu unbekannten oder ungültigen Knotennamen angezeigt werden, stellen Sie sicher, dass Sie die Schritte im Abschnitt "Vornehmen von Clusteränderungen" ausführen, bevor Sie dem Cluster Knoten hinzufügen.

Slurm-Konfigurationsreferenz

In der folgenden Tabelle werden die Slurm-spezifischen Konfigurationsoptionen beschrieben, die Sie zum Anpassen der Funktionalität umschalten können:

Slurm-spezifische Konfigurationsoptionen BESCHREIBUNG
slurm.version Standardwert: 18.08.7-1. Legt die Version von Slurm fest, die installiert und ausgeführt werden soll. Derzeit ist es die Standardversion und die einzige Version verfügbar. In Zukunft werden möglicherweise weitere Versionen unterstützt.
slurm.autoscale Standardwert: false. Eine Einstellung pro Knotenarray, die steuert, ob Slurm automatisch stoppt und Knoten in diesem Knotenarray startet.
slurm.hpc Standardwert: true. Eine Einstellung pro Knotenarray, die steuert, ob sich Knoten im Knotenarray in derselben Platzierungsgruppe befinden. Wird in erster Linie für Knotenarrays verwendet, die VM-Familien mit InfiniBand verwenden. Sie gilt nur, wenn slurm.autoscale auf true festgelegt ist.
slurm.default_partition Standardwert: false. Eine Einstellung pro Knotenarray, die steuert, ob das Knotenarray die Standardpartition für Aufträge sein soll, die nicht explizit eine Partition anfordern.
slurm.dampen_memory Standardwert: 5. Der Prozentsatz des Speichers, der für den BS/VM-Aufwand zurückgehalten werden soll.
slurm.suspend_timeout Standardwert: 600. Die Zeitspanne in Sekunden zwischen einem Suspendierungsaufruf und dem Zeitpunkt, an dem dieser Knoten wieder verwendet werden kann.
slurm.resume_timeout Standardwert: 1800. Die Dauer in Sekunden, die auf den erfolgreichen Start eines Knotens gewartet werden soll.
slurm.install Standardwert: true. Bestimmt, ob Slurm beim Knotenstart (true) installiert ist. Wenn Sie Slurm in einem benutzerdefinierten Image installieren, legen Sie diese Konfigurationsoption auf false (proj Version 2.5.0+) fest.
slurm.use_pcpu Standardwert: true. Eine Einstellung pro Knotenarray zum Steuern der Planung mit Hyperthreaded-vCPUs. Stellen Sie dies auf false ein, um CPUs=vcpus in cyclecloud.conf festzulegen.
slurm.user.name Standardwert: slurm. Der Benutzername für den zu verwendenden Slurm-Dienst.
slurm.user.uid Standardwert: 11100. Die Benutzer-ID, die für den Slurm-Benutzer verwendet werden soll.
slurm.user.gid Standardwert: 11100. Die Für den Slurm-Benutzer zu verwendende Gruppen-ID.
munge.user.name Standardwert: munge. Der Benutzername für den zu verwendenden MUNGE-Authentifizierungsdienst.
munge.user.uid Standardwert: 11101. Die Benutzer-ID, die für den MUNGE-Benutzer verwendet werden soll.
munge.user.gid Standardwert: 11101. Die Gruppen-ID für den MUNGE-Benutzer.

CycleCloud unterstützt einen Standardsatz von Autostop-Attributen für verschiedene Scheduler:

Merkmal BESCHREIBUNG
cyclecloud.cluster.autoscale.stop_enabled Aktiviert den Autostopp auf diesem Knoten. [wahr/falsch]
cyclecloud.cluster.autoscale.idle_time_after_jobs Wie lange (in Sekunden) ein Knoten nach dem Abschluss von Aufträgen im Leerlauf liegen soll, bevor er automatisch gestoppt wird.
cyclecloud.cluster.autoscale.idle_time_before_jobs Wie lange (in Sekunden) ein Knoten vor dem Abschluss von Aufträgen im Leerlauf liegen soll, bevor er automatisch gestoppt wird.