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.
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:
Und das execute-Knotenarray: 
Fügen Sie dem Configuration Abschnitt die 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
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. |