Share via


Slurm

Slurm är en mycket konfigurerbar öppen källkod arbetsbelastningshanterare. Se Slurm-projektwebbplatsen för en översikt.

Anteckning

Från och med CycleCloud 8.4.0 har Slurm-integreringen skrivits om för att stödja nya funktioner. Mer information finns i Dokumentationen om Slurm 3.0 .

Slurm kan enkelt aktiveras i ett CycleCloud-kluster genom att ändra "run_list" i konfigurationsavsnittet i klusterdefinitionen. De två grundläggande komponenterna i ett Slurm-kluster är noden "master" (eller "scheduler") som tillhandahåller ett delat filsystem där Slurm-programvaran körs och de "kör"-noder som är de värdar som monterar det delade filsystemet och kör de jobb som skickas. Ett enkelt kodfragment för klustermallar kan till exempel se ut så här:

[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 kan enkelt aktiveras i ett CycleCloud-kluster genom att ändra "run_list" i konfigurationsavsnittet i klusterdefinitionen. De två grundläggande komponenterna i ett Slurm-kluster är noden "scheduler" som tillhandahåller ett delat filsystem där Slurm-programvaran körs och "kör"-noderna som är de värdar som monterar det delade filsystemet och kör de jobb som skickas. Ett enkelt kodfragment för klustermallar kan till exempel se ut så här:

[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

Redigera befintliga Slurm-kluster

Slurm-kluster som körs i CycleCloud version 7.8 och senare implementerar en uppdaterad version av API:erna för automatisk skalning som gör att klustren kan använda flera nodearrays och partitioner. För att underlätta den här funktionen i Slurm fyller CycleCloud i förinstallerade körningsnoder i klustret. Därför måste du köra ett kommando på Noden Slurm Scheduler när du har gjort ändringar i klustret, till exempel autoskalningsgränser eller VM-typer.

Göra klusterändringar

Slurm-klustret som distribueras i CycleCloud innehåller ett skript som underlättar detta. När du har gjort några ändringar i klustret kör du följande som rot (t.ex. genom att köra sudo -i) på Slurm Scheduler-noden för att återskapa slurm.conf och uppdatera noderna i klustret:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Anteckning

För CycleCloud version < 7.9.10 finns skriptet cyclecloud_slurm.sh i /opt/cycle/jetpack/system/bootstrap/slurm.

Viktigt

Om du gör ändringar som påverkar de virtuella datorerna för noder i en MPI-partition (till exempel VM-storlek, avbildning eller cloud-init) måste alla noder avslutas först. Kommandot remove_nodes skriver ut en varning i det här fallet, men avslutas inte med ett fel. Om det finns noder som körs får du ett felmeddelande om This node does not match existing scaleset attribute när nya noder startas.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Anteckning

För CycleCloud version < 8.2 finns skriptet cyclecloud_slurm.sh i /opt/cycle/jetpack/system/bootstrap/slurm.

Om du gör ändringar som påverkar de virtuella datorerna för noder i en MPI-partition (till exempel VM-storlek, avbildning eller cloud-init) och noderna körs får du ett felmeddelande om This node does not match existing scaleset attribute när nya noder startas. Av den anledningen apply_changes ser kommandot till att noderna avslutas och misslyckas med följande felmeddelande om inte: Följande noder måste avslutas helt innan ändringarna tillämpas.

Om du gör en ändring som INTE påverkar egenskaperna för virtuella datorer för MPI-noder behöver du inte avsluta de noder som körs först. I det här fallet kan du göra ändringarna med hjälp av följande två kommandon:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Anteckning

Kommandot apply_changes finns bara i CycleCloud 8.3+, så det enda sättet att göra en ändring i tidigare versioner är med kommandona ovan + remove_nodesscale. Kontrollera att remove_nodes kommandot inte skriver ut en varning om noder som måste avslutas.

Skapa ytterligare partitioner

Standardmallen som levereras med Azure CycleCloud har två partitioner (hpc och htc), och du kan definiera anpassade nodearrays som mappar direkt till Slurm-partitioner. Om du till exempel vill skapa en GPU-partition lägger du till följande avsnitt i klustermallen:

    [[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

Minnesinställningar

CycleCloud anger automatiskt mängden tillgängligt minne som Slurm ska använda i schemaläggningssyfte. Eftersom mängden tillgängligt minne kan ändras något på grund av olika Alternativ för Linux-kernel, och operativsystemet och den virtuella datorn kan använda upp en liten mängd minne som annars skulle vara tillgängligt för jobb, minskar CycleCloud automatiskt mängden minne i Slurm-konfigurationen. Som standard rymmer CycleCloud 5 % av det rapporterade tillgängliga minnet på en virtuell dator, men det här värdet kan åsidosättas i klustermallen genom att ange slurm.dampen_memory den procentandel minne som ska hållas tillbaka. Om du till exempel vill lagra 20 % av den virtuella datorns minne:

    slurm.dampen_memory=20

Inaktivera autoskalning för specifika noder eller partitioner

Även om den inbyggda funktionen "KeepAlive" i CycleCloud för närvarande inte fungerar för Slurm-kluster, är det möjligt att inaktivera autoskalning för ett Slurm-kluster som körs genom att redigera slurm.conf-filen direkt. Du kan undanta enskilda noder eller hela partitioner från att skalas automatiskt.

Exkluderande en nod

Om du vill undanta en nod eller flera noder från autoskalning lägger du till SuspendExcNodes=<listofnodes> i Slurm-konfigurationsfilen. Om du till exempel vill undanta noderna 1 och 2 från hpc-partitionen lägger du till följande i /sched/slurm.conf:

SuspendExcNodes=hpc-pg0-[1-2]

Starta sedan om slurmctld tjänsten för att den nya konfigurationen ska börja gälla.

Exkludering av en partition

Exkludering av hela partitioner från autoskalning liknar exkludering av noder. Om du vill undanta hela hpc partitionen lägger du till följande i /sched/slurm.conf

SuspendExcParts=hpc

Starta sedan om slurmctld tjänsten.

Felsökning

UID-konflikter för Slurm- och Munge-användare

Som standard använder det här projektet ett UID och ett GID på 11100 för Slurm-användaren och 11101 för Munge-användaren. Om detta orsakar en konflikt med en annan användare eller grupp kan dessa standardvärden åsidosättas.

Om du vill åsidosätta UID och GID klickar du på redigeringsknappen för båda scheduler noden:

Redigera Scheduler

Redigera Scheduler

execute Och nodearray: Redigera Nodearray

och lägg till följande attribut i avsnittet Configuration :

Redigera konfiguration Redigera

    slurm.user.name = slurm
    slurm.user.uid = 11100
    slurm.user.gid = 11100
    munge.user.name = munge
    munge.user.uid = 11101
    munge.user.gid = 11101

Automatisk skalning

CycleCloud använder Slurms elastic computing-funktion . För att felsöka problem med autoskalning finns det några loggar på den scheduler-nod som du kan kontrollera. Den första är att se till att anropen för att spara energi återupptas genom att kontrollera /var/log/slurmctld/slurmctld.log. Du bör se rader som:

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

Den andra loggen som ska kontrolleras är /var/log/slurmctld/resume.log. Om återuppta-steget misslyckas kommer det också att finnas en /var/log/slurmctld/resume_fail.log. Om det finns meddelanden om okända eller ogiltiga nodnamn kontrollerar du att du inte har lagt till noder i klustret utan att följa stegen i avsnittet "Gör klusterändringar" ovan.

Referens för Slurm-konfiguration

Följande är de Slurm-specifika konfigurationsalternativ som du kan växla för att anpassa funktioner:

Slurm-specifika konfigurationsalternativ Description
slurm.version Standard: "18.08.7-1". Det här är Slurm-versionen som ska installeras och köras. Det här är för närvarande standardalternativet och det enda alternativet. I framtiden kan ytterligare versioner av Slurm-programvaran stödjas.
slurm.autoscale Standard: "false". Det här är en inställning per nod som styr om Slurm automatiskt ska stoppa och starta noder i den här nodearrayen.
slurm.hpc Standard: "true". Det här är en inställning per nod som styr om noder i nodearray ska placeras i samma placeringsgrupp. Används främst för nodearrays med hjälp av VM-familjer med InfiniBand. Det gäller bara när slurm.autoscale är inställt på "true".
slurm.default_partition Standard: "false". Det här är en inställning per nod som styr om nodearray ska vara standardpartitionen för jobb som inte uttryckligen begär en partition.
slurm.dampen_memory Standard: "5". Den procentandel minne som ska hållas tillbaka för omkostnader för operativsystem/virtuella datorer.
slurm.suspend_timeout Standard: '600'. Hur lång tid (i sekunder) mellan ett pausanrop och när noden kan användas igen.
slurm.resume_timeout Standard: '1800'. Hur lång tid (i sekunder) som ska vänta på att en nod startas.
slurm.install Standard: "true". Avgör om Slurm är installerat vid nodstart ("sant"). Om Slurm installeras i en anpassad avbildning ska detta anges till "false". (proj version 2.5.0+)
slurm.use_pcpu Standard: "true". Det här är en inställning per nod för att styra schemaläggning med hypertrådade vcpus. Ange till "false" för att ange processorer=vcpus i cyclecloud.conf.
slurm.user.name Standard: "slurm". Det här är användarnamnet för Slurm-tjänsten som ska användas.
slurm.user.uid Standard: "11100". Användar-ID:t som ska användas för Slurm-användaren.
slurm.user.gid Standard: "11100". Det grupp-ID som ska användas för Slurm-användaren.
munge.user.name Standard: "munge". Det här är användarnamnet för MUNGE-autentiseringstjänsten som ska användas.
munge.user.uid Standard: "11101". Användar-ID:t som ska användas för MUNGE-användaren.
munge.user.gid Standard: "11101". Det grupp-ID som ska användas för MUNGE-användaren.

CycleCloud stöder en standarduppsättning autostopattribut mellan schemaläggare:

Attribut Beskrivning
cyclecloud.cluster.autoscale.stop_enabled Är autostop aktiverat på den här noden? [sant/falskt]
cyclecloud.cluster.autoscale.idle_time_after_jobs Hur lång tid (i sekunder) en nod ska vara inaktiv när jobben har slutförts innan den skalas ned.
cyclecloud.cluster.autoscale.idle_time_before_jobs Hur lång tid (i sekunder) en nod ska vara inaktiv innan jobben slutförs innan den skalas ned.