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é) ?
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
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
qhost
Afficher l'état des files d'attente.
qstat qstat -u "*"
qstat -f qstat -g c
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)