Exécuter des jobs sur le cluster

1. Qu'ai-je le droit de faire sur la frontale Summit2 ?

La frontale est un serveur Dell R540 (voir ArchitectureSummit2) dont la puissance est du même ordre que celle des nœuds de calcul les plus récents (24 cœurs, 192 GB Ram). Toutefois, contrairement aux nœuds qui sont généralement dédiés à un seul utilisateur (avec les commandes Slurm décrites dans cette page), Summit2 est partagée par tous les utilisateurs connectés au cluster. Par conséquent, pour ne pas affaiblir ses ressources et pénaliser l'ensemble des utilisateurs, voici quelques règles de bon sens concernant son utilisation.

Sur Summit2, vous pouvez :

  • éditez vos sources.
  • compiler vos codes. Si des outils de développement ou des librairies (Open source) sont absents, n'hésitez pas à en faire la demande à calcul@aero.obs-mip.fr.

  • effectuer des pré/post-traitements tant qu'ils courts.
  • lancer la commande top si vous constatez des ralentissements inhabituels pour repérer les processus qui occupent la frontale.

Sur Summit2, vous éviterez :

  • d'exécuter des codes gourmands en mémoire de manière prolongée.
  • d'exécuter des codes parallélisés de manière prolongée.
  • de rediriger les sorties des nœuds de calcul sur votre $HOME lorsqu'elles sont volumineuses et fréquentes.

  • de faire écrire par les nœuds sur votre $HOME des fichiers temporaires.

Dans la majorité des cas, vous avez tout intérêt à utiliser la ressource des nœuds de calcul : elle vous est dédiée et vous libérez ainsi de la ressource sur Summit2 (sauf si vous effectuez de très nombreuses entrées/sorties dans votre répertoire $HOME - voir BonUsageDuCluster). Pour accéder aux nœuds de calcul, vous disposez des commandes Slurm : salloc, srun et sbatch décrites dans la suite de cette page.

2. "salloc" : travailler en interactif

Summit2:~> salloc -p any -N 1 bash
salloc: Granted job allocation 72

lance la commande 'bash' sur la frontale Summit2 (empile un shell) une fois que l'allocation d'1 cœur sur un nœud de la partition 'any' a réussi. La commande passée en argument de salloc (ici bash) s'exécute sur la frontale Summit2. Si aucun cœur n'est disponible salloc attend.

Summit2:~> squeue -u gazdi
  JOBID PARTITION     NAME     USER  ST       TIME  NODES  CPUS  NODELIST(REASON)
     72       any     bash    gazdi   R       0:35      1     1  n102

La ressource est relâchée une fois que la commande fournie en argument de salloc se termine ou lorsque le temps limite dans la partition est atteint. Dans l'exemple présent, il faut que le bash se termine en tapant 'exit' ou CTRL-D.

Summit2:~> exit
salloc: Relinquishing job allocation 72

Une fois la ressource obtenue a l'aide de salloc, il est possible de lancer des commandes sur les nœuds/cpus correspondants avec la commande srun.

  • Il est facile d'oublier qu'on a exécuté salloc dans une de nos fenêtres terminal. Vérifiez avec squeue que vous n'avez pas laissé traîner une allocation inutile.

  • En allouant un nœud initialement dans l'état idle~ (éteint), il faut prendre en compte le temps de mise en service (environ 5 minutes et jusqu'à 20 minutes si une vérification disque se produit) avant de s'inquiéter.

3. "srun" : exécuter une commande sur un nœud

srun permet d'exécuter une commande sur une allocation obtenue par salloc mais peut également se charger de l'allocation s'il est lancé de manière autonome.

4. "sbatch" : soumettre un job en batch

sbatch permet de soumettre un script à slurm. Ce script doit posséder l'entête :

 #!/bin/sh

Eventuellement, des options sbatch peuvent être ajoutées dans le script en les préfixant par #SBATCH comme ci dessous :

 #!/bin/sh
 #SBATCH --output="toto-%j"
 #SBATCH --time=1

