Slurm arrête de traiter #SBATCH
directives sur la première ligne de code exécutable dans un script. Pour les utilisateurs dont le #SBATCH
les directives ne dépendent pas du code qu'elles essaient d'exécuter au-dessus de ces directives, il suffit de mettre le #SBATCH
lignes en haut.
Voir l'autre réponse pour une solution de contournement/solution si, comme avec OP, vos options de sbatch dépendent des commandes que vous avez placées au-dessus d'elles.
Le script batch peut contenir des options précédées de "#SBATCH" avant toute commande exécutable dans le script . sbatch arrêtera de traiter d'autres directives #SBATCH une fois que la première ligne non-commentaire non-blanche aura été atteinte dans le script.
D'après les documents sbatch, je souligne.
Cela ne fonctionnera pas. Que se passe-t-il lorsque vous exécutez
sbatch myscript.sh
est que slurm analyse le script pour ces lignes #SBATCH spéciales, génère un enregistrement de travail, stocke le script batch quelque part. Le script batch n'est exécuté que plus tard lors de l'exécution de la tâche.
Vous devez donc structurer votre flux de travail d'une manière légèrement différente et calculer d'abord le nombre de procs dont vous avez besoin avant de soumettre le travail. Notez que vous pouvez utiliser quelque chose comme
sbatch -n $numProcs myscript.sh
, vous n'avez pas besoin de générer automatiquement le script (de plus, mpirun devrait pouvoir obtenir automatiquement le nombre de procs dans votre allocation, pas besoin d'utiliser "-np").