Slurm interrompe l'elaborazione di #SBATCH
direttive sulla prima riga di codice eseguibile in uno script. Per gli utenti con #SBATCH
le direttive non dipendono dal codice che stanno tentando di eseguire sopra quelle direttive, basta inserire #SBATCH
righe in alto.
Vedi l'altra risposta per una soluzione alternativa se, come con OP, le tue opzioni sbatch dipendono dai comandi che hai posizionato sopra di esse.
Lo script batch può contenere opzioni precedute da "#SBATCH" prima di qualsiasi comando eseguibile nello script . sbatch interromperà l'elaborazione di ulteriori direttive #SBATCH una volta che nello script è stata raggiunta la prima riga non di spazio vuoto senza commento.
Dai documenti sbatch, la mia enfasi.
Questo non funzionerà. Cosa succede quando corri
sbatch myscript.sh
è che slurm analizza lo script per quelle speciali righe #SBATCH, genera un record di lavoro, memorizza lo script batch da qualche parte. Lo script batch viene eseguito solo successivamente quando viene eseguito il lavoro.
Quindi devi strutturare il tuo flusso di lavoro in un modo leggermente diverso e calcolare prima il numero di processi necessari prima di inviare il lavoro. Nota che puoi usare qualcosa come
sbatch -n $numProcs myscript.sh
, non è necessario generare automaticamente lo script (inoltre, mpirun dovrebbe essere in grado di ottenere automaticamente il numero di processi nella tua allocazione, non è necessario utilizzare "-np").