Slurm
Slurm je vysoce konfigurovatelný open source správce úloh. Přehled najdete na webu projektu Slurm .
Poznámka
Od verze CycleCloud 8.4.0 se integrace Slurm přepsala tak, aby podporovala nové funkce. Další informace najdete v dokumentaci k verzi Slurm 3.0 .
Slurm je možné snadno povolit v clusteru CycleCloud úpravou run_list v části konfigurace definice clusteru. Dvě základní komponenty clusteru Slurm jsou uzel "master" (nebo "scheduler"), který poskytuje sdílený systém souborů, na kterém běží software Slurm, a uzly "execute", což jsou hostitelé, kteří připojují sdílený systém souborů a spouštějí odeslané úlohy. Například jednoduchý fragment kódu šablony clusteru může vypadat takto:
[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 je možné snadno povolit v clusteru CycleCloud úpravou run_list v části konfigurace definice clusteru. Dvě základní součásti clusteru Slurm jsou uzel "scheduler", který poskytuje sdílený systém souborů, na kterém běží software Slurm, a uzly spouštění, což jsou hostitelé, kteří připojují sdílený systém souborů a provádějí odeslané úlohy. Například jednoduchý fragment kódu šablony clusteru může vypadat takto:
[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
Úprava existujících clusterů slurm
Clustery služby Slurm spuštěné v CycleCloudu verze 7.8 a novější implementují aktualizovanou verzi rozhraní API automatického škálování, která clusterům umožňuje využívat více uzlů a oddílů. Aby se tato funkce ve službě Slurm usnadnila, CycleCloud předem naplní uzly spuštění v clusteru. Z tohoto důvodu musíte po provedení jakýchkoli změn clusteru, jako jsou limity automatického škálování nebo typy virtuálních počítačů, spustit příkaz na uzlu plánovače slurm.
Provádění změn clusteru
Cluster Slurm nasazený v CycleCloudu obsahuje skript, který to usnadňuje. Po provedení jakýchkoli změn clusteru spusťte následující příkaz jako root (např. spuštěním sudo -i
příkazu ) na uzlu plánovače slurm, abyste znovu vytvořili slurm.conf
a aktualizovali uzly v clusteru:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Poznámka
Pro CycleCloud verze < 7.9.10 cyclecloud_slurm.sh
se skript nachází v /opt/cycle/jetpack/system/bootstrap/slurm.
Důležité
Pokud provedete jakékoli změny, které mají vliv na virtuální počítače pro uzly v oddílu MPI (například velikost virtuálního počítače, image nebo cloud-init), musí být všechny uzly nejprve ukončeny.
Příkaz remove_nodes
v tomto případě vytiskne upozornění, ale nezavdá se s chybou.
Pokud existují spuštěné uzly, zobrazí se při spuštění nových uzlů chyba This node does not match existing scaleset attribute
.
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
Poznámka
Pro CycleCloud verze < 8.2 cyclecloud_slurm.sh
se skript nachází ve složce /opt/cycle/jetpack/system/bootstrap/slurm.
Pokud provedete změny, které mají vliv na virtuální počítače pro uzly v oddílu MPI (například velikost virtuálního počítače, image nebo cloud-init), a uzly jsou spuštěné, zobrazí se při spuštění nových uzlů chyba This node does not match existing scaleset attribute
. Z tohoto důvodu příkaz zajistí, apply_changes
že uzly jsou ukončeny, a pokud ne, selže s následující chybovou zprávou: Před provedením změn musí být plně ukončeny následující uzly.
Pokud provádíte změnu, která nemá vliv na vlastnosti virtuálních počítačů pro uzly MPI, nemusíte nejprve ukončovat spuštěné uzly. V takovém případě můžete změny provést pomocí následujících dvou příkazů:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
Poznámka
Příkaz apply_changes
existuje pouze v CycleCloudu 8.3+, takže jediným způsobem, jak provést změnu v dřívějších verzích, je použít výše uvedené remove_nodes
+ scale
příkazy.
Ujistěte se, že remove_nodes
příkaz nevytiskl upozornění na uzly, které je potřeba ukončit.
Vytváření dalších oddílů
Výchozí šablona, která se dodává se službou Azure CycleCloud, má dva oddíly (hpc
a htc
) a můžete definovat vlastní uzly, které se mapují přímo na oddíly Slurm. Pokud chcete například vytvořit oddíl GPU, přidejte do šablony clusteru následující část:
[[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
Nastavení paměti
CycleCloud automaticky nastaví velikost dostupné paměti, kterou služba Slurm použije pro účely plánování. Vzhledem k tomu, že množství dostupné paměti se může mírně změnit kvůli různým možnostem jádra Linuxu a operační systém a virtuální počítač můžou využívat malé množství paměti, které by jinak byly k dispozici pro úlohy, CycleCloud automaticky snižuje množství paměti v konfiguraci Slurm. CycleCloud ve výchozím nastavení uchovává 5 % hlášené dostupné paměti na virtuálním počítači, ale tuto hodnotu je možné přepsat v šabloně clusteru nastavením slurm.dampen_memory
na procento paměti, která se má uchovávat. Pokud chcete například zadržet 20 % paměti virtuálního počítače:
slurm.dampen_memory=20
Zakázání automatického škálování pro konkrétní uzly nebo oddíly
I když integrovaná funkce KeepAlive v CycleCloudu v současné době nefunguje pro clustery Slurm, je možné zakázat automatické škálování pro spuštěný cluster Slurm přímo úpravou souboru slurm.conf. Z automatického škálování můžete vyloučit jednotlivé uzly nebo celé oddíly.
Vyloučení uzlu
Pokud chcete z automatického škálování vyloučit uzel nebo více uzlů, přidejte SuspendExcNodes=<listofnodes>
do konfiguračního souboru Slurm. Pokud chcete například vyloučit uzly 1 a 2 z oddílu hpc, přidejte do /sched/slurm.conf
:
SuspendExcNodes=hpc-pg0-[1-2]
Pak restartujte službu, slurmctld
aby se nová konfigurace projevila.
Vyloučení oddílu
Vyloučení celých oddílů z automatického škálování se podobá vyloučení uzlů. Pokud chcete vyloučit celý hpc
oddíl, přidejte do /sched/slurm.conf
SuspendExcParts=hpc
Pak službu restartujte slurmctld
.
Řešení potíží
Konflikty UID pro uživatele Slurm a Munge
Ve výchozím nastavení tento projekt používá UID a GID 11100 pro uživatele Slurm a 11101 pro uživatele Munge. Pokud to způsobí konflikt s jiným uživatelem nebo skupinou, mohou být tyto výchozí hodnoty přepsány.
Pokud chcete přepsat UID a GID, klikněte na tlačítko Upravit pro oba uzly scheduler
:
A nodearray execute
:
a přidejte do oddílu Configuration
následující atributy:
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
Automatické škálování
CycleCloud používá funkci Elastic Computingu od Slurmu. Pokud chcete ladit problémy s automatickým škálováním, existuje na uzlu plánovače několik protokolů, které můžete zkontrolovat. První je ověření, že se provádí volání obnovení úspory energie tím, že zaškrtnete /var/log/slurmctld/slurmctld.log
. Měly by se zobrazit řádky jako:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
Druhý protokol, který se má zkontrolovat, je /var/log/slurmctld/resume.log
. Pokud krok obnovení selhává, bude k dispozici také /var/log/slurmctld/resume_fail.log
. Pokud se zobrazí zprávy o neznámých nebo neplatných názvech uzlů, ujistěte se, že jste uzly do clusteru nepřidali, aniž byste museli postupovat podle výše uvedených kroků v části Provádění změn clusteru.
Referenční informace ke konfiguraci služby Slurm
Níže jsou uvedené možnosti konfigurace specifické pro slurm, které můžete přepnout a přizpůsobit funkce:
Možnosti konfigurace specifické pro slurm | Description |
---|---|
slurm.version | Výchozí: 18.08.7-1. Toto je verze Slurm, která se má nainstalovat a spustit. Toto je aktuálně výchozí a jediná možnost. V budoucnu mohou být podporovány další verze softwaru Slurm. |
slurm.autoscale | Výchozí hodnota: false. Toto je nastavení pro jednotlivé uzlyarray, které určuje, jestli má slurm automaticky zastavovat a spouštět uzly v tomto nodearray. |
slurm.hpc | Výchozí: "true". Toto je nastavení pro jednotlivé uzlyarray, které určuje, zda budou uzly v nodearray umístěny do stejné skupiny umístění. Primárně se používá pro nodearray využívající rodiny virtuálních počítačů s InfiniBandem. Platí jenom v případě, že je nastavená hodnota slurm.autoscale na hodnotu true. |
slurm.default_partition | Výchozí hodnota: false. Toto je nastavení pro jednotlivé uzlyarray, které určuje, jestli má být nodearray výchozím oddílem pro úlohy, které explicitně nevyžadují oddíl. |
slurm.dampen_memory | Výchozí hodnota: 5. Procento paměti, která se má zadržet kvůli režii operačního systému nebo virtuálního počítače |
slurm.suspend_timeout | Výchozí hodnota: 600. Doba (v sekundách) mezi voláním pozastavení a časem, kdy je možné tento uzel znovu použít. |
slurm.resume_timeout | Výchozí hodnota: 1800. Doba čekání na úspěšné spuštění uzlu (v sekundách). |
slurm.install | Výchozí: "true". Určuje, jestli se slurm nainstaluje při spuštění uzlu (true). Pokud je služba Slurm nainstalovaná ve vlastní imagi, měla by být nastavená na hodnotu false. (proj verze 2.5.0+) |
slurm.use_pcpu | Výchozí: "true". Toto je nastavení pro řízení plánování pomocí hyperthreaded vcpus pro jednotlivé uzly. Pokud chcete v souboru cyclecloud.conf nastavit CPUs=vcpus, nastavte na false. |
slurm.user.name | Výchozí: "slurm". Toto je uživatelské jméno, které má služba Slurm používat. |
slurm.user.uid | Výchozí hodnota: 11100. ID uživatele, které se má použít pro uživatele služby Slurm. |
slurm.user.gid | Výchozí hodnota: 11100. ID skupiny, které se má použít pro uživatele služby Slurm. |
munge.user.name | Výchozí: munge. Toto je uživatelské jméno pro ověřovací službu MUNGE, která se má použít. |
munge.user.uid | Výchozí: 11101. ID uživatele, které se má použít pro uživatele MUNGE. |
munge.user.gid | Výchozí: 11101. ID skupiny, které se má použít pro uživatele MUNGE. |
CycleCloud podporuje standardní sadu atributů automatického plánování napříč plánovači:
Atribut | Popis |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Je na tomto uzlu povolené automatické řešení? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Doba (v sekundách) nečinnosti uzlu po dokončení úloh před vertikálním snížením kapacity. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Doba (v sekundách) nečinnosti uzlu před dokončením úloh před vertikálním snížením kapacity. |