2017-07-31 1 views
1

Je travaille sur un projet qui exécute des programmes sur deux partitions différentes d'un grand cluster de calcul. Je voudrais exécuter cela en utilisant un script batch, mais après la recherche, il n'est pas encore clair si/comment je peux allouer et exécuter des programmes sur deux partitions différentes à partir d'un seul script batch. Voici le genre de chose que je voudrais faireScript batch pour un travail multi-partition?

#!/bin/bash 
#SBATCH --partition=<WHAT GOES HERE? I want to perform 100 processes on partition "batch" and 1 process on partition "gpu". I will alternate between the 2 during my jobs execution> 
#SBATCH --ntasks=<100 on batch, 1 on gpu> 
#SBATCH --mem-per-cpu=2G 
#SBATCH --time=4-00:00:00 
#SBATCH --exclude=nodeynode[003,016,019,020-023,026-030,004-015,017-018,020,024,031] 
#SBATCH --job-name="lorem_ipsum" 

filenames=("name1" "name2" "name3") 

srun -p gpu python gpu_init.py 
wait 

for i in {0..100} 
do 
    for name in "${filenames[@]}" 
    do 
    srun -p batch pythonexecutable & 
    done 
srun -p gpu python gpu_iter.py 
wait 
done 

Toutes mes excuses pour les erreurs de bash, je le script habituellement en python, mais je ne peux pas ici que je suis modules de commutation de python (versions différentes) dans mon script bash (pas montré). J'ai vu que vous pouvez réellement mettre une liste de partitions dans l'en-tête d'un script batch, mais d'après ce que j'ai lu, il suffit de dire au planificateur d'allouer toutes les partitions disponibles dans la liste, pas plusieurs partitions.

Merci!

Répondre

1

emplois slurm sont limités à une partition si dans votre cas, il y a plusieurs moyens d'action:

  • présentent deux tableaux d'emploi --array=1..100 et partager votre script de soumission dans une partie de la partition batch et une autre partie pour la partition gpu et reliant les deux réseaux avec --depedendcy=aftercorr:<job_id of the 'batch' job array>

  • utilisation salloc pour créer une allocation de la partition gpu, puis utilisez SSH explicitement à ce noeud pour exécuter python gpu_iter.py dans le script de soumission (si les permis de configuration du cluster)

  • modifier le gpu_iter.py afin qu'il puisse être signalé (avec des signaux UNIX) qu'il doit courir et dormir jusqu'à ce que le signal suivant, et utiliser scancel pour signaler la gpu travail à partir du travail batch à chaque itération.