Condividi tramite


Slurm

Slurm è un gestore del carico di lavoro open source altamente configurabile. Per altre informazioni, vedere la panoramica del sito del progetto Slurm.

Annotazioni

A partire da CycleCloud 8.4.0, l'integrazione Slurm è stata riscritta per supportare nuove caratteristiche e funzionalità. Per altre informazioni, vedere la documentazione di Slurm 3.0 .

Per abilitare Slurm in un cluster CycleCloud, modificare "run_list", disponibile nella sezione di configurazione della definizione del cluster. Un cluster Slurm ha due parti principali: il nodo master (o nodo di pianificazione), che esegue il software Slurm su un file system condiviso, e i nodi di esecuzione, che montano quel file system ed eseguono i compiti inviati. Ad esempio, un semplice frammento di modello di cluster può essere simile al seguente:

[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 può essere facilmente abilitato in un cluster CycleCloud modificando "run_list", disponibile nella sezione di configurazione della definizione del cluster. I due componenti di base di un cluster Slurm sono il nodo 'scheduler' che fornisce un file system condiviso in cui viene eseguito il software Slurm e i nodi 'execute' che sono gli host che montano il file system condiviso ed eseguono i processi inviati. Ad esempio, un semplice frammento di modello di cluster può essere simile al seguente:

[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

Modifica dei cluster Slurm esistenti

I cluster Slurm in esecuzione in CycleCloud versione 7.8 e successive implementano una versione aggiornata delle API di scalabilità automatica che consente ai cluster di usare più nodearray e partizioni. Per facilitare questa funzionalità in Slurm, CycleCloud prepopola i nodi da eseguire nel cluster. A causa della prepopolazione, è necessario eseguire un comando sul nodo dello scheduler Slurm dopo aver apportato modifiche al cluster, come i limiti di scalabilità automatica o i tipi di VM.

Apportare modifiche al cluster

Il cluster Slurm distribuito in CycleCloud contiene uno script che facilita le modifiche. Dopo aver apportato modifiche al cluster, eseguire il comando successivo come utente root, ad esempio eseguendo sudo -i, sul nodo dello schedulatore Slurm per ricostruire slurm.conf e aggiornare i nodi nel cluster.

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

Annotazioni

Per le versioni di CycleCloud precedenti alla 7.9.10, lo cyclecloud_slurm.sh script si trova in /opt/cycle/jetpack/system/bootstrap/slurm.

Importante

Se si apportano modifiche che influiscono sulle macchine virtuali per i nodi in una partizione MPI ,ad esempio dimensioni della macchina virtuale, immagine o cloud-init, i nodi devono essere terminati per primi. Il remove_nodes comando stampa un avviso in questo caso, ma non termina con un errore. Se sono presenti nodi in esecuzione, viene visualizzato un errore relativo all'avvio di This node doesn't match existing scaleset attribute nuovi nodi.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Annotazioni

Per CycleCloud versioni < 8.2, lo cyclecloud_slurm.sh script si trova in /opt/cycle/jetpack/system/bootstrap/slurm.

Se si apportano modifiche che influiscono sulle macchine virtuali per i nodi in una partizione MPI (ad esempio dimensioni della macchina virtuale, immagine o cloud-init) e i nodi sono in esecuzione, viene visualizzato un errore This node doesn't match existing scaleset attribute all'avvio di nuovi nodi. Per questo motivo, il apply_changes comando verifica che i nodi vengano terminati e non riesce con questo messaggio di errore, in caso contrario: i nodi seguenti devono essere terminati completamente prima di applicare le modifiche.

Se si apporta una modifica che non influisce sulle proprietà della macchina virtuale per i nodi MPI, non è prima necessario terminare i nodi in esecuzione. In questo caso, è possibile apportare le modifiche usando questi due comandi:

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

Annotazioni

Il apply_changes comando esiste solo in CycleCloud 8.3+, quindi l'unico modo per apportare una modifica nelle versioni precedenti è con i comandi overheadremove_nodes + scale. Assicurarsi che il remove_nodes comando non stampa un avviso sui nodi che devono essere terminati.

Creazione di partizioni supplementari

Il modello predefinito fornito con Azure CycleCloud include due partizioni (hpc e htc) ed è possibile definire oggetti nodearray personalizzati che eseguono il mapping direttamente alle partizioni Slurm. Ad esempio, per creare una partizione GPU, aggiungere la sezione successiva 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:2.0.1]]]
        [[[network-interface eth0]]]
        AssociatePublicIpAddress = $ExecuteNodesPublic

Impostazioni di memoria

CycleCloud imposta automaticamente la quantità di memoria disponibile per Slurm da usare a scopo di pianificazione. Poiché la memoria disponibile può variare leggermente a causa delle opzioni del kernel Linux e il sistema operativo e la macchina virtuale usano una piccola quantità di memoria, CycleCloud riduce automaticamente il valore di memoria nella configurazione Slurm. Per impostazione predefinita, CycleCloud trattiene 5% della memoria disponibile segnalata in una macchina virtuale, ma questo valore può essere sovrascritto nel modello di cluster impostando slurm.dampen_memory alla percentuale di memoria da trattenere. Ad esempio, per conservare 20% di memoria di una macchina virtuale:

    slurm.dampen_memory=20

Disabilitazione della scalabilità automatica per nodi o partizioni specifici

