Freigeben über


Schrägstrich

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

Hinweis

Ab CycleCloud 8.4.0 wurde die Slurm-Integration umgeschrieben, 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

Slurm kann auf einfache Weise auf einem CycleCloud-Cluster aktiviert werden, indem der im Konfigurationsabschnitt Ihrer Clusterdefinition verfügbare "run_list" geändert wird. Die beiden grundlegenden Komponenten eines Slurm-Clusters sind der Knoten "scheduler", der ein freigegebenes Dateisystem bereitstellt, auf dem die Slurm-Software ausgeführt wird, und die Knoten "execute", die die Hosts sind, die das freigegebene Dateisystem bereitstellen und die übermittelten Aufträge ausgeführt haben. Ein einfacher Codeausschnitt für Clustervorlagen kann z. B. 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

Bearbeiten vorhandener Slurm-Cluster

Slurm-Cluster, die in CycleCloud-Versionen 7.8 ausgeführt werden, und implementieren später eine aktualisierte Version der automatischen Skalierungs-APIs, mit denen die Cluster mehrere Knotenarrays und Partitionen verwenden können. Um diese Funktionalität in Slurm zu unterstützen, füllt CycleCloud die ausgeführten Knoten im Cluster vor. Aufgrund der Vorpopulation müssen Sie einen Befehl auf dem Slurm-Schedulerknoten ausführen, nachdem Sie Änderungen am Cluster vorgenommen haben, z. B. Grenzwerte für 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 als Stamm (z. B durch Ausführen von sudo -i) auf dem Slurm-Planerknoten aus, um slurm.conf 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 die Knoten zuerst beendet werden. Der remove_nodes Befehl druckt in diesem Fall eine Warnung, beendet aber nicht mit einem Fehler. Wenn Knoten ausgeführt werden, wird die Fehlermeldung „This node doesn't match existing scaleset attribute“ angezeigt, wenn neue Knoten gestartet werden.

