Frequently Asked Questions - Utilisation du cluster de calcul

1. Mode batch

Le mode batch permet de soumettre des jobs sur le cluster de calcul. Ils sont ainsi gérés par le scheduler qui va les dispatcher sur les noeuds en fonction des ressources demandées et des disponibilités. La commande qsub est dédiée à ce type de soumission.

2. Mode interactif

Le mode interactif permet de se connecter directement sur un noeud du cluster de calcul et de lancer le traitement sans passer par le scheduler. La commande qlogin est disponible pour se connecter sur un noeud. Par défaut, qlogin est paramétré pour se connecter sur un noeud de la file long.q. Pour spécifier un noeud particulier, il faut échapper la commande et spécifier le noeud souhaité de cette façon :

\qlogin -l hostname=n55

 

3. Pourquoi choisir l'un plus que l'autre ?

En utilisant le mode batch, c'est SGE qui prend en charge les jobs soumis. Vous pouvez alors vous déconnecter de migale, vos jobs tournent sur le cluster. Un job_id est attribué au job, facilitant le monitoring pendant ou après la fin de l'exécution du job.

Le mode interactif est pratique pour tester la configuration d'exécution de vos jobs. Cela permet de tester l'outil que vous allez utiliser, de vérifier les variables d'environnement... Par contre, une déconnexion de la session entraîne la fin des exécutions en cours. Ce mode n'est pas recommandé pour lancer des jobs complets car les ressources du noeud ne sont alors pas soumises à la réservation par SGE. Il se peut que les capacités en CPU ou en mémoire du noeud soient dépassées et provoquent un ralentissement voire un crash.

La commande qsub permet de lancer sur le cluster l'exécution de lignes de commande.

1. Première solution :

Il faut préparer un fichier (script) contenant la (ou les) ligne(s) de commande. En cliquant sur ce fichier sge_blast.sh, vous aurez un exemple de script commenté pour l'utilisation de BLAST. Un numéro apparaîtra après la soumission vous donnant le numéro que SGE lui a attribué. Cet identifiant peut vous servir pour supprimer votre job ou suivre son bon déroulement.

Pour soumettre le job, il suffit de lancer la commande :

qsub sge_blast.sh

De nombreuses options sont disponibles pour paramétrer la façon de soumettre un job (lien vers options). Si la commande est encapsulée dans un script, l'ajout de paramètres se fait en ajoutant une ligne de ce type :

# Export de toutes les variables d'environnement
#$ -V

2. Deuxième solution :

Il est également possible de lancer un job sans avoir besoin d'utiliser un script contenant la ligne de commande. Il s'agit de l'option -b y :

qsub -cwd -V -S /bin/bash -N myblast -b y "blastall -p blastp -i test_seq.fasta -o test_seq.blast -d /db/blast/nr80/nr80"

 

La commande qhost permet d'obtenir des informations sur les ressources disponibles :

Afficher les noeuds de calcul disponibles et leurs ressources.

qhost
 HOSTNAME                ARCH         NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
----------------------------------------------------------------------------------------------
global                  -               -    -    -    -     -       -       -       -       -
frangen                 lx-amd64       24    2   12   24  0.01  755.7G    7.0G    9.8G     0.0
n100                    lx-amd64        8    2    4    8  0.04   43.1G    1.2G   14.6G    1.3M
n101                    lx-amd64        8    2    4    8  0.04   47.0G    1.2G   14.6G   65.3M

Afficher des informations sur un noeud particulier

qhost -q|grep n86 -A2

n86                     lx-amd64       16    4   16   16  0.01   94.3G    1.4G   14.6G     0.0
   formation.q          BIP   0/0/16        
   infinit.q            BIP   0/0/16 

Afficher les groupes de noeuds de calcul

qconf -shgrpl

Afficher l'état des files d'attente

qstat
qstat -u "*" 
qstat -f
qstat -g c
 CLUSTER QUEUE                   CQLOAD   USED    RES  AVAIL  TOTAL aoACDS  cdsuE  
 --------------------------------------------------------------------------------
 formation.q                       0.00      0      0     36     36      0      0 
 highmem.q                         0.00      0      0     24     24      0      0 
 infinit.q                         0.86     64      0      0     80      0     16 
 long.q                            0.93    216      0      0    236      0     20 
 maiage.q                          0.69    115      0     25    140      0      0 
 short.q                           0.43    113      0    111    232      0      8 
 test.q                            0.04      0      0    384    412      0     28 
 web.q                             0.12      5      0     35     40      0      0 

 

Voici quelques options de la commande qsub :

  • -b y <command> : permet de passer la commande à lancer directement dans la ligne de commande du qsub, sans utiliser un script
  • -N job_name : permet de donner un nom au job lancer
  • -o stdout : permet de spécifier le fichier de sortie standard du job
  • -e stderr : permet de spécifier le fichier de sortie d'erreur du job
  • -V : permet d'embarquer les variables d'environnement
  • -cwd : permet d'exécuter le job à partir du répertoire de lancement du job
  • -pe thread <int> : permet d'exécuter un processus sur 8 coeurs d'un même noeud
  • -R y : permet de réserver des ressources au fur et à mesure qu'elles se libèrent
  • -q <file> : permet de spécifier la file sur laquelle le job sera lancé
  • -t <int>-<int> : permet de lancer plusieurs fois un job (1-10 lancera 10 fois le job)

