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 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 (hpchtce 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

  1. Cartella di installazione modificata /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. I log di scalabilità automatica sono ora invece /opt/azurehpc/slurm/logs di /var/log/slurmctld. Si noti che slurmctld.log sarà ancora presente in questa cartella.

  3. cyclecloud_slurm.sh non esiste più. È invece disponibile una nuova azslurm 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.
    
  4. I nodi non vengono più popolati in CycleCloud. Vengono creati solo quando necessario.

  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. Le rilea binarie correnti sono 2023-03-13

  6. Per 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.