Sommaire
- Qu'ai-je le droit de faire sur la frontale Summit2 ?
- "salloc" : travailler en interactif
- "srun" : exécuter une commande sur un nœud
- "sbatch" : soumettre un job en batch
- Options courantes et communes à salloc, srun, sbatch
- Applications parallèles MPI
- Applications parallèles OpenMP
- "scancel" : annuler un job
- "sps" : ps sur les nœuds
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 n102La 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
salloc peut être spécifiée sans commande. Dans ce cas, la commande 'bash' est exécutée par défaut : salloc -p any -N 1 bash
est équivalent àsalloc -p any -N 1
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.
Exemple avec appel préalable à salloc :
Summit2:~> salloc -p any -n2 salloc: Granted job allocation 74 Summit2:~> squeue -u gazdi JOBID PARTITION NAME USER ST TIME NODES CPUS NODELIST(REASON) 74 any bash gazdi R 0:03 1 2 n102Ici on alloue 2 cœurs/processeurs dans la partition any. Slurm nous a attribué 2 cpus du nœud n102.
Summit2:~> srun hostname n102 n102
La commande hostname s'exécute sur les deux cpus alloués par salloc et nous retourne donc bien 2 fois le nom du nœud n102.
Summit2:~> exit salloc: Relinquishing job allocation 74
Exemple sans appel à salloc :
Summit2:~> srun -p any -N5 hostname n102 n103 n106 n105 n104
Ici, on souhaite exécuter la commande hostname sur 5 nœuds différents (option -N5) de la partition any. Par défaut Slurm nous alloue 1 cpu par nœud.
- Executer une commande interactif dans un noeud de calcul :
Summit2:~> srun -p any --nodes=2 --pty bash -i
Ici, on se connecte en interactive sur le premier noeud alloué.
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
Par défaut la sortie d'un job soumis en batch est redirigée dans le fichier slurm-<jobid>.out dans le répertoire ou la commande sbatch a été lancée.
Un job en batch se termine lorsque le script soumis à la commande sbatch a terminé son exécution. La ressource allouée pour le job est alors immédiatement relâchée.
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>
<liste_nœuds> est la liste des nœuds au format slurm (par exemple n[3-5,10,13-17] ou n12) sur lesquels ps doit s'exécuter.
<options_ps> correspond aux options de la commande Unix ps (voir man ps).
La première fois que vous utilisez sps, ne soyez pas surpris de découvrir le message suivant (caractéristique d'une connexion ssh) : The authenticity of host 'master0 (10.0.1.1)' can't be established. RSA key fingerprint is d5:c5:51:7e:22:4e:d9:2f:59:c0:10:ee:41:e9:09:b2. Are you sure you want to continue connecting (yes/no)?
Répondre simplement "yes", c'est la dernière fois qu'il apparaîtra !
Quelques exemples :
Exécuter "ps aux -L" sur le nœud n232 (l'option -L permet d'avoir des infos sur les threads) :
Summit2:~> sps n232 aux -L
232 --------------------------------------------------------------------- USER PID LWP %CPU NLWP %MEM VSZ RSS TTY STAT START TIME COMMAND saub 6446 6446 0.0 1 0.0 12476 1412 ? S Apr09 0:00 /bin/sh /tmp/slurmd/job27937/slurm_script saub 6447 6447 0.0 4 0.0 171316 4680 ? Sl Apr09 0:00 srun ./geos saub 6447 6448 0.0 4 0.0 171316 4680 ? Sl Apr09 0:00 srun ./geos saub 6447 6449 0.0 4 0.0 171316 4680 ? Sl Apr09 0:00 srun ./geos saub 6447 6450 0.0 4 0.0 171316 4680 ? Sl Apr09 0:10 srun ./geos saub 6458 6458 98.4 9 39.9 17079728 9888528 ? Rl Apr09 3633:17 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6462 0.0 9 39.9 17079728 9888528 ? Sl Apr09 0:14 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6463 88.7 9 39.9 17079728 9888528 ? Rl Apr09 3274:39 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6464 88.6 9 39.9 17079728 9888528 ? Rl Apr09 3271:34 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6465 88.5 9 39.9 17079728 9888528 ? Rl Apr09 3265:25 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6466 88.6 9 39.9 17079728 9888528 ? Rl Apr09 3270:18 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6467 88.5 9 39.9 17079728 9888528 ? Rl Apr09 3265:15 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6468 88.6 9 39.9 17079728 9888528 ? Rl Apr09 3270:20 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos saub 6458 6469 88.4 9 39.9 17079728 9888528 ? Rl Apr09 3262:51 /home2/saub/Code.v9-01-01_simus/g5_0.5x0.5_v0_nokpp_nested5_multi1/run2/./geos slurm 7830 7830 0.0 1 0.0 6784 1076 ? Rs 11:06 0:00 ps aux -L
Exécuter "ps aux" sur les nœuds n[5-6] :
Summit2:~> sps n[5-6] aux
5 --------------------------------------------------------------------- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ulsc 1887 0.0 0.0 12484 532 ? S Apr11 0:00 /bin/sh /tmp/slurmd/job29509/slurm_script ulsc 1908 0.0 0.0 64128 1192 ? S Apr11 0:13 mpirun ./symphonie_gemo.exe ulsc 1909 0.0 0.0 171396 980 ? Sl Apr11 0:00 srun --nodes=1 --ntasks=1 --kill-on-bad-exit --nodelist=n6 orted -mca ess slurm -mca orte_ess_jobid 1571356672 -mca orte_ess_vpid 1 -mca orte_ess_num_procs 2 --hnp-uri "1571356672.0;tcp://10.10.0.5:50292;tcp://192.168.0.5:50292" ulsc 1915 92.9 2.2 791340 546716 ? RLl Apr11 1139:31 ./symphonie_gemo.exe ulsc 1916 92.4 2.2 790796 546400 ? RLl Apr11 1133:31 ./symphonie_gemo.exe ulsc 1917 91.9 2.1 790428 537124 ? RLl Apr11 1126:57 ./symphonie_gemo.exe ulsc 1918 92.6 2.1 790324 528452 ? RLl Apr11 1135:59 ./symphonie_gemo.exe ulsc 1919 93.0 2.2 790320 545936 ? RLl Apr11 1140:12 ./symphonie_gemo.exe ulsc 1920 91.7 2.1 790256 539332 ? RLl Apr11 1124:16 ./symphonie_gemo.exe ulsc 1921 91.2 2.2 791688 550380 ? RLl Apr11 1118:49 ./symphonie_gemo.exe ulsc 1922 91.9 2.1 791080 532804 ? RLl Apr11 1127:47 ./symphonie_gemo.exe slurm 2424 0.0 0.0 6784 1072 ? Rs 11:10 0:00 ps aux 6 --------------------------------------------------------------------- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ulsc 1788 0.0 0.0 56960 2184 ? S Apr11 0:09 /usr/local/open-mpi-142-ifort_icc/bin/orted -mca ess slurm -mca orte_ess_jobid 1571356672 -mca orte_ess_vpid 1 -mca orte_ess_num_procs 2 --hnp-uri "1571356672.0;tcp://10.10.0.5:50292;tcp://192.168.0.5:50292" ulsc 1791 93.7 2.1 791340 539856 ? RLl Apr11 1149:03 ./symphonie_gemo.exe ulsc 1792 92.5 2.1 790764 535792 ? RLl Apr11 1134:08 ./symphonie_gemo.exe ulsc 1793 92.6 2.1 790252 543448 ? RLl Apr11 1135:39 ./symphonie_gemo.exe ulsc 1794 93.4 2.2 790252 546272 ? RLl Apr11 1145:46 ./symphonie_gemo.exe ulsc 1795 94.2 2.2 790040 546780 ? RLl Apr11 1155:36 ./symphonie_gemo.exe ulsc 1796 92.8 2.2 790044 547980 ? RLl Apr11 1138:51 ./symphonie_gemo.exe ulsc 1797 92.6 2.1 791320 543356 ? RLl Apr11 1136:12 ./symphonie_gemo.exe ulsc 1798 93.8 2.2 791848 546488 ? RLl Apr11 1150:31 ./symphonie_gemo.exe slurm 2305 0.0 0.0 6784 1076 ? Rs 11:10 0:00 ps aux
