2017-05-13 11 views
0

Je dois exécuter plusieurs simulations sur un cluster en utilisant sbatch. Dans un dossier que j'ai le script Python à exécuter et un fichier pour être utilisé avec sbatch:Comment soumettre des tâches à SLURM avec différents nœuds?

#!/bin/bash -l 
#SBATCH --time=04:00:00 
#SBATCH --nodes=32 
#SBATCH --ntasks-per-core=1 
#SBATCH --ntasks-per-node=36 
#SBATCH --cpus-per-task=1 
#SBATCH --partition=normal 
#SBATCH --constraint=mc 

module load Python 

source /scratch/.../env/bin/activate 

srun python3 script.py 

deactivate 

Ce que je dois faire est d'exécuter le même script Python, mais en utilisant des valeurs différentes pour --nodes. Comment puis je faire ça? De plus, je voudrais créer un dossier pour chaque exécution où le fichier slurm sera sauvegardé (sortie), nommé quelque chose comme "nodes_xy".

Répondre

1

En supposant que votre script est nommé submit.sh, vous pouvez supprimer le --nodes du script et exécutez:

for i in 2 4 8 16 32 64; do sbatch --nodes $i --output nodes_$i.txt, submit.sh; done 

Cela présentera le script submit.sh avec deux paramètres supplémentaires, --nodes et --output, le premier à contrôler la nombre de nœuds utilisés, et le second pour spécifier le nom du fichier de sortie, pour chaque valeur 2, 4, 8, etc. Notez que tous les fichiers de sortie seront dans le répertoire courant, vous devrez développer le one-liner un peu si vous en avez vraiment besoin dans des répertoires séparés.

Si la durée de fonctionnement maximale admissible permet, vous pouvez effectuer toutes les courses en un seul travail avec quelque chose comme ceci:

#!/bin/bash -l 
#SBATCH --time=04:00:00 
#SBATCH --nodes=32 
#SBATCH --ntasks-per-core=1 
#SBATCH --ntasks-per-node=36 
#SBATCH --cpus-per-task=1 
#SBATCH --partition=normal 
#SBATCH --constraint=mc 

module load Python 

source /scratch/.../env/bin/activate 

for i in 2 4 8 16 32 64; 
do 
srun --nodes $i python3 script.py > nodes_$i 
done 

deactivate