La commande sbatch se charge d'allouer les ressources en fonctions des options fournies en arguments (PAS BESOIN DE LANCER SALLOC avant de lancer sbatch). Elle rend la main immédiatement une fois le script transféré à Slurm. Le script s'exécute dès que les ressources demandées sont disponibles. Lorsque l'allocation de la ressource est accordée, Slurm démarre UNE SEULE copie du script sur le premier nœud de l'allocation.

Pour utiliser les autres nœuds de l'allocation, le script doit contenir des appels à srun. Voir man sbatch pour plus d'informations.

Exemple simple :

Summit2:~/essai> cat myjob.sh

#!/bin/sh
#SBATCH --output="toto-%j"
#SBATCH --time=1
echo "BEGIN"
hostname
echo "##############"
srun -N1 bash -c "hostname && sleep 30" &
srun -N1 bash -c "hostname && sleep 30" &
echo "waiting"
wait
echo "END"

Summit2:~/essai> sbatch -p any -N2 myjob.sh
Submitted batch job 79

Summit2:~/essai> ll
total 8
-rwxr-xr-x 1 gazdi MESO 214 2010-06-08 11:25 myjob.sh
-rw-r--r-- 1 gazdi MESO  11 2010-06-17 18:43 toto-79

Summit2:~/essai> cat toto-79
BEGIN
n102
##############
waiting
n102
n103
END

5. Options courantes et communes à salloc, srun, sbatch

-p <partition>

option obligatoire spécifiant la partition

-N <nb noeuds>

nombre de noeuds minimum

-n <nb cpus>

nombre de cpus/cœurs/tâches

6. Applications parallèles MPI

Avant la compilation/exécution de programmes parallèles, activez les variables d'environnment Open-MPI comme indique dans LogicielsSummit2.

Lancer un job mpi avec sbatch, revient a écrire un script 'jobmpi.sh' de la forme:

#!/bin/sh
mpirun appliMPI

Puis pour exécuter hellompi sur 16 cpus il suffit d'écrire la commande:

sbatch -p mpib40 -n 16 jobmpi.sh

Vous noterez qu'il nest pas nécessaire de spécifier le nombre de tâches a mpirun (option -np) car l'information -n16 passée à sbatch est automatiquement répercutée à mpirun.

7. Applications parallèles OpenMP

8. "scancel" : annuler un job

Pour annuler un job en train de s'exécuter (Running) ou en attente de ressources (Pending), utilisez la commande scancel :

scancel <jobid1> <jobid2> ...

où "<jobid1> <jobid2>..." est une liste de jobs dont vous êtes le propriétaire, visibles par la commande squeue, exemple :

Summit2:~> squeue -u gazdi
  JOBID    PARTITION     NAME     USER  ST       TIME  NODES  CPUS  NODELIST(REASON)
  27188         gpus     bash    gazdi   R       2:42      1     8  n140

Summit2:~> scancel 27188

Summit2:~> squeue -u gazdi
  JOBID    PARTITION     NAME     USER  ST       TIME  NODES  CPUS  NODELIST(REASON)

Il est possible de sélectionner plusieurs jobs suivant des critères précis en spécifiant des options supplémentaires (voir "man scancel"), par exemple :

scancel -p <partition> --state=PENDING

permet d'annuler tous vos jobs Pending dans la partition <partition>.

9. "sps" : ps sur les nœuds

La commande sps ne fait pas partie des outils Slurm. Il s'agit d'un script shell permettant d'exécuter la commande ps sur tous les nœuds de calcul (et pas uniquement sur ceux alloués à l'utilisateur). La syntaxe est la suivante :

sps <liste_nœuds> <options_ps>



Quelques exemples :


CatégorieDocSlurm

WikiSummit2: SoumissionJob (dernière édition le 2023-10-26 11:28:19 par FernandoNino)