Anche se la funzionalità predefinita CycleCloud "KeepAlive" non funziona attualmente per i cluster Slurm, è possibile disabilitare la scalabilità automatica per un cluster Slurm in esecuzione modificando direttamente il file slurm.conf. È possibile escludere singoli nodi o intere partizioni dalla scalabilità automatica.

Esclusione di un nodo

Per escludere un nodo o più nodi dalla scalabilità automatica, aggiungere SuspendExcNodes=<listofnodes> al file di configurazione Slurm. Ad esempio, per escludere i nodi 1 e 2 dalla hpc partizione, aggiungere il successivo a /sched/slurm.conf:

SuspendExcNodes=hpc-pg0-[1-2]

Riavviare quindi il slurmctld servizio per rendere effettiva la nuova configurazione.

Esclusione di una partizione

L'esclusione di intere partizioni dalla scalabilità automatica è simile all'esclusione di nodi. Per escludere l'intera hpc partizione, aggiungere l'elemento accanto a /sched/slurm.conf

SuspendExcParts=hpc

Quindi riavviare ilslurmctld server.

Risoluzione dei problemi

Conflitti UID per gli utenti Slurm e munge

Per impostazione predefinita, questo progetto usa un UID e UN GID pari a 11100 per l'utente Slurm e 11101 per l'utente munge. Se si verifica un conflitto con un altro utente o gruppo, è possibile eseguire l'override di queste impostazioni predefinite.

Per eseguire l'override dell'UID e del GID, fare clic sul pulsante di modifica per entrambi i scheduler nodi:

Modifica Pianificatore

Modifica Pianificatore

E il execute nodearray: Modifica nodearray

Aggiungere i seguenti attributi alla sezione ConfigurationModifica configurazione

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

Scalabilità automatica

CycleCloud usa la funzionalità di calcolo elastico di Slurm. Per eseguire il debug dei problemi di scalabilità automatica, sono disponibili alcuni log nel nodo dell'utilità di pianificazione che è possibile controllare. Il primo consiste nell'assicurarsi che le chiamate di ripresa del risparmio energia vengano effettuate controllando /var/log/slurmctld/slurmctld.log. Verranno visualizzate righe simili alle seguenti:

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

L'altro log da controllare è /var/log/slurmctld/resume.log. Se il passaggio di ripresa ha esito negativo, c'è /var/log/slurmctld/resume_fail.log. Se sono presenti messaggi relativi a nomi di nodi sconosciuti o non validi, assicurarsi che i nodi non siano aggiunti al cluster senza seguire i passaggi riportati nella sezione "Apportare modifiche al cluster" menzionata sopra.

Riferimento alla Configurazione Slurm

Di seguito sono riportate le opzioni di configurazione specifiche di Slurm che è possibile attivare o disattivare per personalizzare le funzionalità:

Opzioni di configurazione specifiche di Slurm Descrizione
slurm.version Impostazione predefinita: '18.08.7-1'. In questo modo viene impostata la versione slurm da installare ed eseguire. Al momento, è l'opzione predefinita e l'unica opzione. Altre versioni potrebbero essere supportate in futuro.
slurm.autoscale Impostazione predefinita: 'false'. Un'impostazione per il nodearray che determina se Slurm deve arrestare e avviare automaticamente i nodi in questo nodearray.
slurm.hpc Impostazione predefinita: 'true'. Impostazione per nodoarray che controlla se i nodi nell'oggetto nodearray vengono inseriti nello stesso gruppo di posizionamento. Usato principalmente per nodearrays usando famiglie di macchine virtuali con InfiniBand. Si applica solo quando slurm.autoscale è impostato su "true".
slurm.default_partition Impostazione predefinita: 'false'. Impostazione per nodoarray che controlla se nodearray deve essere la partizione predefinita per i processi che non richiedono una partizione in modo esplicito.
slurm.dampen_memory Impostazione predefinita: '5'. Percentuale di memoria da conservare per il sovraccarico del sistema operativo/macchina virtuale.
slurm.suspend_timeout Impostazione predefinita: '600'. Intervallo di tempo , espresso in secondi, tra una chiamata di sospensione e il momento in cui tale nodo può essere usato di nuovo.
slurm.resume_timeout Impostazione predefinita: '1800'. Il numero di secondi da attendere affinché un nodo si avvii con successo.
slurm.install Impostazione predefinita: 'true'. Determina se Slurm è installato all'avvio del nodo ('true'). Se Slurm è installato in un'immagine personalizzata, questa opzione di configurazione deve essere impostata su 'false' (proj versione 2.5.0+).
slurm.use_pcpu Impostazione predefinita: 'true'. Impostazione per il nodo array per controllare la pianificazione con vCPU iperthreaded. Impostare su 'false' per impostare CPUs=vcpus in cyclecloud.conf.
slurm.user.name Impostazione predefinita: 'slurm'. Nome utente del servizio Slurm da usare.
slurm.user.uid Impostazione predefinita: '11100'. ID utente da usare per l'utente Slurm.
slurm.user.gid Impostazione predefinita: '11100'. ID gruppo da usare per l'utente Slurm.
munge.user.name Impostazione predefinita: 'munge'. Nome utente per il servizio di autenticazione MUNGE da usare.
munge.user.uid Impostazione predefinita: '11101'. ID utente da usare per l'utente MUNGE.
munge.user.gid Impostazione predefinita: '11101'. ID gruppo da usare per l'utente MUNGE.

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.