SLURM Pianifica attività senza vincoli di nodi

Aug 22 2020

Devo programmare i lavori su un cluster GPU molto occupato. Non mi interessa molto dei nodi, più delle GPU. Il modo in cui è strutturato il mio codice, ogni lavoro può utilizzare solo una singola GPU alla volta e quindi comunicano per utilizzare più GPU. Il modo in cui generalmente pianifichiamo qualcosa di simile è facendo gpus_per_task=1, ntasks_per_node=8, nodes=<number of GPUs you want / 8>poiché ogni nodo ha 8 GPU.

Poiché non tutti hanno bisogno di 8 GPU, ci sono spesso nodi che hanno poche (<8) GPU in giro, che usando i miei parametri non sarebbero programmabili. Dato che non mi interessano i nodi, c'è un modo per dire a slurm che voglio 32 attività e non mi interessa quanti nodi usi per farlo?

Ad esempio, se vuole darmi 2 attività su una macchina con 2 GPU rimaste e le restanti 30 suddivise tra nodi completamente liberi o qualsiasi altra cosa fattibile per utilizzare meglio il cluster.

So che c'è un ntasksparametro che può farlo, ma la documentazione è piuttosto confusa al riguardo. Afferma

L'impostazione predefinita è un'attività per nodo, ma tieni presente che l'opzione --cpus-per-task cambierà questa impostazione predefinita.

Cosa cpus_per_taskc'entra con questo?

Ho anche visto

Se utilizzato con l'opzione --ntasks, l'opzione --ntasks avrà la precedenza e --ntasks-per-node verrà trattato come un numero massimo di attività per nodo

ma sono anche confuso su questa interazione. Questo significa che se lo chiedo --ntasks=32 --ntasks-per-node=8metterà al massimo 8 attività su una singola macchina ma potrebbe metterne di meno se decide di (in pratica questo è quello che voglio)

Risposte

2 MarcusBoden Aug 24 2020 at 16:46

Prova --gpus-per-task 1e --ntasks 32. Nessuna attività per nodo o numero di nodi specificato. Ciò consente a slurm di distribuire le attività tra i nodi come desidera e di utilizzare le GPU rimanenti sui nodi che non sono completamente utilizzati. E non inserirà più di 8 attività su un singolo nodo, poiché non sono disponibili più di 8 GPU.

Per quanto riguarda ntasksvs cpus-per-task: questo non dovrebbe avere importanza nel tuo caso. Per impostazione predefinita, un'attività ottiene una CPU. Se lo usi --cpus-per-tasks x, è garantito che le x CPU siano su un nodo. Questo non è il caso se dici solo --ntasks, dove i compiti sono distribuiti comunque lo slurm decida. C'è un esempio per questo nella documentazione.

Avvertenza: questo richiede una versione di slurm >= 19.05, poiché tutte le opzioni --gpu sono state aggiunte lì.