Sdílet prostřednictvím


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 -ipří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 :

Upravit scheduler

Upravit scheduler

A nodearray execute : Upravit Nodearray

a přidejte do oddílu Configuration následující atributy:

Upravit konfiguraci

    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.