CycleCloud Slurm 3.0
Il supporto dell'utilità di pianificazione Slurm è stato riscritto come parte della versione CycleCloud 8.4.0. Le funzionalità principali includono:
- Supporto per nodi dinamici e partizioni dinamiche tramite nodearay dinamici, che supportano dimensioni di vm singole e multiple
- Nuove versioni slurm 23.02 e 22.05.8
- Creazione di report sui costi tramite l'interfaccia della riga
azslurm
di comando -
azslurm
Ridimensionamento automatico basato sull'interfaccia della riga di comando - Supporto di Ubuntu 20
- Rimozione della necessità di plug-in di topologia e quindi anche di qualsiasi plug-in di invio
Cluster Slurm nelle versioni < 8.4.0 di CycleCloud
Per altre informazioni, vedere Transizione dalla versione 2.7 alla 3.0 .
Apportare modifiche al cluster
Il cluster Slurm distribuito in CycleCloud contiene un'interfaccia della riga di comando denominata azslurm
per facilitare le modifiche apportate al cluster. Dopo aver apportato modifiche al cluster, eseguire il comando seguente come radice nel nodo dell'utilità di pianificazione Slurm per ricompilare e azure.conf
aggiornare i nodi nel cluster:
$ sudo -i
# azslurm scale
È necessario creare le partizioni con il numero corretto di nodi, il corretto gres.conf
e riavviare .slurmctld
Nodi di esecuzione non più creati in fase di pre-creazione
A partire dalla versione 3.0.0 del progetto CycleCloud Slurm, i nodi in CycleCloud non vengono più creati in fase di pre-creazione. I nodi vengono creati quando azslurm resume
vengono richiamati o creandoli manualmente in CycleCloud tramite l'interfaccia della riga di comando.
Creazione di partizioni aggiuntive
Il modello predefinito fornito con Azure CycleCloud include tre partizioni (hpc
htc
e dynamic
) ed è possibile definire oggetti nodearray personalizzati che eseguono il mapping direttamente alle partizioni Slurm. Ad esempio, per creare una partizione GPU, aggiungere la sezione seguente al modello di cluster:
[[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
Partizioni dinamiche
A partire da 3.0.1
, sono supportate le partizioni dinamiche. È possibile creare una nodearray
mappa a una partizione dinamica aggiungendo quanto segue.
Si noti che myfeature
potrebbe essere una descrizione della funzionalità desiderata. Può anche essere più di una funzionalità, separata da una virgola.
[[[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\""
Verrà generata una partizione dinamica simile alla seguente
# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns
Uso di partizioni dinamiche per la scalabilità automatica
Per impostazione predefinita, non vengono definiti nodi nella partizione dinamica. È invece possibile avviare i nodi tramite CycleCloud o richiamando azslurm resume
manualmente e uniranno il cluster con qualsiasi nome selezionato. Tuttavia, Slurm non conosce questi nodi in modo che non possa ridimensionarli automaticamente.
È invece possibile pre-creare record di nodo come in questo modo, in modo da consentire a Slurm di ridimensionarli automaticamente.
scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD
Un altro vantaggio delle partizioni dinamiche è che è possibile supportare più dimensioni di vm nella stessa partizione.
È sufficiente aggiungere il nome delle dimensioni della macchina virtuale come funzionalità e quindi azslurm
distinguere le dimensioni della macchina virtuale da usare.
Nota La dimensione della macchina virtuale viene aggiunta in modo implicito. Non è necessario aggiungerlo a 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
In entrambi i casi, dopo aver creato questi nodi in un State=Cloud
oggetto sono ora disponibili per la scalabilità automatica come altri nodi.
Per supportare più dimensioni di vm in un nodearray CycleCloud, è possibile modificare il modello per consentire più dimensioni di vm aggiungendo 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
Scalabilità orizzontale dinamica
Per impostazione predefinita, tutti i nodi nella partizione dinamica verranno ridimensionati esattamente come le altre partizioni. Per disabilitare questa impostazione, vedere SuspendExcParts.
Ridimensionamento manuale
Se cyclecloud_slurm rileva che la scalabilità automatica è disabilitata (SuspendTime=-1), userà lo stato FUTURE per indicare i nodi spenti anziché basarsi sullo stato di alimentazione in Slurm. Ad esempio, quando la scalabilità automatica è abilitata, i nodi vengono indicati come idle~
in sinfo. Quando la scalabilità automatica è disabilitata, i nodi disattivati non verranno visualizzati affatto in sinfo. È comunque possibile visualizzare la relativa definizione con scontrol show nodes --future
.
Per avviare nuovi nodi, eseguire /opt/azurehpc/slurm/resume_program.sh node_list
(ad esempio htc-[1-10]).
Per arrestare i nodi, eseguire /opt/azurehpc/slurm/suspend_program.sh node_list
(ad esempio htc-[1-10]).
Per avviare un cluster in questa modalità, è sufficiente aggiungere SuspendTime=-1
alla configurazione slurm aggiuntiva nel modello.
Per passare da un cluster a questa modalità, aggiungere SuspendTime=-1
al file slurm.conf ed eseguire scontrol reconfigure
. Quindi eseguire azslurm remove_nodes && azslurm scale
.
Risoluzione dei problemi
Transizione da 2.7 a 3.0
Cartella di installazione modificata
/opt/cycle/slurm
->/opt/azurehpc/slurm
I log di scalabilità automatica sono ora invece
/opt/azurehpc/slurm/logs
di/var/log/slurmctld
. Si noti cheslurmctld.log
sarà ancora presente in questa cartella.cyclecloud_slurm.sh
non esiste più. È invece disponibile una nuovaazslurm
interfaccia della riga di comando, che può essere eseguita come radice.azslurm
supporta il completamento automatico.[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.
I nodi non vengono più popolati in CycleCloud. Vengono creati solo quando necessario.
Tutti i file binari slurm si trovano all'interno del
azure-slurm-install-pkg*.tar.gz
file, inslurm-pkgs
. Vengono estratti da una versione binaria specifica. Le rilea binarie correnti sono 2023-03-13Per i processi MPI, l'unico limite di rete esistente per impostazione predefinita è la partizione. Non sono presenti più "gruppi di posizionamento" per partizione come 2.x. È quindi disponibile un solo set di scalabilità di macchine virtuali per partizione. Non esiste anche alcun uso del plug-in di topologia, che ha richiesto l'uso di un plug-in per l'invio di processi che non è più necessario. L'invio a più partizioni è invece l'opzione consigliata per i casi d'uso che richiedono l'invio di processi a più gruppi di posizionamento.
CycleCloud supporta un set standard di attributi autostop tra utilità di pianificazione:
Attributo | Descrizione |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Autostop è abilitato in questo nodo? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Quantità di tempo ,in secondi, per cui un nodo deve rimanere inattivo dopo aver completato i processi prima che venga ridotto. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Quantità di tempo ,in secondi, per cui un nodo deve rimanere inattivo prima di completare i processi prima che venga ridotto. |