Slurm
Slurm ist ein hochgradig konfigurierbarer Open Source Workload-Manager. Eine Übersicht finden Sie auf der Slurm-Projektwebsite .
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 Dokumentation zu Slurm 3.0 .
Slurm kann auf einfache Weise in einem CycleCloud-Cluster aktiviert werden, indem Sie den "run_list" im Konfigurationsabschnitt Ihrer Clusterdefinition ändern. Die beiden grundlegenden Komponenten eines Slurm-Clusters sind der Knoten "master" (oder "Scheduler"), der ein freigegebenes Dateisystem bereitstellt, auf dem die Slurm-Software ausgeführt wird, und die "execute"-Knoten, die die Hosts sind, die das freigegebene Dateisystem einbinden und die übermittelten Aufträge ausführen. Ein einfacher Clustervorlagenausschnitt kann beispielsweise 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 in einem CycleCloud-Cluster aktiviert werden, indem Sie den "run_list" im Konfigurationsabschnitt Ihrer Clusterdefinition ändern. 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 "execute"-Knoten, die die Hosts sind, die das freigegebene Dateisystem einbinden und die übermittelten Aufträge ausführen. Ein einfacher Clustervorlagenausschnitt kann 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
Bearbeiten vorhandener Slurm-Cluster
Slurm-Cluster, die in CycleCloud-Versionen 7.8 und höher ausgeführt werden, implementieren eine aktualisierte Version der APIs für die automatische Skalierung, die es den Clustern ermöglicht, mehrere Nodearrays und Partitionen zu verwenden. Um diese Funktionalität in Slurm zu vereinfachen, füllt CycleCloud die Ausführungsknoten im Cluster vorab auf. Daher müssen Sie einen Befehl auf dem Slurm-Planerknoten ausführen, nachdem Sie Änderungen am Cluster vorgenommen haben, z. B. Grenzwerte für die automatische Skalierung oder VM-Typen.
Vornehmen von Clusteränderungen
Der in CycleCloud bereitgestellte Slurm-Cluster enthält ein Skript, das dies erleichtert. Nachdem Sie Änderungen am Cluster vorgenommen haben, führen Sie Folgendes als Stamm (z. B. durch Ausführen sudo -i
von ) auf dem Planerknoten Slurm aus, um die slurm.conf
Knoten im Cluster 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 < 7.9.10 befindet sich das cyclecloud_slurm.sh
Skript in /opt/cycle/jetpack/system/bootstrap/slurm.
Wichtig
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 alle Knoten zuerst beendet werden.
Der remove_nodes
Befehl gibt in diesem Fall eine Warnung aus, wird aber nicht mit einem Fehler beendet.
Wenn Knoten ausgeführt werden, erhalten Sie die Fehlermeldung This node does not match existing scaleset attribute
, 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 sich auf die VMs für Knoten in einer MPI-Partition auswirken (z. B. VM-Größe, Image oder cloud-init), und die Knoten ausgeführt werden, erhalten Sie eine Fehlermeldung, This node does not match existing scaleset attribute
wenn neue Knoten gestartet werden. Aus diesem Grund stellt der apply_changes
Befehl sicher, dass die Knoten beendet werden, und schlägt mit der folgenden Fehlermeldung fehl, wenn dies nicht der Fall ist: Die folgenden Knoten müssen vor dem Anwenden von Änderungen vollständig beendet werden.
Wenn Sie eine Änderung vornehmen, die sich NICHT auf die VM-Eigenschaften für MPI-Knoten auswirkt, müssen Sie die ausgeführten 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 und höher vorhanden, sodass die einzige Möglichkeit, eine Änderung in früheren Versionen vorzunehmen, die oben genannten remove_nodes
+ scale
Befehle sind.
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 im Lieferumfang von Azure CycleCloud enthalten ist, enthält zwei Partitionen (hpc
und htc
), und Sie können benutzerdefinierte Nodearrays definieren, die direkt Slurm-Partitionen zugeordnet werden. Um beispielsweise eine GPU-Partition zu erstellen, fügen Sie der Clustervorlage den folgenden 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
Speichereinstellungen
CycleCloud legt automatisch die Menge des verfügbaren Arbeitsspeichers fest, den Slurm zu Planungszwecken verwenden soll. Da sich die Menge des verfügbaren Arbeitsspeichers aufgrund verschiedener Linux-Kerneloptionen geringfügig ändern kann und betriebssystem und VM eine kleine Menge an Arbeitsspeicher verbrauchen können, die andernfalls für Aufträge verfügbar wäre, reduziert CycleCloud automatisch die Arbeitsspeichermenge in der Slurm-Konfiguration. Standardmäßig hält CycleCloud 5 % des gemeldeten verfügbaren Arbeitsspeichers auf einem virtuellen Computer zurück, aber dieser Wert kann in der Clustervorlage überschrieben werden, indem auf den Prozentsatz des Arbeitsspeichers festgelegt slurm.dampen_memory
wird, der zurückgehalten werden soll. Wenn Sie beispielsweise 20 % des Arbeitsspeichers einer VM zurückhalten möchten:
slurm.dampen_memory=20
Deaktivieren der automatischen Skalierung für bestimmte Knoten oder Partitionen
Während 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 Knoten oder mehrere Knoten von der automatischen Skalierung auszuschließen, fügen Sie der Slurm-Konfigurationsdatei hinzu SuspendExcNodes=<listofnodes>
. Um beispielsweise die Knoten 1 und 2 aus der HPC-Partition auszuschließen, fügen Sie Folgendes zu /sched/slurm.conf
hinzu:
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 ganzer Partitionen aus der automatischen Skalierung ähnelt dem Ausschließen von Knoten. Um die gesamte hpc
Partition auszuschließen, fügen Sie Folgendes zu 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 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 überschrieben.
Um die UID und GID außer Kraft zu setzen, klicken Sie auf die Schaltfläche Bearbeiten für beide Knoten scheduler
:
Und das execute
nodearray:
und fügen Sie dem Abschnitt die Configuration
folgenden Attribute hinzu:
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Autoscale
CycleCloud verwendet das Elastic Computing-Feature von Slurm. Um Probleme mit der automatischen Skalierung zu debuggen, gibt es einige Protokolle auf dem Planerknoten, die Sie überprüfen können. Die erste besteht darin, sicherzustellen, dass die Aufrufe zur Stromsparaufnahme ausgeführt werden, indem Sie überprüfen /var/log/slurmctld/slurmctld.log
. Es sollten Zeilen wie folgt angezeigt werden:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Das andere zu überprüfende Protokoll ist /var/log/slurmctld/resume.log
. Wenn der Fortsetzungsschritt fehlschlägt, gibt es auch eine /var/log/slurmctld/resume_fail.log
. Wenn Meldungen zu unbekannten oder ungültigen Knotennamen vorhanden sind, stellen Sie sicher, dass Sie dem Cluster keine Knoten hinzugefügt haben, ohne die Schritte im Abschnitt "Vornehmen von Clusteränderungen" oben auszuführen.
Slurm-Konfigurationsreferenz
Im Folgenden finden Sie die slurm-spezifischen Konfigurationsoptionen, die Sie umschalten können, um die Funktionalität anzupassen:
Slurm-spezifische Konfigurationsoptionen | BESCHREIBUNG |
---|---|
slurm.version | Standardwert: '18.08.7-1'. Dies ist die Slurm-Version, die installiert und ausgeführt werden soll. Dies ist derzeit die Standardoption. In zukunft können zusätzliche Versionen der Slurm-Software unterstützt werden. |
slurm.autoscale | Standardwert: "false". Dies ist eine Einstellung pro Nodearray, die steuert, ob Slurm Knoten in diesem nodearray automatisch beenden und starten soll. |
slurm.hpc | Standardwert: "true". Dies ist eine Einstellung pro Nodearray, die steuert, ob Knoten im Nodearray in derselben Platzierungsgruppe platziert werden. Wird in erster Linie für Nodearrays mit VM-Familien mit InfiniBand verwendet. Sie gilt nur, wenn slurm.autoscale auf "true" festgelegt ist. |
slurm.default_partition | Standardwert: "false". Dies ist eine Pro-Nodearray-Einstellung, die steuert, ob nodearray die Standardpartition für Aufträge sein soll, die keine Partition explizit anfordern. |
slurm.dampen_memory | Standardwert: '5'. Der Prozentsatz des Arbeitsspeichers, der für den Betriebssystem-/VM-Overhead zurückgehalten werden soll. |
slurm.suspend_timeout | Standardwert: '600'. Die Zeitspanne (in Sekunden) zwischen einem Angehaltenen Aufruf und dem Zeitpunkt, an dem dieser Knoten erneut verwendet werden kann. |
slurm.resume_timeout | Standardwert: "1800". Die Zeitspanne (in Sekunden), die auf den erfolgreichen Start eines Knotens gewartet werden muss. |
slurm.install | Standardwert: "true". Bestimmt, ob Slurm beim Knotenstart installiert ist ('true'). Wenn Slurm in einem benutzerdefinierten Image installiert ist, sollte dies auf "false" festgelegt werden. (proj Version 2.5.0 und höher) |
slurm.use_pcpu | Standardwert: "true". Dies ist eine Nodearray-Einstellung zum Steuern der Planung mit hyperthreaded vcpus. Legen Sie auf "false" fest, um CPUs=vcpus in cyclecloud.conf festzulegen. |
slurm.user.name | Standardwert: "slurm". Dies ist der Benutzername, den der Slurm-Dienst verwenden soll. |
slurm.user.uid | Standardwert: '11100'. Die Benutzer-ID, die für den Slurm-Benutzer verwendet werden soll. |
slurm.user.gid | Standardwert: '11100'. Die Gruppen-ID, die für den Slurm-Benutzer verwendet werden soll. |
munge.user.name | Standardwert: "munge". Dies ist der Benutzername, den der MUNGE-Authentifizierungsdienst verwenden soll. |
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, die für den MUNGE-Benutzer verwendet werden soll. |
CycleCloud unterstützt einen Standardsatz von Autostop-Attributen für Planer:
Attribut | BESCHREIBUNG |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Ist autostop auf diesem Knoten aktiviert? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Die Zeitspanne (in Sekunden), für die ein Knoten nach Abschluss von Aufträgen im Leerlauf bleibt, bevor er herunterskaliert wird. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Die Zeitspanne (in Sekunden), in der ein Knoten im Leerlauf sitzt, bevor aufträge abgeschlossen werden, bevor er herunterskaliert wird. |