Cluster

Commandes de base de pbs

  • pour lancer le programme monExecutable dans le répertoire monRepertoire, avec nomDeMonJob comme nom de job. L'option -m n désactive l'envoi de courriel à la fin.
echo "cd monRepertoire; ./monExecutable" | qsub -l nodes=1:ppn=1 -m n -N nomDeMonJob
  • qstat : avoir la liste de ses jobs
  • qstat -n : idem, mais avec le noeud où se trouvent les jobs
  • pbsnodes -a : pour voir l'état du cluster

Conseils

  • Il n'est pas toujours facile de savoir si un job s'est correctement terminé, vous pouvez donc ajouter à la fin de la commande à envoyer à qsub echo “Job Fini”;, soit :
echo "cd monRepertoire; ./monExecutable; echo Job Fini;" | qsub -l nodes=1:ppn=1 -m n -N nomDeMonJob
  • De même, il peut être utile d'enregistrer également des informations sur la commande lancée.
  • Le nommage des jobs est important pour vous y retrouver dans les fichiers de sortie
  • Il peut être intéressant de connaître le temps d'exécution de vos programmes, il suffit pour cela d'utiliser la commande time

En suivant ces conseils, voici comment lancer un programme pour un ensemble de fichiers input_* placés dans le répertoire courant, les jobs étant nommé avec le nom du fichier (en ôtant “intput_”) et la sortie de qsub (contenant le temps d'exécution) étant stockée dans un fichier output_* correspondant :

for f in input_*; do
  PWD=$(pwd)
  echo "cd ${PWD}; time ./monExecutable ${f};" | qsub -l nodes=1:ppn=1 -m n -N ${f##input_} -j oe -o ./output_${f##input_}
done

Mini-scripts avancés, et + si affinités

  • liste des noeuds occupés, avec les jobs en cours :
pbsnodes -a | awk ' /status =/ {next}; /node[0-9]+/ {node=$1}; /jobs = /  {print node"\t "$3" "$4}'
  • pareil avec affichage du type de noeud, le tout trié par type de noeud
pbsnodes -a | awk ' /status =/ {next}; /node[0-9]+/ {node=$1}; /properties = / {prop=$3}; /jobs = / {print prop" "node"\t "$3" "$4}' | sort
  • affiche l'état de la mémoire pour les noeuds que l'on utilise :
for NODE in `qstat -n | grep node | cut -f1 -d'/'`; do echo -e " $NODE : \t" `rsh $NODE 'free -m' | awk '/Mem:/ {print $3" / "$2" m"}'`; done
  • Supprime tout les jobs en cours :
qstat | grep master | cut -f1 -d'.' | xargs qdel