La commande qstat permet d'obtenir des informations sur les jobs en cours. Les informations de base disponibles sont :

  • le numéro du job (job-ID)
  • la priorité
  • le nom du job
  • l'utilisateur ayant lancé le job
  • l'état du job (r : running, t : ,qw : en attente, Eqw : en erreur...) Toutes les significations des codes ici
  • la date de soumission
  • la queue et le noeud utilisés
  • ...

 

Quelques options intéressantes :

  • -u user : permet de lister les jobs d'un user particulier
  • -u \* : permet de lister tous les jobs lancés sur le cluster
  • -j ID : permet d'obtenir des informations sur un job particulier

 

La commande qdel permet de supprimer des jobs soumis sur le cluster.

Pour supprimer un job particulier :

qdel job_id

Pour supprimer tous les jobs d'un user particulier :

qdel -u user

 

La commande qacct permet d'obtenir des informations sur un job en renseignant son identifiant.

qacct -j job_id

Vous obtenez des informations sur les ressources utilisées par le job, la file sur laquelle il a été soumis, le noeud, les dates de départ et de fin du job, le statut d'erreur...

Je lance actuellement un grand nombre de jobs simultanément, chacun à partir d'un répertoire différent.
 
Y aurait-il moyen de savoir dans qstat quel est le répertoire de travail du job (ou celui où il a été lancé) ?

 

Pour un job donné, dont vous connaissez le jobid avec un qstat, vous pouvez utiliser le paramètre -j pour obtenir toutes les informations le concernant. Le paramètre cwd vous donne le répertoire d’où il a été lancé.
 
Exemple :
 
qstat -u vloux
9532500 0.00006 qsub_job.s vloux       r     02/20/2017 17:05:57 infinit.q@n92                      1
9533286 0.00006 qsub_job.s vloux       r     02/20/2017 17:20:12 infinit.q@n43                      1
9536801 0.00006 qsub_job.s vloux       r     02/20/2017 18:42:12 infinit.q@n51                      1
9536804 0.00006 qsub_job.s vloux       r     02/20/2017 18:43:57 infinit.q@n92                      1
9536808 0.00006 qsub_job.s vloux       r     02/20/2017 18:48:42 infinit.q@n51                      1
9538412 0.00006 qsub_job.s vloux       r     02/22/2017 17:16:39 infinit.q@n46                      1
9538413 0.00006 qsub_job.s vloux       r     02/22/2017 17:16:54 infinit.q@n77                      1
 
 
 qstat -j 9532500|grep cwd
cwd:                        /projet/versailles/work/vloux/cartoeure/outputs/20170220-170551TIntZoneDateGausSplitIntZoneDist
 
Et pour systématiser sur l’ensemble de vos jobs :
qstat -u vloux|awk '{print $1}'|xargs -t -n 1  qstat -j |grep cwd

Un environnement parallèle est un moyen de paralléliser une application. Cette méthode utilise uniquement les coeurs d'un noeud. Les communications entre processus sont rapides, mais on est limité en nombre de coeur utilisable. Les applications DOIVENT implémenter cette technologie pour fonctionner en mode thread.

Exemple d'exécution sur 8 threads :

 -pe thread 8 -R y

Cette option va demander d'utiliser l'environnement thread avec un <nombre de coeur> déterminé sur un même noeud pour exécuter votre programme. L'option '-R y' réserve les coeurs au fur et a mesure qu'ils se libèrent.

La commande qhost vous permet de trouver le nombre de coeurs sur un noeud de calcul.

Les différentes queues disponibles et leurs spécificités sont détaillées ici.

Soumettre sur une queue particulière :

qsub -q long.q

Soumettre sur un noeud particulier d'une file connue :

qsub -q short.q@n45

Soumettre sur un noeud particulier :

qsub -l hostname=n55

Soumettre sur un groupe de machines :

qsub -q "*@@allhosts"

Soumettre sur des noeuds de la file long.q disposant de plus de 8 Go de mémoire :

qsub -l big_mem -q long.q

 

Afficher les noeuds de calcul disponibles et leurs ressources.

qhost

Afficher l'état des files d'attente.

qstat
qstat -u "*" 
qstat -f
qstat -g c
Afficher les jobs en attente pour l'utilisateur martin
qstat -u martin -s p

Afficher les jobs en cours de traitement pour l'utilisateur martin

qstat -u martin -s r

Afficher l'état d'un job en erreur (la ligne error peut indiquer la raison de non soumission si le job est en mode Eqw)

qstat -j 165432

Signification des flags sur l'état de la file issu de qstat -f.

a(larm), A(larm), C(alendar suspended), s(uspended), S(ubordinate), d(isabled), D(isabled), E(rror)

 

Menu principal

by Dr. Radut