/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 Änderungen vornehmen, die VMs für Knoten in einer MPI-Partition betreffen (z. B. VM-Größe, Image oder Cloud-Init), und die Knoten laufen, tritt ein Fehler This node doesn't match existing scaleset attribute auf, wenn neue Knoten gestartet werden. Aus diesem Grund stellt der apply_changes Befehl sicher, dass die Knoten beendet werden, und schlägt mit dieser Fehlermeldung fehl, wenn dies nicht der Fall ist: 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+ vorhanden, sodass die einzige Möglichkeit besteht, eine Änderung in früheren Versionen vorzunehmen, mit den Overheadbefehlenremove_nodes + scale. Stellen Sie sicher, dass der remove_nodes-Befehl keine Warnung zu Knoten ausgibt, 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. Um beispielsweise eine GPU-Partition zu erstellen, fügen Sie der Clustervorlage den nächsten Abschnitt hinzu:

    [[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 eine kleine Menge Arbeitsspeicher verwenden, reduziert CycleCloud den Speicherwert in der Slurm-Konfiguration automatisch. Standardmäßig hält CycleCloud 5% des gemeldeten verfügbaren Speichers in einer VM zurück, dieser Wert kann jedoch in der Clustervorlage überschrieben werden, indem er auf den Prozentsatz des Speichers festgelegt slurm.dampen_memory wird, 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, ist es möglich, die automatische Skalierung für einen ausgeführten Slurm-Cluster zu 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 von der Autoskalierung auszuschließen, fügen Sie der Slurm-Konfigurationsdatei SuspendExcNodes=<listofnodes> hinzu. Um beispielsweise Knoten 1 und 2 aus der hpc Partition auszuschließen, fügen Sie folgendes 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

Das Ausschließen von vollständigen Partitionen von der Autoskala ähnelt dem Ausschließen von Knoten. Um die gesamte hpc Partition auszuschließen, fügen Sie die nächste 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 dies zu einem Konflikt mit einem anderen Benutzer oder einer anderen Gruppe führt, werden diese Standardwerte möglicherweise außer Kraft gesetzt.

Um die UID und GID außer Kraft zu setzen, klicken Sie auf die Schaltfläche „Bearbeiten“ für den scheduler-Knoten:

Scheduler bearbeiten

Scheduler bearbeiten

Und das execute-Knotenarray: Nodearray bearbeiten

Fügen Sie dem Configuration Abschnitt die nächsten 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. Zum Debuggen von Problemen mit der automatischen Skalierung gibt es einige Protokolle auf dem Planerknoten, den Sie überprüfen können. Als Erstes wird sichergestellt, dass die Anrufe zum Fortsetzen des Stromsparvorgangs durch Überprüfen von /var/log/slurmctld/slurmctld.log durchgeführt werden. Sie sollten Zeilen wie diese sehen:

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

Das andere zu überprüfende Protokoll lautet /var/log/slurmctld/resume.log. Wenn der Fortsetzungsschritt fehlschlägt, wird /var/log/slurmctld/resume_fail.log angezeigt. Wenn Nachrichten zu unbekannten oder ungültigen Knotennamen vorhanden sind, stellen Sie sicher, dass Knoten nicht zum Cluster hinzugefügt werden, ohne die Schritte im Abschnitt "Clusteränderungen vornehmen" zu befolgen.

Slurm-Konfigurationsreferenz

Als Nächstes sind die Slurm-spezifischen Konfigurationsoptionen aufgeführt, die Sie umschalten können, um die Funktionalität anzupassen.

Spezifische Slurm-Konfigurationsoptionen BESCHREIBUNG
slurm.version Standardwert: „18.08.7-1“ Dadurch wird die Slurm-Version so festgelegt, dass sie installiert und ausgeführt wird. Derzeit ist es die Standardoption und die einzige Option. In Zukunft werden möglicherweise weitere Versionen unterstützt.
slurm.autoscale Standard: 'falsch'. Eine Einstellung pro Knotenarray, die steuert, ob Slurm-Knoten in diesem Knotenarray automatisch beendet werden und starten soll.
slurm.hpc Standard: 'true'. Eine Einstellung pro Knotenarray, die steuert, ob Knoten im Knotenarray in derselben Platzierungsgruppe platziert werden. Wird hauptsächlich für Nodearrays mit VM-Familien, die InfiniBand nutzen, verwendet. Sie gilt nur, wenn "slurm.autoscale" auf "true" festgelegt ist.
slurm.default_partition Standard: 'falsch'. 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 Voreinstellung: '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, zu dem der Knoten erneut verwendet werden kann.
slurm.resume_timeout Standard: '1800'. Die Zeitspanne (in Sekunden), die auf den erfolgreichen Start eines Knotens gewartet werden soll.
slurm.install Standard: 'wahr'. Es wird geprüft, ob SLURM beim Start des Knotens installiert ist ('true'). Wenn Slurm in einem benutzerdefinierten Image installiert ist, sollte diese Konfigurationsoption auf "false" (proj Version 2.5.0+) festgelegt werden.
slurm.use_pcpu Standard: 'wahr'. Eine Einstellung pro Knotenarray zum Steuern der Planung mit Hyperthreaded Vcpus. Legen Sie „falsch“ fest, 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 Für den MUNGE-Benutzer zu verwendende Gruppen-ID.

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

Merkmal BESCHREIBUNG
cyclecloud.cluster.autoscale.stop_enabled Ist "Autostop" auf diesem Knoten aktiviert? [wahr/falsch]
cyclecloud.cluster.autoscale.Leerlaufzeit_nach_Aufträgen Die Zeit (in Sekunden), die ein Knoten nach Abschluss von Aufträgen im Leerlauf bleibt, bevor er herunterskaliert wird.
cyclecloud.cluster.autoscale.Wartezeit_vor_Arbeiten Die Zeitspanne (in Sekunden), die ein Knoten im Leerlauf verbleiben soll, nachdem er Aufträge abgeschlossen hat und bevor er verkleinert wird.