CycleCloud Slurm 3.0
Stödet för Slurm Scheduler skrevs om som en del av CycleCloud 8.4.0-versionen. Viktiga funktioner omfattar bland annat:
- Stöd för dynamiska noder och dynamiska partitioner via dynamiska nodmatriser, med stöd för både enskilda och flera VM-storlekar
- Nya slurmversioner 23.02 och 22.05.8
- Kostnadsrapportering via
azslurm
CLI -
azslurm
cli-baserad autoskalning - Stöd för Ubuntu 20
- Behovet av topologi-plugin-program har tagits bort och därför även eventuella plugin-program för att skicka in
Slurm-kluster i CycleCloud-versionerna < 8.4.0
Mer information finns i Övergång från 2.7 till 3.0 .
Göra klusterändringar
Slurm-klustret som distribueras i CycleCloud innehåller ett cli som anropas azslurm
för att underlätta ändringar i klustret. När du har gjort några ändringar i klustret kör du följande kommando som rot på Slurm Scheduler-noden för att återskapa azure.conf
och uppdatera noderna i klustret:
$ sudo -i
# azslurm scale
Detta bör skapa partitionerna med rätt antal noder, rätt gres.conf
och starta om slurmctld
.
Kör noder skapas inte längre i förväg
Från och med version 3.0.0 av CycleCloud Slurm-projektet skapar vi inte längre noderna i CycleCloud. Noder skapas när azslurm resume
anropas eller genom att de skapas manuellt i CycleCloud via CLI.
Skapa ytterligare partitioner
Standardmallen som levereras med Azure CycleCloud har tre partitioner (hpc
htc
och ), och dynamic
du kan definiera anpassade nodmatriser 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:3.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
Dynamiska partitioner
Från och 3.0.1
med stöder vi dynamiska partitioner. Du kan skapa en nodearray
karta till en dynamisk partition genom att lägga till följande.
Observera att myfeature
kan vara valfri funktionsbeskrivning. Det kan också vara mer än en funktion, avgränsad med ett kommatecken.
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
# This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""
Detta genererar en dynamisk partition som följande
# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns
Använda dynamiska partitioner för autoskalning
Som standard definierar vi inga noder i den dynamiska partitionen. I stället kan du starta noder via CycleCloud eller genom att azslurm resume
manuellt anropa och de ansluter klustret med det namn du valde. Slurm känner dock inte till dessa noder så det kan inte skala upp dem automatiskt.
I stället kan du också skapa nodposter i förväg så här, vilket gör att Slurm kan skala upp dem automatiskt.
scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD
En annan fördel med dynamiska partitioner är att du kan ha stöd för flera VM-storlekar i samma partition.
Lägg bara till namnet på VM-storleken som en funktion och kan sedan azslurm
skilja på vilken VM-storlek du vill använda.
Observera Vm-storleken läggs till implicit. Du behöver inte lägga till den i slurm.dynamic_config
scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD
Hur som helst, när du har skapat dessa noder i en State=Cloud
är de nu tillgängliga för autoskalning som andra noder.
Om du vill ha stöd för flera VM-storlekar i en CycleCloud-nodmatris kan du ändra mallen så att flera VM-storlekar tillåts genom att lägga till Config.Mutiselect = true
.
[[[parameter DynamicMachineType]]]
Label = Dyn VM Type
Description = The VM type for Dynamic nodes
ParameterType = Cloud.MachineType
DefaultValue = Standard_F2s_v2
Config.Multiselect = true
Dynamisk nedskalning
Som standard skalas alla noder i den dynamiska partitionen ned precis som de andra partitionerna. Information om hur du inaktiverar detta finns i SuspendExcParts.
Manuell skalning
Om cyclecloud_slurm upptäcker att autoskalning är inaktiverat (SuspendTime=-1) använder det FUTURE-tillståndet för att ange noder som är avstängda i stället för att förlita sig på energispartillståndet i Slurm. Dvs. När autoskalning är aktiverat betecknas inaktiverade noder som idle~
i sinfo. När autoskalning är inaktiverat visas inte de inaktiverade noderna i sinfo alls. Du kan fortfarande se deras definition med scontrol show nodes --future
.
Starta nya noder genom att köra /opt/azurehpc/slurm/resume_program.sh node_list
(t.ex. htc-[1-10]).
Om du vill stänga av noder kör /opt/azurehpc/slurm/suspend_program.sh node_list
du (t.ex. htc-[1-10]).
Om du vill starta ett kluster i det här läget lägger du helt enkelt till SuspendTime=-1
ytterligare slurm-konfigurationen i mallen.
Om du vill växla ett kluster till det här läget lägger du till SuspendTime=-1
i slurm.conf och kör scontrol reconfigure
. Kör sedan azslurm remove_nodes && azslurm scale
.
Felsökning
Övergång från 2.7 till 3.0
Installationsmappen har ändrats
/opt/cycle/slurm
->/opt/azurehpc/slurm
Autoskalningsloggar finns nu i
/opt/azurehpc/slurm/logs
i stället för/var/log/slurmctld
.slurmctld.log
Obs! Kommer fortfarande att finnas i den här mappen.cyclecloud_slurm.sh
Längre. I stället finns det ett nyttazslurm
cli som kan köras som rot.azslurm
stöder automatisk komplettering.[root@scheduler ~]# azslurm usage: accounting_info - buckets - Prints out autoscale bucket information, like limits etc config - Writes the effective autoscale config, after any preprocessing, to stdout connect - Tests connection to CycleCloud cost - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature. default_output_columns - Output what are the default output columns for an optional command. generate_topology - Generates topology plugin configuration initconfig - Creates an initial autoscale config. Writes to stdout keep_alive - Add, remove or set which nodes should be prevented from being shutdown. limits - nodes - Query nodes partitions - Generates partition configuration refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes. remove_nodes - Removes the node from the scheduler without terminating the actual instance. resume - Equivalent to ResumeProgram, starts and waits for a set of nodes. resume_fail - Equivalent to SuspendFailProgram, shuts down nodes retry_failed_nodes - Retries all nodes in a failed state. scale - shell - Interactive python shell with relevant objects in local scope. Use --script to run python scripts suspend - Equivalent to SuspendProgram, shuts down nodes wait_for_resume - Wait for a set of nodes to converge.
Noder fylls inte längre i i förväg i CycleCloud. De skapas bara när det behövs.
Alla slurm-binärfiler finns i
azure-slurm-install-pkg*.tar.gz
filen underslurm-pkgs
. De hämtas från en specifik binär version. De aktuella binära releaes är 2023-03-13För MPI-jobb är partitionen den enda nätverksgräns som finns som standard. Det finns inte flera "placeringsgrupper" per partition som 2.x. Så du har bara en samplaceerad VMSS per partition. Det finns inte heller någon användning av topologi-plugin-programmet, vilket krävde användning av ett plugin-program för jobböverföring som inte längre behövs. I stället är att skicka till flera partitioner nu det rekommenderade alternativet för användningsfall som kräver att jobb skickas till flera placeringsgrupper.
CycleCloud stöder en standarduppsättning autostop-attribut 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. |