Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
E il execute
nodearray:
Aggiungere i seguenti attributi alla sezione Configuration
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. |