Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Slurm guida per la modalità a coda multipla
Qui puoi imparare come Slurm gestire i nodi di coda (partizione) AWS ParallelCluster e come monitorare gli stati della coda e dei nodi.
Panoramica di
L'architettura di scalabilità si basa sulla Cloud Scheduling Guide e sul Slurm plug-in per il risparmio energetico.
Ciclo di vita dei nodi cloud
Durante il loro ciclo di vita, i nodi cloud entrano in diversi se non tutti i seguenti stati:POWER_SAVING, POWER_UP (pow_up), () e ALLOCATED (alloc). POWER_DOWN pow_dn In alcuni casi, un nodo cloud potrebbe entrare nello OFFLINE stato. L'elenco seguente descrive in dettaglio diversi aspetti di questi stati nel ciclo di vita dei nodi cloud.
-
Un nodo in uno
POWER_SAVINGstato viene visualizzato con un~suffisso (ad esempioidle~) in.sinfoIn questo stato, nessuna istanza EC2 supporta il nodo. Tuttavia, Slurm può ancora allocare lavori al nodo. -
Un nodo che passa a
POWER_UPuno stato viene visualizzato con un#suffisso (ad esempioidle#) in.sinfoUn nodo passa automaticamente aPOWER_UPuno stato, quando Slurm alloca un lavoro a un nodo in uno stato.POWER_SAVINGIn alternativa, puoi trasferire i nodi allo
POWER_UPstato manualmente come utentesuroot con il comando:$scontrol update nodename=nodenamestate=power_upIn questa fase,
ResumeProgramviene richiamato, le istanze EC2 vengono avviate e configurate e il nodo passa allo stato.POWER_UP -
Un nodo attualmente disponibile per l'uso viene visualizzato senza un suffisso (ad esempio) in.
idlesinfoDopo che il nodo è stato configurato e si è unito al cluster, diventa disponibile per l'esecuzione dei job. In questa fase, il nodo è configurato correttamente e pronto per l'uso.Come regola generale, consigliamo che il numero di istanze Amazon EC2 sia uguale al numero di nodi disponibili. Nella maggior parte dei casi, i nodi statici sono disponibili dopo la creazione del cluster.
-
Un nodo che sta passando a
POWER_DOWNuno stato viene visualizzato con un%suffisso (ad esempioidle%) in.sinfoI nodi dinamici entrano automaticamente nelloPOWER_DOWNstato successivo. ScaledownIdletime Al contrario, i nodi statici nella maggior parte dei casi non sono spenti. Tuttavia, puoi inserire i nodi nelloPOWER_DOWNstato manualmente come utentesuroot con il comando:$scontrol update nodename=nodenamestate=down reason="manual draining"In questo stato, le istanze associate a un nodo vengono terminate e il nodo viene riportato
POWER_SAVINGallo stato e disponibile per l'uso successivo. ScaledownIdletimeL'ScaledownIdletimeimpostazione viene salvata nell'impostazione di Slurm configurazione
SuspendTimeout. -
Un nodo offline viene visualizzato con un
*suffisso (ad esempiodown*) insinfo. Un nodo va offline se il Slurm controller non riesce a contattare il nodo o se i nodi statici sono disabilitati e le istanze di supporto vengono terminate.
Considerate gli stati dei nodi mostrati nell'esempio seguente. sinfo
$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 4 idle~ efa-dy-efacompute1-[1-4] efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 1 idle% gpu-dy-gpucompute1-1 gpu up infinite 9 idle~ gpu-dy-gpucompute1-[2-10] ondemand up infinite 2 mix# ondemand-dy-ondemandcompute1-[1-2] ondemand up infinite 18 idle~ ondemand-dy-ondemandcompute1-[3-10],ondemand-dy-ondemandcompute2-[1-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 2 idle spot-st-spotcompute2-[1-2]
I efa-st-efacompute1-1 nodi spot-st-spotcompute2-[1-2] e hanno già delle istanze di backup configurate e sono disponibili per l'uso. I ondemand-dy-ondemandcompute1-[1-2] nodi sono nello POWER_UP stato e dovrebbero essere disponibili entro pochi minuti. Il gpu-dy-gpucompute1-1 nodo è nello POWER_DOWN stato e passa allo POWER_SAVING stato dopo ScaledownIdletime (il valore predefinito è 10 minuti).
Tutti gli altri nodi sono in POWER_SAVING stato e non sono supportati da alcuna istanza EC2.
Lavorare con un nodo disponibile
Un nodo disponibile è supportato da un'istanza Amazon EC2. Per impostazione predefinita, il nome del nodo può essere utilizzato per accedere direttamente tramite SSH all'istanza (ad esempiossh
efa-st-efacompute1-1). L'indirizzo IP privato dell'istanza può essere recuperato utilizzando il comando:
$scontrol show nodesnodename
Verifica l'indirizzo IP nel NodeAddr campo restituito.
Per i nodi che non sono disponibili, il NodeAddr campo non deve indicare un'istanza Amazon EC2 in esecuzione. Piuttosto, dovrebbe essere lo stesso del nome del nodo.
Stati e invio del lavoro
I lavori inviati nella maggior parte dei casi vengono immediatamente assegnati ai nodi del sistema o messi in sospeso se tutti i nodi sono allocati.
Se i nodi allocati per un job includono nodi in uno POWER_SAVING stato, il job inizia con uno CF stato, o. CONFIGURING A questo punto, il job attende che i nodi nello POWER_SAVING stato passino allo POWER_UP stato e diventino disponibili.
Dopo che tutti i nodi allocati per un job sono disponibili, il job passa allo stato RUNNING (R).
Per impostazione predefinita, tutti i lavori vengono inviati alla coda predefinita (nota come partizione in). Slurm Ciò è indicato da un * suffisso dopo il nome della coda. È possibile selezionare una coda utilizzando l'opzione di invio del lavoro. -p
Tutti i nodi sono configurati con le seguenti funzionalità, che possono essere utilizzate nei comandi di invio dei lavori:
-
Un tipo di istanza (ad esempio
c5.xlarge) -
Un tipo di nodo (può essere uno
dynamicostatic.)
È possibile visualizzare le funzionalità di un particolare nodo utilizzando il comando:
$scontrol show nodesnodename
Nel ritorno, controlla l'AvailableFeatureselenco.
Considerate lo stato iniziale del cluster, che potete visualizzare eseguendo il sinfo comando.
$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 4 idle~ efa-dy-efacompute1-[1-4] efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 10 idle~ gpu-dy-gpucompute1-[1-10] ondemand up infinite 20 idle~ ondemand-dy-ondemandcompute1-[1-10],ondemand-dy-ondemandcompute2-[1-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 2 idle spot-st-spotcompute2-[1-2]
Nota che spot è la coda predefinita. È indicata dal suffisso. *
Invia un lavoro a un nodo statico nella coda predefinita (). spot
$sbatch --wrap"sleep 300"-N1-Cstatic
Invia un lavoro a un nodo dinamico della EFA coda.
$sbatch --wrap"sleep 300"-pefa-Cdynamic
Invia un lavoro a otto (8) c5.2xlarge nodi e due (2) t2.xlarge nodi in coda. ondemand
$sbatch --wrap"sleep 300"-pondemand-N10-C "[c5.2xlarge*8&t2.xlarge*2]"
Invia un lavoro a un nodo GPU in coda. gpu
$sbatch --wrap"sleep 300"-pgpu-G1
Considerate lo stato dei lavori utilizzando il comando. squeue
$squeueJOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 12 ondemand wrap ubuntu CF 0:36 10 ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2] 13 gpu wrap ubuntu CF 0:05 1 gpu-dy-gpucompute1-1 7 spot wrap ubuntu R 2:48 1 spot-st-spotcompute2-1 8 efa wrap ubuntu R 0:39 1 efa-dy-efacompute1-1
I processi 7 e 8 (nelle efa code spot e) sono già in esecuzione (R). I job 12 e 13 sono ancora in fase di configurazione (CF), probabilmente in attesa che le istanze diventino disponibili.
# Nodes states corresponds to state of running jobs$sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa up infinite 3 idle~ efa-dy-efacompute1-[2-4] efa up infinite 1 mix efa-dy-efacompute1-1 efa up infinite 1 idle efa-st-efacompute1-1 gpu up infinite 1 mix~ gpu-dy-gpucompute1-1 gpu up infinite 9 idle~ gpu-dy-gpucompute1-[2-10] ondemand up infinite 10 mix# ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2] ondemand up infinite 10 idle~ ondemand-dy-ondemandcompute1-[9-10],ondemand-dy-ondemandcompute2-[3-10] spot* up infinite 13 idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3] spot* up infinite 1 mix spot-st-spotcompute2-1 spot* up infinite 1 idle spot-st-spotcompute2-2
Stato e caratteristiche del nodo
Nella maggior parte dei casi, gli stati dei nodi sono completamente gestiti in AWS ParallelCluster base ai processi specifici del ciclo di vita dei nodi cloud descritti in precedenza in questo argomento.
Tuttavia, sostituisce o interrompe AWS ParallelCluster anche i nodi non integri DOWN e i nodi con istanze di DRAINED supporto non integre. Per ulteriori informazioni, consulta clustermgtd.
Stati delle partizioni
AWS ParallelCluster supporta i seguenti stati di partizione. Una Slurm partizione è una coda in entrata. AWS ParallelCluster
-
UP: indica che la partizione è attiva. Questo è lo stato predefinito di una partizione. In questo stato, tutti i nodi della partizione sono attivi e disponibili all'uso. -
INACTIVE: indica che la partizione è in stato inattivo. In questo stato, tutte le istanze che supportano i nodi di backup di una partizione inattiva vengono terminate. Le nuove istanze non vengono avviate per i nodi in una partizione inattiva.
pcluster update-compute-fleet
-
Arresto del parco di calcolo: quando viene eseguito il seguente comando, tutte le partizioni passano allo stato e AWS ParallelCluster i processi mantengono le partizioni
INACTIVEnello stato.INACTIVE$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status STOP_REQUESTED -
Avvio del parco di calcolo: quando viene eseguito il comando seguente, inizialmente tutte le partizioni passano allo stato.
UPTuttavia, AWS ParallelCluster i processi non mantengono la partizione in uno stato.UPÈ necessario modificare manualmente gli stati delle partizioni. Tutti i nodi statici diventano disponibili dopo pochi minuti. Nota che l'impostazione di una partizione suUPnon attiva alcuna capacità dinamica.$pcluster update-compute-fleet --cluster-nametestSlurm\ --regioneu-west-1--status START_REQUESTED
Quando update-compute-fleet viene eseguito, puoi verificare lo stato del cluster eseguendo il pcluster describe-compute-fleet comando e selezionandoStatus. Di seguito sono elencati gli stati possibili:
-
STOP_REQUESTED: la richiesta di stop compute fleet viene inviata al cluster. -
STOPPING: ilpclusterprocesso sta attualmente arrestando il parco di computer. -
STOPPED: ilpclusterprocesso ha terminato il processo di arresto, tutte le partizioni sono inINACTIVEstato e tutte le istanze di calcolo sono terminate. -
START_REQUESTED: la richiesta di avvio della flotta di calcolo viene inviata al cluster. -
STARTING: ilpclusterprocesso sta attualmente avviando il cluster. -
RUNNING: ilpclusterprocesso ha terminato il processo di avvio, tutte le partizioni sono nelloUPstato e i nodi statici sono disponibili dopo pochi minuti. -
PROTECTED: questo stato indica che alcune partizioni presentano errori di bootstrap costanti. Le partizioni interessate sono inattive. Esamina il problema e poi corriupdate-compute-fleeta riattivare il parco veicoli.
Controllo manuale delle code
In alcuni casi, potresti voler avere un controllo manuale sui nodi o sulla coda (nota come partizione in) in Slurm un cluster. È possibile gestire i nodi in un cluster tramite le seguenti procedure comuni utilizzando il comando. scontrol
-
Accendi i nodi dinamici in
POWER_SAVINGstatoEsegui il comando come utente
suroot:$scontrol update nodename=nodenamestate=power_upPuoi anche inviare un
sleep 1job segnaposto che richiede un certo numero di nodi e quindi fare affidamento su di esso Slurm per aumentare il numero richiesto di nodi. -
Spegnete prima i nodi dinamici ScaledownIdletime
Ti consigliamo di impostare i nodi dinamici
DOWNcome utentesuroot con il comando:$scontrol update nodename=nodenamestate=down reason="manually draining"AWS ParallelCluster termina e reimposta automaticamente i nodi dinamici disattivati.
In generale, non è consigliabile impostare i nodi in modo che utilizzino
POWER_DOWNdirettamente il comando.scontrol update nodename=Questo perché gestisce AWS ParallelCluster automaticamente il processo di spegnimento.nodenamestate=power_down -
Disabilita una coda (partizione) o arresta tutti i nodi statici in una partizione specifica
Imposta una coda specifica
INACTIVEcome utente root con il comando:su$scontrol update partition=queuenamestate=inactiveIn questo modo si interrompono tutte le istanze che supportano i nodi nella partizione.
-
Abilita una coda (partizione)
Imposta una coda specifica per un utente
suroot con ilUPcomando:$scontrol update partition=queuenamestate=up
Comportamento e regolazioni del ridimensionamento
Ecco un esempio del normale flusso di lavoro di ridimensionamento:
-
Lo scheduler riceve un lavoro che richiede due nodi.
-
Lo scheduler trasferisce due nodi in uno
POWER_UPstato e chiamaResumeProgramcon i nomi dei nodi (ad esempio).queue1-dy-spotcompute1-[1-2] -
ResumeProgramAvvia due istanze Amazon EC2 e assegna gli indirizzi IP e i nomi host privati diqueue1-dy-spotcompute1-[1-2], in attesaResumeTimeout(il periodo predefinito è 30 minuti) prima di reimpostare i nodi. -
Le istanze vengono configurate e si uniscono al cluster. Un job inizia a essere eseguito sulle istanze.
-
Il job viene completato e l'esecuzione viene interrotta.
-
Al termine della configurazione
SuspendTime(che è impostata su ScaledownIdletime), lo scheduler imposta le istanze sullo stato.POWER_SAVINGLo scheduler imposta quindiPOWER_DOWNlo stato e chiamaqueue1-dy-spotcompute1-[1-2]SuspendProgramcon i nomi dei nodi. -
SuspendProgramviene chiamato per due nodi. I nodi rimangono nelloPOWER_DOWNstato, ad esempio, rimanendoidle%per unSuspendTimeout(il periodo predefinito è 120 secondi (2 minuti)). Dopo averclustermgtdrilevato che i nodi si stanno spegnendo, termina le istanze di backup. Quindi, passaqueue1-dy-spotcompute1-[1-2]allo stato di inattività e reimposta l'indirizzo IP privato e il nome host in modo che sia pronto per l'accensione per lavori futuri.
Se le cose vanno male e un'istanza per un particolare nodo non può essere avviata per qualche motivo, si verifica quanto segue:
-
Lo scheduler riceve un job che richiede due nodi.
-
Lo scheduler trasferisce due nodi cloud bursting
POWER_UPallo stato e chiamaResumeProgramcon i nomi dei nodi (ad esempio).queue1-dy-spotcompute1-[1-2] -
ResumeProgramavvia solo una (1) istanza Amazon EC2 e la configuraqueue1-dy-spotcompute1-1, con una (1) istanza, che non riesce ad avviarsi.queue1-dy-spotcompute1-2 -
queue1-dy-spotcompute1-1non è interessato e torna online dopo aver raggiunto lo stato.POWER_UP -
queue1-dy-spotcompute1-2passa alloPOWER_DOWNstato e il lavoro viene richiesto automaticamente perché Slurm rileva un errore del nodo. -
queue1-dy-spotcompute1-2diventa disponibile dopoSuspendTimeout(l'impostazione predefinita è 120 secondi (2 minuti)). Nel frattempo, il lavoro viene messo in coda e può iniziare a essere eseguito su un altro nodo. -
Il processo precedente si ripete finché il job non può essere eseguito su un nodo disponibile senza che si verifichi un errore.
Esistono due parametri di temporizzazione che possono essere regolati se necessario:
-
ResumeTimeout(l'impostazione predefinita è 30 minuti):ResumeTimeoutcontrolla il tempo di Slurm attesa prima di passare il nodo allo stato inattivo.-
Potrebbe essere utile estenderlo
ResumeTimeoutse il processo di pre/post installazione richiede quasi così tanto tempo. -
ResumeTimeoutè anche il tempo massimo di AWS ParallelCluster attesa prima di sostituire o reimpostare un nodo in caso di problemi. I nodi di calcolo si interrompono automaticamente se si verifica un errore durante l'avvio o la configurazione. AWS ParallelCluster i processi sostituiscono un nodo al rilevamento di un'istanza terminata.
-
-
SuspendTimeout(l'impostazione predefinita è 120 secondi (2 minuti)):SuspendTimeoutcontrolla la velocità con cui i nodi vengono reinseriti nel sistema e sono nuovamente pronti per l'uso.-
Un valore più breve
SuspendTimeoutsignifica che i nodi vengono ripristinati più rapidamente e Slurm possono provare ad avviare le istanze più frequentemente. -
Un valore più lungo
SuspendTimeoutsignifica che i nodi guasti vengono ripristinati più lentamente. Nel frattempo, Slurm tenta di utilizzare altri nodi. SeSuspendTimeoutsono trascorsi più di qualche minuto, Slurm tenta di scorrere tutti i nodi del sistema. Una soluzione più lungaSuspendTimeoutpotrebbe essere utile per i sistemi su larga scala (oltre 1.000 nodi) per ridurre lo stress causato dal tentativo di riaccodare frequentemente i lavori non riusciti. Slurm -
Nota che
SuspendTimeoutnon si riferisce al tempo di AWS ParallelCluster attesa necessario per terminare un'istanza di backup per un nodo. Le istanze di backup perPOWER_DOWNi nodi vengono immediatamente terminate. Il processo di terminazione viene in genere completato in pochi minuti. Tuttavia, durante questo periodo, il nodo rimane nelloPOWER_DOWNstato e non è disponibile per l'uso dello scheduler.
-
Registri per l'architettura
L'elenco seguente contiene i log chiave. Il nome del flusso di CloudWatch log utilizzato con Amazon Logs ha il formato, {hostname}.{instance_id}.{logIdentifier}logIdentifier seguito dai nomi dei log.
-
ResumeProgram:/var/log/parallelcluster/slurm_resume.log(slurm_resume) -
SuspendProgram:/var/log/parallelcluster/slurm_suspend.log(slurm_suspend) -
clustermgtd:/var/log/parallelcluster/clustermgtd.log(clustermgtd) -
computemgtd:/var/log/parallelcluster/computemgtd.log(computemgtd) -
slurmctld:/var/log/slurmctld.log(slurmctld) -
slurmd:/var/log/slurmd.log(slurmd)
Problemi comuni e modalità di debug:
Nodi che non sono riusciti ad avviare, accendere o unirsi al cluster
-
Nodi dinamici:
-
Controlla il
ResumeProgramregistro per vedere seResumeProgramè stato chiamato con il nodo. In caso contrario, controlla ilslurmctldregistro per determinare se hai Slurm provato a chiamareResumeProgramcon il nodo. Tieni presente che l'attivazione di autorizzazioni errateResumeProgrampotrebbe causare un errore invisibile. -
Se
ResumeProgramviene chiamato, controlla se è stata avviata un'istanza per il nodo. Se l'istanza non è stata avviata, dovrebbe essere visualizzato un chiaro messaggio di errore che indica il motivo per cui l'istanza non è stata avviata. -
Se è stata avviata un'istanza, potrebbe esserci stato qualche problema durante il processo di bootstrap. Trova l'indirizzo IP privato e l'ID dell'istanza corrispondenti nel
ResumeProgramlog e guarda i log di bootstrap corrispondenti per l'istanza specifica in CloudWatch Logs.
-
-
Nodi statici:
-
Controlla il
clustermgtdregistro per vedere se sono state avviate istanze per il nodo. Se le istanze non vengono avviate, dovrebbero esserci chiari errori sul motivo per cui le istanze non sono state avviate. -
Se è stata avviata un'istanza, c'è qualche problema con il processo di bootstrap. Trova l'IP privato e l'ID dell'istanza corrispondenti nel
clustermgtdlog e guarda i log di bootstrap corrispondenti per l'istanza specifica in CloudWatch Logs.
-
Nodi sostituiti o terminati in modo imprevisto e guasti dei nodi
-
replaced/terminated Nodi inaspettatamente:
-
Nella maggior parte dei casi,
clustermgtdgestisce tutte le azioni di manutenzione dei nodi. Per verificare se un nodo è statoclustermgtdsostituito o terminato, controlla ilclustermgtdregistro. -
Se il nodo
clustermgtdviene sostituito o terminato, dovrebbe essere visualizzato un messaggio che indica il motivo dell'azione. Se il motivo è correlato allo scheduler (ad esempio, il nodo eraDOWN), controlla nelslurmctldregistro per maggiori dettagli. Se il motivo è correlato ad Amazon EC2, utilizza strumenti come Amazon CloudWatch o la console, l'interfaccia a riga di comando o gli SDK di Amazon EC2 per controllare lo stato o i log di quell'istanza. Ad esempio, puoi verificare se l'istanza ha avuto eventi pianificati o non ha superato i controlli sullo stato di salute di Amazon EC2. -
Se
clustermgtdnon ha terminato il nodo, controlla se il nodo ècomputemgtdstato terminato o se EC2 ha terminato l'istanza per recuperare un'istanza Spot.
-
-
Errori del nodo:
-
Nella maggior parte dei casi, i lavori vengono richiesti automaticamente in caso di errore di un nodo. Esamina il
slurmctldregistro per vedere perché un job o un nodo non è riuscito e valuta la situazione da lì.
-
Errore durante la sostituzione o la chiusura delle istanze, errore durante lo spegnimento dei nodi
-
In generale,
clustermgtdgestisce tutte le azioni di terminazione delle istanze previste. Esamina ilclustermgtdregistro per capire perché non è riuscito a sostituire o terminare un nodo. -
Se i nodi dinamici non ScaledownIdletime funzionano, guarda nel
SuspendProgramregistro per vedere seslurmctldi processi hanno effettuato chiamate con il nodo specifico come argomento. Note in realtàSuspendProgramnon esegue alcuna azione specifica. Piuttosto, registra solo quando viene chiamato. La chiusura e ilNodeAddrripristino di tutte le istanze vengono completati da.clustermgtdSlurmpassa i nodi a dopo.IDLESuspendTimeout
Altri problemi:
-
AWS ParallelCluster non prende decisioni sull'allocazione delle mansioni o sulla scalabilità. Cerca solo di avviare, terminare e mantenere le risorse secondo Slurm le sue istruzioni.
Per problemi relativi all'allocazione dei lavori, all'allocazione dei nodi e alle decisioni di scalabilità, consulta il
slurmctldregistro per eventuali errori.