Adamis-cluster

Utilisation du système de soumission de job : Torque/MAUI

Le système de soumission de job installé sur le cluster est Torque/MAUI. Une seule queue est configurée, sans limite de ressources autres que celles du cluster. Les soumissions sont acceptée uniquement à partir du noeud maître.

À la connexion est créé un répertoire dédié du nom de /scratch/$USER.$PBS_JOBID monté sur un système de fichier rapide (local) destiné à recevoir les fichiers temporaires du job. Il sera détruit à la fin du job.

Obtention d'un shell sur un noeud de calcul

La commande : qsub -I permet d'obtenir un shell sur un des noeuds de calcul.

Pour réserver l'intégralité de la mémoire ou des CPUs d'un noeud :
qsub -I -l nodes=1:ppn=8

Soumission de job séquentiel

Voici un squelette typique de script utilisé pour soumettre un job.

 
#!/bin/bash
#PBS -S /bin/bash
#PBS -N myjobname
#PBS -o out_file
#PBS -e err_file
#PBS -j oe
#PBS -m abe
#PBS -M betoule@apc.univ-paris7.fr
#PBS -l nodes=1:ppn=4,walltime=24:00:00
export SCRATCH="/scratch/$USER.$PBS_JOBID" # this set a system variable to point the temporary scratch repository
echo "Ça marche ou bien ???"

Il sera soumis par la commande qsub nomduscript.sh

Si le script fait des appels à des binaires compilés en openmp, il est nécessaire de spécifier le nombre de processeurs que vous souhaitez utiliser (et que vous avez déclarés dans ppn) par la ligne:
export OMP_NUM_THREADS=4 # if you're using openmp binaries, set this in accordance with ppn

Si le script utilise fait appel à un interpréteurs (Octave, IDL, ...), il est important de spécifier à ce dernier qu'il doit utiliser le SCRATCH comme répertoire temporaire, ce qui se fait habituellement via les variables d'environnement TMPDIR ou TEMPDIR.

export TMPDIR="/scratch/$USER.$PBS_JOBID" # this set a system variable to point the temporary scratch repository

Les lignes commençant par #PBS sont des directives à l'intention du PBS. La ligne PBS -l spécifie les ressources demandées. Ici on demande 1 noeud (séquentiel ou openmp) disposant de 4 CPUs libres pour 24h.

On peut aussi soumettre plusieurs jobs avec des conditions sur l'ordre d'exécution. Par exemple, le script

qsub script1.sh

soumet un script à un noeud de calcul. Cette commande renvoie un PBS_JOBID, disons 1235. On peut alors soumettre un autre job qui attendra que le job 1235 soit terminé et sans erreur par la commande

qsub -W depend=afterok:1235 script2.sh

ATTENTION. Les fichiers out_file et err_file sont écrits temporairement dans la partition /var (partition de 3Go) donc ne créez pas de fichiers trop volumimeux.

Soumission de job parallèles

Compilation

La compilation des codes s'effectue sur le noeud maître via les wrappers mpi* ou * dépend du langage utilisé :

  • mpic++, mpicc, mpiCC, mpicxx : contruit avec (Gnu) gcc/g++
  • mpif70, mpif90 : construit avec Intel Fortran

Ils sont disponibles dans /usr/local. Vous devez modifier votre configuration pour les utiliser :

  • Ajouter dans PATH /usr/local/openmpi/bin
  • Ajouter dans LD_LIBRARY_PATH /usr/local/openmpi/lib/:/usr/local/openmpi/lib/openmpi/

Pour compiler des codes Fortran vous devez également configurer l'utilisation du compilateur intel :

  source /usr/local/intel/fce/10.1.008/bin/ifortvars.[c]sh

Exécution

Voici un fichier typique pour lancer un job MPI :

#!/bin/bash
#PBS -S /bin/bash
#PBS -N myjobname
#PBS -o out_file
#PBS -e err_file
#PBS -j oe
#PBS -m abe
#PBS -M betoule@apc.univ-paris7.fr
#PBS -l nodes=2:ppn=4,walltime=24:00:00
export SCRATCH="/scratch/$USER.$PBS_JOBID" # this set a system variable to point the temporary scratch repository
export PATH=/usr/local/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openmpi/lib/:/usr/local/openmpi/lib/openmpi/:/usr/local/intel/fce/10.1.008/lib/:$LD_LIBRARY_PATH
cd mon_repertoire_hello_f90
mpirun ./Hello_f90

Vous n'avez pas à vous soucier du fichier machine ni du nombre de processeurs dans la commande mpirun, le PBS se charge de le faire en fonction de la demande dans la ligne #PBS -l. Attention toutefois, le scheduler comprends cette demande comme: allouez 8 processeurs (2*4) par groupe d'au moins 4 processeurs. Ainsi vous pourrez éventuellement obtenir 8 processeurs sur le même noeud, 4 processeurs sur 2 noeuds, mais pas 2 processeurs sur 4 noeuds.

Pour forcer l'utilisation de noeuds différents, il faut spécifier l'hôte en utilisant par exemple:

#PBS -l nodes=node1.local:ppn=4+node2.local:ppn=4,walltime=24:00:00

/usr/local/intel/fce/10.1.008/lib/ n'est pas nécessaire pour les code c/c++

Stacksize avec OpenMP et MPI

Avec MPI

La stacksize (par défaut) de 8Mo peut être modifiée sous bash (resp. [t]csh) par ulimit -s valeur (resp.) limit stacksize valeur Lors de la soumission d'un job MPI et si vous souhaitez modifier la stacksize, vous ne devez pas modifier cette valeur dans le script utilisé par qsub (jobsub.sh) mais le script appelé par mpirun (script.sh)

cat script.sh

#!/bin/bash
ulimit -s valeur
cd mon_repertoire_hello_f90
Hello_f90

cat jobsub.sh
#!/bin/bash
#PBS -S /bin/bash
#PBS -N myjobname
#PBS -o out_file
#PBS -e err_file
#PBS -j oe
#PBS -m abe
#PBS -M betoule@apc.univ-paris7.fr
#PBS -l nodes=2:ppn=4,walltime=24:00:00
export SCRATCH="/scratch/$USER.$PBS_JOBID" # this set a system variable to point the temporary 
scratch repository
export PATH=/usr/local/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openmpi/lib/:/usr/local/openmpi/lib/openmpi/:/usr/local/intel/fce/10.1.008/lib/:$LD_LIBRARY_PATH
cd mon_repertoire_hello_f90
mpirun script.sh

Monitoring

La commande qstat affiche des informations sur l'état du job (voir le man).

I want some more

Pour plus d'informations sur l'utilisation de PBS/Torque voir par exemple :

http://www.clusterresources.com/wiki/doku.php?id=torque:torque_wiki