2014-10-06 15 views
11

Ho un paio di migliaia di lavori da eseguire su un cluster slurm con 16 nodi. Questi lavori dovrebbero essere eseguiti solo su un sottoinsieme dei nodi disponibili di dimensione 7. Alcune attività sono parallelizzate, quindi utilizzano tutta la potenza della CPU di un singolo nodo mentre altre sono a thread singolo. Pertanto, più lavori dovrebbero essere eseguiti contemporaneamente su un singolo nodo. Nessuna delle attività dovrebbe essere generata su più nodi.slurm: utilizzare qualsiasi nodo da nodelist

Attualmente invio ciascuno dei posti di lavoro con:

sbatch --nodelist=myCluster[10-16] myScript.sh 

Tuttavia questo parametro rende slurm aspettare fino al lavoro inoltrato termina e lascia quindi 3 nodi completamente inutilizzata e, a seconda del compito (multi o single-threaded), anche il nodo attualmente attivo potrebbe essere a basso carico in termini di capacità della CPU.

Quali sono i parametri migliori di sbatch che forza lo slurm per eseguire più processi contemporaneamente sui nodi specificati?

risposta

16

È possibile eseguire il contrario; piuttosto che specificare quali nodi da utilizzare, con l'effetto che ogni lavoro viene assegnato tutti i 7 nodi, specificare quali nodi non utilizzare:

sbatch --exclude=myCluster[01-09] myScript.sh 

e Slurm sarà mai allocare più di 7 nodi per i vostri lavori. Assicurati che la configurazione del cluster consenta la condivisione dei nodi e che il tuo myScript.sh contenga con n il numero di thread di ciascun lavoro.

+0

Presumendo che tu non sia l'amministratore. Altrimenti limiti e associazioni sono la strada da percorrere. – damienfrancois

+0

Con "associazioni" intendi "prenotazioni" nel vocabolario SLURM? – Faber

+0

No Intendo [associazioni] (http://slurm.schedmd.com/accounting.html) che è il termine utilizzato da Slurm nel contesto di account, qualità dei servizi, partizioni, ecc. Per impostare i limiti. – damienfrancois

1

Alcune delle attività sono parallelizzate, quindi utilizzano tutta la potenza della CPU di un singolo nodo mentre altre sono a thread singolo.

Capisco che si desidera che i lavori a thread singolo condividano un nodo, mentre quelli paralleli dovrebbero essere assegnati esclusivamente a un intero nodo?

più lavori devono essere eseguiti contemporaneamente su un singolo nodo.

Per quanto riguarda la mia comprensione di Slurm va, questo implica che è necessario definire i core della CPU come risorse di consumo (ad esempio, SelectType=select/cons_res e SelectTypeParameters=CR_Core in slurm.conf)

Poi, per vincolare i lavori in parallelo per ottenere un intero nodo è possibile utilizzare l'opzione --exclusive (ma si noti che la configurazione della partizione ha la precedenza: non è possibile avere nodi condivisi se la partizione è configurata per l'accesso esclusivo) oppure utilizzare -N 1 --tasks-per-node="number_of_cores_in_a_node" (ad esempio, -N 1 --ntasks-per-node=8).

Si noti che quest'ultimo funzionerà solo se tutti i nodi hanno lo stesso numero di core.

Nessuna delle attività deve essere generata su più nodi.

Questo dovrebbe essere garantito da -N 1.

+0

Cruciale è che tutti i miei lavori utilizzano in totale non più di 7 nodi. Ogni nodo del nostro cluster ha 20 core e 2 thread per core. Se ho capito bene, proponi di inviare lavori paralleli con 'sbatch --nodelist = myCluster [10-16] --ntasks-per-node = 40 -N 1 myScript.sh'. Perché non '--ntasks-per-node = 1', per assicurarsi che non più di un lavoro venga eseguito contemporaneamente su un singolo nodo? E i lavori a singolo thread? – Faber

+1

@Faber Se si desidera limitare un gruppo di lavori per utilizzare un massimo di 7 nodi in totale, una partizione o un'impostazione QoS sarebbe la soluzione giusta. –

1

In realtà penso che la strada da percorrere sia la creazione di una prenotazione "". Secondo questa presentazione http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf (ultima diapositiva).

Scenario: prenotare dieci nodi nella partizione SLURM predefinita a partire da mezzogiorno e con una durata di 60 minuti che si verificano ogni giorno. La prenotazione sarà disponibile solo per gli utenti alan e brenda.

scontrol create reservation user=alan,brenda starttime=noon duration=60 flags=daily nodecnt=10 
Reservation created: alan_6 

scontrol show res 
ReservationName=alan_6 StartTime=2009-02-05T12:00:00 
    EndTime=2009-02-05T13:00:00 Duration=60 Nodes=sun[000-003,007,010-013,017] NodeCnt=10 Features=(null) PartitionName=pdebug Flags=DAILY Licenses=(null) 
    Users=alan,brenda Accounts=(null) 

# submit job with: 
sbatch --reservation=alan_6 myScript.sh 

purtroppo non ho potuto verificare questa routine, probaly a causa della mancanza di privilegi.

+1

Una prenotazione impedirà * a qualsiasi altro utente di eseguire * sullo stesso set di nodi, ecco perché è necessario un amministratore per crearlo. E 'questo quello che vuoi veramente? Prenota i nodi per il tuo accesso esclusivo? –

+0

Beh, questo è quello che abbiamo concordato tra i (pochi) utenti. Se possiamo impostare una durata massima, perché no? O questo approccio è un anti-pattern completo per l'utilizzo del cluster? – Faber

+0

E 'possibile dare agli utenti regolari il permesso di impostare le prenotazioni? – Faber