Gestion des tâches sur le cluster :
Transcription
Gestion des tâches sur le cluster :
Gestion des tâches sur le cluster : Comment utiliser le gestionnaire de batch Introduction La plate-forme GenOuest met à la disposition des scientifiques une grappe de calculateurs composée de 36 machines bi-processeurs (aussi appelées « nœuds »). Afin d’optimiser la répartition des calculs sur les différents nœuds, un gestionnaire de travaux est utilisé : il s’agit de Sun N1 Grid Engine. Il est impératif que les utilisateurs du système soumettent leurs tâches via ce gestionnaire, dont le fonctionnement et les commandes de bases vont être décrites ici. Sun N1 Grid Engine (SGE) est un programme d'équilibrage de charge qui alloue d'une manière optimale les ressources demandées pour l'exécution d'une tâche noninteractive, telles que la mémoire, l'espace disque et les processeurs (CPU). SGE est conçu pour maximiser l'utilisation d'un réseau d'ordinateurs, et réduire au minimum l'interférence entre les diverses tâches exécutées. Pour optimiser son utilisation, notre cluster (genocluster) utilise donc la soumission de travaux par l'intermédiaire de SGE. SGE fonctionne avec des files d'attente, chacune comprenant un certain nombre de noeuds de calcul. Chaque file a des propriétés spécifiques : temps maximum d'exécution, nombre maximums de noeuds, priorités, ... Objectifs du tutoriel Ce document regroupe les commandes et scripts permettant à la fois de lancer les calculs sur le cluster, d’en suivre l’exécution, et d’en comprendre le fonctionnement de base. Ceci s’effectue grâce aux commandes suivantes : - qsub : commande permettant d’envoyer un travail dans une file d'attente, - qstat : commande permettant de consulter l’état des travaux soumis, - qdel : commande permettant de supprimer des travaux soumis, Il existe aussi une interface graphique (qmon) permettant de monitorer l'ensemble des travaux et des files. Elle ne sera pas décrite dans ce document. Page 1/8 Nous allons demander l’analyse d’une séquence par le programme Blast. Afin de procéder à cette analyse, il faut tout d’abord écrire le script qui permettra de lancer cette tâche (ou calcul). Nous verrons ensuite comment lancer ce calcul et suivre sa progression. Script de lancement Nous allons décrire pas à pas comment écrire ce script. La première ligne appelle le shell d’exécution du script : #! /bin/bash Ensuite, les lignes commençant par les caractères #$ sont interprétées directement par le gestionnaire de tâches. Nous pouvons ainsi préciser certaines options concernant la gestion de la tâche : - l’option « –S » permet de spécifier le shell d’exécution - l’option « –M » permet de préciser l’adresse mail de l’utilisateur lançant les travaux - l’option « –m » permet de préciser les étapes qui feront l’objet d’un mail.Il y a 5 options possibles pour –m et elles peuvent être combinées : o b : le début (begin), le mail est envoyé au lancement des travaux, o e : envoi du mail à la fin (end) de l’exécution des travaux, o a : envoi lors de la suppression (abort) d’un travail, o s : envoi lors de la suspension d’un travail, o n : aucun mail n’est envoyé. #$ -S /bin/bash #$ -M [email protected] #$ -m bea La ligne suivante permet d’initialiser l’environnement propre au package Blastall. Le script saura ainsi où trouver les différents programmes Blast, les banques de données, etc… Page 2/8 . /local/env/envncbi.sh Attention ! Il y a un espace entre le point et la chaîne de caractères /local/env/envncbi.sh . La dernière ligne correspond à la commande permettant d’exécuter le Blast : blastall –p blastx –d gppln –i masequence.fasta –o monresultats.blastx Récapitulatif du script : Les lignes commençant par le caractère # ne seront pas interprétées : ce symbole, utilisé seul, permet d’insérer un commentaire dans un « shell script ». Le script sera écrit dans le fichier script.sh (utilisez un éditeur de texte pour le créer) : #! /bin/bash #$ -S /bin/bash #$ -M [email protected] #$ -m bea # initialisation de l’environnement d’exécution de blastall : . /local/env/envncbi.sh # syntaxe de blastall : blastall –p <type de blast> -d <banque de données> -I <sequence en tree> -o <fichier de résultats> blastall –p blastx –d gppln –i masequence.fasta –o monresultats.blastx Lancement du travail Pour soumettre un travail on utilise la commande qsub : le travail est lancé via qsub de la façon suivante : Page 3/8 qsub script.sh Le gestionnaire de batch prend à sa charge la soumission de votre job et le met sur la file d’attente par défaut. Le système valide le lancement du travail par le message « Your job 1320782 (« script.sh ») has been submitted ». Ensuite le job sera exécuté dès qu'il sera éligible et que les ressources demandées seront disponibles. Le numéro contenu dans le message précédent correspond à l’identifiant que le gestionnaire de batch a attribué à la tâche. Cet identifiant pourra être utilisé pour supprimer l’exécution de la tâche, ou pour en suivre le bon déroulement. Toutes les options disponibles concernant la commande qsub peuvent être affichées en utilisant la commande suivante : man qsub Seules les options les plus basiques sont détaillées ici : - Option –cwd : cette option permet de préciser que les fichiers soumis sont dans le répertoire courant, et que les fichiers résultats devront être générés dans ce même répertoire. NB : Il est également possible de spécifier cette option au sein du script en y ajoutant la ligne suivante : #$ -cwd - Option –q : cette option permet de préciser la file d’attente sur lequel le travail doit être soumis. En effet, si le travail lancé est supposé demander un temps de calcul très long, il est nécessaire de le lancer sur une file d’attente prévue à cet effet (nommée long.q) : le travail sera ainsi dirigé vers des nœuds de calcul pour lesquels il n’existe aucune limite de temps d’exécution. Cette option n’est pas utile pour un temps de calcul inférieur à 10 heures. Page 4/8 - Option –N : cette option permet d’attribuer un nom à la tâche soumise. Pour l’exemple donné précédemment, la tâche soumise est nommée automatiquement script.sh. L’utilisation de cette option permettra par exemple de la renommer MonBlast. En utilisant ces différentes options, la commande permettant de lancer notre script devient : qsub –cwd –q long.q –N MonBlast script.sh Une fois qu'une tâche soumise est exécutée, les sorties "standard output" et "standard error" de cette tâche seront redirigées vers des fichiers localisés dans le répertoire d’où la tâche a été lancée par l'utilisateur, et portant par défaut des noms uniques constitués de la façon suivante : nom_de_la_tâche.oNN et nom_de_la_tâche.eNN où : "nom_de_la_tâche" = nom du script soumis par qsub, ou précisé par l’option –N, "o" = standard output, "e" = standard error, "NN" = numéro d'identification de la tâche, alloué par le système de batch. Il est aussi possible de renommer ces fichiers en utilisant les options –o et –e : qsub –o ./mon_repertoire/ma_sortie_standard –e ./mon_repertoire/ma_sortie_erreur script.sh Exécution du travail : Si vous aviez pris soin de renseigner votre adresse de courrier électronique ainsi que l’option « -m b » dans le script, vous recevrez un courrier contenant le message suivant : Job 1320782 (script.sh) Started User = grosquick Queue = batch2.q Host = genouest28-data Start Time = 11/13/2007 15:51:08 Page 5/8 On peut contrôler que le programme a bien été soumis au gestionnaire de batch en utilisant la commande qstat. Cette commande permet d’afficher l’état des travaux soumis ou en attente dans toutes les files, et sur tous les nœuds du cluster : job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------1314586 0.55500 n_d12asa_~ nmaloddo r 11/20/2007 17:51:00 batch2.q@genouest19-data 1 1314591 0.55500 n_d12asa_~ nmaloddo r 11/20/2007 17:51:15 batch2.q@genouest23-data 1 1320782 0.55500 script.sh grosquick r 11/13/2007 15:51:08 batch2.q@genouest28-data 1 1312253 0.55500 QRLOGIN ofilangi r 11/20/2007 10:04:08 batch2.q@genouest26-data 1 Chaque tâche est décrite par un état : ici, toutes les tâches sont dans l’état « r » c’està-dire « en cours d’exécution » (running). Le tableau ci-dessous récapitule la signification des différents états décrits dans qstat : Flag d t r R s Etat deletion transfering running Restarted Suspended S Suspended T threshold qw h waiting hold Signification qdel a été utilisé pour supprimer la tâche Tâche sur le point d’être exécutée Tâche en cours d’exécution L’exécution de la tâche a été relancée Qmod a été utilisé pour suspendre l’exécution de la tâche La file d’attente dans laquelle était le job a été suspendue, donc la tâche est également suspendue L’exécution de la tâche a été suspendue avant sa mise en file d’attente : la file d’attente est pleine Tâche en attente dans la file La tâche est dans l’état suspendu et n’est pas éligible. Elle est aussi peut-être en attente de la fin d’une autre tâche. La commande qstat utilisée seule peut afficher de nombreuses informations qui, pour la plupart, ne concernent pas vos travaux. Vous pouvez utiliser l’option « -u » de qstat qui permet de trier ces informations en fonction de l’utilisateur qui a lancé les travaux. Pour l’exemple donné, le travail script.sh a été lancé par l’utilisateur nommé grosquick. On peut afficher l’état des travaux lancés par grosquick en utilisant la commande : Page 6/8 qstat –u grosquick Ce qui affiche les informations suivantes : job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------1320782 0.55500 script.sh grosquick r 11/13/2007 15:51:08 batch2.q@genouest28-data 1 Toutes les options disponibles concernant la commande qstat peuvent être affichées en utilisant la commande suivante : man qstat Une fois le calcul terminé, et si vous aviez pris soin de renseigner votre adresse de courrier électronique ainsi que l’option « -m e » dans le script, vous recevrez un courrier contenant le message suivant : Job 1320782 (script.sh) Complete User = grosquick Queue = batch2.q@ genouest28-data Host = genouest28-data Start Time = 11/13/2007 15:51:08 End Time = 11/13/2007 15:51:45 User Time = 00:01:14 System Time = 00:00:06 Wallclock Time = 00:00:49 CPU = 00 :01 :20 Max vmem = 81.777M Exit Status =0 Page 7/8 Suppression de travaux Lorsqu’une tâche a été lancée via qsub, il est possible de terminer son exécution - et ce quel que soit son état - en utilisant la commande qdel. Le moyen le plus basique d’utiliser qdel est de lui préciser l’identifiant de la tâche à supprimer. Pour l’exemple, cet identifiant est 1320782 : qdel 1320782 Toutes les options disponibles concernant la commande qdel peuvent être affichées en utilisant la commande suivante : man qdel Seules les options les plus basiques de qdel sont détaillées ici : - Option « -f 1320782 » : permet de forcer la suppression de la tâche ayant l’identifiant 1320782. - Option « -u grosquick » : permet de supprimer toutes les tâches lancées par l’utilisateur grosquick. Pour aller plus loin : la documentation complète de Sun N1 Grid Engine est disponible sur le site de sun ( http://www.sun.com/software/gridware/ ). Page 8/8