Condividi tramite


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 singole e multiple di macchine virtuali
  • Nuove versioni Slurm 23.02 e 22.05.8
  • Creazione di report sui costi tramite l'interfaccia della riga di comando di azslurm
  • autoscaler basato sull'interfaccia a riga di comando azslurm
  • Supporto di Ubuntu 20
  • Rimuovere la necessità del plug-in di topologia e quindi anche dei plug-in di invio

Cluster Slurm nelle versioni CycleCloud < 8.4.0

Per altre informazioni, vedere Transizione dalla versione 2.7 alla 3.0.

Apportare modifiche al cluster

Il cluster Slurm distribuito in CycleCloud contiene una CLI chiamata azslurm per facilitare le modifiche al cluster. Dopo aver apportato modifiche al cluster, eseguire il comando seguente come root nel nodo del gestore Slurm per ricompilare il azure.conf e aggiornare i nodi nel cluster:

      $ sudo -i
      # azslurm scale

Il comando crea le partizioni con il numero corretto di nodi, il corretto gres.conf e riavvia .slurmctld

Non più la creazione preliminare dei nodi di esecuzione

A partire dalla versione 3.0.0 di Slurm per il progetto CycleCloud, i nodi non vengono creati in anticipo. 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 mappati 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 CycleCloud versione 3.0.1, sono supportate partizioni dinamiche. È possibile creare una mappa nodearray a una partizione dinamica aggiungendo quanto segue. Può myfeature essere una descrizione della funzionalità desiderata o più funzionalità, separate 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\""

L'snip del codice condiviso genera 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, la partizione dinamica non include nodi. È possibile avviare i nodi tramite CycleCloud o eseguendo azslurm resume manualmente, si uniscono al cluster usando il nome scelto. Tuttavia, poiché Slurm non è a conoscenza di questi nodi in anticipo, non può ridimensionarli automaticamente.

In alternativa, è anche possibile precreare record di nodo come in questo modo, che consente 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 della dimensione della VM come attributo e quindi azslurm può distinguere quale dimensione della VM si desidera utilizzare.

Nota Le dimensioni della macchina virtuale verranno aggiunte 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 oggetto State=Cloud diventano 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

Scala dinamica verso il basso

Per impostazione predefinita, tutti i nodi della partizione dinamica vengono ridimensionati esattamente come le altre partizioni. Per disabilitare la partizione dinamica, vedere SuspendExcParts.

Ridimensionamento manuale

Se cyclecloud_slurm rileva che la scalabilità automatica è disabilitata (SuspendTime=-1), usa lo stato FUTURE per indicare i nodi spenti anziché basarsi sullo stato di alimentazione in Slurm. Ovvero, quando la scalabilità automatica è abilitata, i nodi vengono indicati come idle~ nel sinfo. Quando la scalabilità automatica è disattivata, i nodi inattivi non vengono visualizzati in sinfo. È comunque possibile visualizzare la 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 supplementare 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 dalla versione 2.7 alla versione 3.0

  1. La cartella di installazione è cambiata /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. I log di scalabilità automatica sono ora in /opt/azurehpc/slurm/logs anziché /var/log/slurmctld. Si noti che slurmctld.log si trova in questa cartella.

  3. Lo cyclecloud_slurm.sh script non è più disponibile. Un nuovo strumento dell'interfaccia della riga di comando denominato azslurm ha sostituito cyclecloud_slurm.sh e può essere eseguito come utente root. azslurm supporta anche 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 the --script to run python scripts
    suspend              - Equivalent to SuspendProgram, shuts down nodes
    wait_for_resume      - Wait for a set of nodes to converge.
    
  4. CycleCloud non crea più nodi in anticipo. Li crea solo quando sono necessari.

  5. Tutti i file binari Slurm si trovano all'interno del azure-slurm-install-pkg*.tar.gz file, in slurm-pkgs. Vengono estratti da una versione binaria specifica. La versione binaria corrente è 4.0.0

  6. Per i processi MPI, l'unico limite di rete predefinito è la partizione. A differenza della versione 2.x, ogni partizione non include "gruppi di posizionamento". Quindi, hai solo un set di scalabilità di macchine virtuali collocato per partizione. Non c'è più bisogno del plug-in della topologia, quindi anche il plug-in per l'invio dei lavori non è 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 di autostop tra utilità di pianificazione:

Attributo Descrizione
cyclecloud.cluster.autoscale.stop_enabled L'arresto automatico è abilitato su questo nodo? [vero/falso]
cyclecloud.cluster.autoscale.idle_time_after_jobs Il tempo (in secondi) in cui un nodo rimane inattivo dopo aver completato i processi prima di essere ridotto.
cyclecloud.cluster.autoscale.tempo_inattivo_prima_delle_attività Quantità di tempo (in secondi) per un nodo inattivo prima di completare i processi prima che venga ridotta.