Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Und das execute
-Knotenarray:
Fügen Sie dem Configuration
Abschnitt die nächsten 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
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. |