Moab

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Cette page contient des modifications qui ne sont pas marquées pour la traduction.

Autres langues :anglais 100% • ‎français 100%

Sommaire

Généralités

Moab est un ordonnanceur de tâches développé par Adaptive Computing. L'ordonnanceur interagit avec un gestionnaire de ressources, souvent Torque, afin de déterminer quels nœuds de calcul sont libres et peuvent exécuter des tâches. Il détermine, selon un calcul de priorité, quelle tâche sera la prochaine à s'exécuter.

Moab est utilisé par les supercalculateurs Colosse et Guillimin, ainsi que par plusieurs autres au Canada. Moab est aussi l'ordonnanceur utilisé par beaucoup de gros centres de calcul à travers le monde, dont Lawrence Livermore National Lab, qui a d'ailleurs créé un bon tutoriel pour ses utilisateurs.


Utilisation

Tel qu'expliqué sur la page Exécuter une tâche, l'interaction avec Moab se passe généralement par un fichier de soumission.

Soumission de tâches : msub

msub est le pendant Moab de la commande qsub de Torque. Elle accepte les mêmes arguments, mais en ajoute certains. La liste des arguments de la commande msub peut être obtenue via sa page de manuel, ou encore sur le site web d'Adaptive Computing.

Toutes les options de msub peuvent être spécifiées soit via une ligne

#PBS option

dans un script de soumission, soit directement via la ligne de commande

[nom@serveur $] msub option


Dans les sous-sections ci-dessous, nous révisons certaines des options importantes de msub.

Nom de la tâche -N

Chaque tâche soumise possède un nom, qui permet de la distinguer des autres tâches. Utiliser un nom significatif vous permettra de facilement identifier vos tâches.

Compte associé -A

L'option -A permet de spécifier le compte dans lequel sera comptabilisée la tâche. Il s'agit normalement du RAPI de votre groupe (de la forme abc-123-aa).

Ressources nécessaires -l

L'option -l permet de lister les ressources nécessaires pour la tâche. Plusieurs ressources peuvent être listées.

Ressource Description Exemple Commentaires
walltime Temps requis, en secondes -l walltime=300 Vous pouvez aussi spécifier en format [[[dd]:[hh]:[mm]]:[ss]. Par exemple, pour 48 heures : -l walltime=48:00:00.
nodes=x:ppn=y Nombre de nœuds et cœurs par nœud. -l nodes=2:ppn=8
feature=xxxx Fonctionnalité particulière à un nœud donné (voir particularités des serveurs ci-dessous). -l feature='48g'
procs=x Nombre de cœurs requis. -l procs=32 Attention : avec cette option, rien ne vous garantit la répartition des processeurs sur les nœuds.
gres=... Ressource générique. -l gres=matlab:1 Cette option est parfois utilisée dans Moab pour identifier des licences requises.

Spécifier l'emplacement des fichiers de sortie

Par défaut, les fichiers de sortie pour une tâche se retrouvent au même endroit où la tâche a été créée, ce qui n'est pas toujours souhaitable.

Il est possible de spécifier le chemin où l'on veut effectuer la sortie à l'aide des options suivantes :

  • -o permet de spécifier l'emplacement du flot de sortie standard (stdout).
  • -e permet de spécifier l'emplacement du flot de sortie d'erreur (stderr).

Par exemple :

#PBS -o $HOME/job.out
#PBS -e $HOME/job.err


Notifications par courriel : -m et -M

Les options suivantes permettent de recevoir une notification par courriel au sujet des tâches soumises :

  • -M : adresse courriel du destinataire. On peut spécifier plusieurs adresses, en les séparant par des virgules.
  • -m : en quelles circonstances envoyer un courriel :
    • b = lorsque la tâche débute
    • e = lorsque la tâche se termine
    • a = lorsque la tâche est avortée

Exemple : envoyer un courriel à utilisateur@adresse.ca lorsque la tâche débute, se termine, ou est avortée.

#PBS -M utilisateur@adresse.ca
#PBS -m bea

Soumission de tâches par lots (array lists)

Note : cette fonctionnalité n'est pas activée sur tous les serveurs.

Toutes les techniques sus-mentionnées peuvent également être utilisées pour soumettre des tâches en lots en utilisant les « array lists ». Cela est particulièrement utile lorsque l'on effectue du parallélisme de données, c'est-à-dire de rouler la même application avec de multiples jeux de données. L'option « -t » de msub spécifie combien d'instances démarrer. Moab va alors créer une tâche avec de multiples sous-tâches, chaque tâche s'occupant d'une instance de l'application. Plusieurs jeux de données différents peuvent être configurés en utilisant la variable $MOAB_JOBARRAYINDEX, tel que :


Fichier : soumet-matacheenlot.sh
#!/bin/bash
#PBS -N MaTacheEnLot
#PBS -A abc-123-aa
#PBS -l nodes=1:ppn=8
#PBS -l walltime=7200
#PBS -t [1-120]%10
/chemin/vers/mon/programme /chemin/vers/fichier/de/donnees/$MOAB_JOBARRAYINDEX


Dans ce dernier exemple, la ligne « #PBS -t [1-120]%10 » spécifie à Moab qu'il doit démarrer les tâches 1 à 120, et en exécuter un maximum de 10 à la fois. La variable $MOAB_JOBARRAYINDEX contient le numéro de la tâche et peut être utilisée pour lire des fichiers différents pour chaque tâche.

Si l'on veut démarrer les tâches 2, 4, 6, 8, on pourrait donner comme paramètre :

#PBS -t [2-8:2]

Si l'on veut démarrer seulement certaines tâches en les énumérant, il s'agit d'utiliser la syntaxe suivante :

#PBS -t [4,7,8,15]

Il faut noter qu'il n'est pas possible de passer la variable $MOAB_JOBARRAYINDEX à une option de Moab, c'est-à-dire sur une ligne commençant par « #PBS, car ces lignes sont lues avant que la variable $MOAB_JOBARRAYINDEX n'ait été créée.

Si on spécifie les options -e ou -o, le fichier de sortie contiendra les sorties de toutes les tâches qui sont dans la liste. Ce n'est habituellement pas ce qui est désiré. Par contre, il est possible d'utiliser des caractères de remplacement pour obtenir le numéro de la tâche dans le nom des fichiers de sortie. Les caractères %J seront remplacés par le numéro de la tâche, tel que retourné par Moab lors de la soumission, tandis que les caractères %I seront remplacés par le numéro de la tâche. Ainsi si on ajoute la lignes suivantes au fichier de soumission :

#PBS -o MaTacheEnLot-%I.out
#PBS -e MaTacheEnLot-%I.err

On obtient des fichiers de sorties comme ceci : MaTacheEnLot-1.err MaTacheEnLot-1.out MaTacheEnLot-2.err MaTacheEnLot-2.out ...

Contrôle des tâches : mjobctl

La commande mjobctl permet de contrôler des tâches déjà soumises. Elle combine en une seule commande les qdel ou canceljob, en plus de permettre de modifier ou de mettre une tâche en attente.

Annuler une tâche : -c

Pour annuler une tâche, exécutez simplement

[nom@serveur $] mjobctl -c <jobid>


Cette commande essaie d'effacer la tâche de façon propre. Le gestionnaire de ressources enverra ainsi un signal SIGTERM, suivi d'un SIGKILL à votre tâche. Votre tâche peut intercepter le SIGTERM afin par exemple de sauvegarder son état sur disque avant de terminer.

Il peut arriver que cette commande échoue, par exemple si le nœud de calcul qui exécutait la tâche est injoignable (il a planté par exemple). Dans ce cas, vous pouvez forcer une suppression de la tâche via

[nom@serveur $] mjobctl -F <jobid>



Mettre/enlever une tâche en attente : -h et -u

Vous pouvez mettre une tâche en attente ou la remettre dans la file active grâce aux options -h (hold) et -u (unhold). Par exemple

[nom@serveur $] mjobctl -h <jobid>


empêchera l'exécution d'une tâche, alors que

[nom@serveur $] mjobctl -u <jobid>


la remettra dans la file d'attente.

Contrôler des groupes de tâches : -w

Vous pouvez exécuter une commande sur un groupe de tâches avec l'option -w <ATTR>=<VAL>. ATTR peut prendre plusieurs valeurs (voir la documentation de mjobctl pour la liste). Un exemple notable est pour contrôler toutes vos tâches. Par exemple, pour annuler toutes vos tâches, vous pouvez exécuter

[nom@serveur $] mjobctl -c -w user=$USER


Liste des tâches : showq

La commande showq permet d'afficher la file d'attente de nos tâches. Plusieurs options sont disponibles. En voici quelques-unes :

Option Description
-r Affiche les tâches en cours d'exécution
-i Affiche la liste des tâches en attente (par manque de ressources)
-b Affiche la liste des tâches en attente (bloquées)
-c Affiche la liste des tâches complétées
-w user=usager Affiche les tâches de l'usager usager.
-help Affiche la liste des options disponibles
--blocking Assure la synchronicité de la commande showq avec le serveur moab.

La liste complète des options est décrite dans la documentation de Moab. Notez que showq est une commande qui est mise en cache. Elle peut être désynchronisée parfois. Pour assurer la synchronisation, ajoutez l'option « --blocking ».

Liste des états des tâches

État Description Explication
R Running La tâche exécute présentement votre application.
S Starting Le système a lancé l'exécution de la tâche et exécute présentement des tâches pré-démarrage.
C Complete La tâche a terminé son exécution.

Diagnostic des tâches : checkjob

La commande checkjob permet d'obtenir beaucoup d'information sur une tâche : la liste des nœuds utilisés, les ressources utilisées, les variables d'environnement, les fichiers d'erreur et de sortie, le script de soumission, etc. Cette commande a deux niveaux de verbosité. Vous pouvez ainsi appeler

[nom@serveur $] checkjob <jobid>


[nom@serveur $] checkjob -v <jobid>


[nom@serveur $] checkjob -v -v <jobid>


Vous pouvez aussi obtenir la liste des nœuds d'une tâche avec la commande

[nom@serveur $] mjobctl -q hostlist <jobid>


Variables d'environnement

Moab définit un certain nombre de variables d'environnement. Afin qu'elles soient disponibles dans l'environnement de votre tâche, vous devez ajouter l'option

#PBS -E

à votre script de soumission ou l'option -E à votre ligne de commande de soumission. Sur Colosse, cette option est activée par défaut.

Nom de la variable Description Exemple
MOAB_JOBNAME Nom de la tâche tel que spécifié par l'option -N ma_tache
MOAB_USER Nom d'usager qui exécute la tâche mon_nom
MOAB_TASKMAP Liste des nœuds et nombre de cœurs exécutant la tâche r106-n3:8&r102-n3:8
MOAB_CLASS Nom de la classe (queue) dans laquelle s'exécute la tâche short
MOAB_PROCCOUNT Nombre de processeurs exécutant la tâche 16
MOAB_GROUP Nom du groupe unix à l'intérieur duquel s'exécute la tâche mon_groupe
MOAB_NODELIST Liste des nœuds impliqués dans la tâche r106-n3&r102-n3
MOAB_ACCOUNT Nom du compte (projet) à l'intérieur duquel s'exécute la tâche. Il s'agit du projet dans lequel sera comptabilisé le temps utilisé. xxx-yyy-zz
MOAB_NODECOUNT Nombre de nœuds exécutant la tâche 2
MOAB_JOBID Numéro de tâche attribué par Moab. S'il y a un numéro de sous-tâche, il est inscrit entre crochets. 10238401[84]
MOAB_JOBARRAYINDEX Numéro de sous-tâche 84
MOAB_QOS Nom de la qualité de service (Quality of service) attribuée à la tâche Alloc

Particularités de chaque serveur

Colosse

Paramètres obligatoires

Sur Colosse, les paramètres -N, -A, -l walltime= et -l nodes=x:ppn=8 sont obligatoires. Notez en particulier que Colosse requiert que vos tâches utilisent exactement huit cœurs de calcul sur chacun des nœuds. En d'autres mots, Colosse ne permet pas l'utilisation partielle de nœuds. Un fichier de soumissions sur Colosse débutera ainsi invariablement par

Fichier : script_soumission.sh
#!/bin/bash
#PBS -N MaTache
#PBS -A abc-123-aa
#PBS -l walltime=300
#PBS -l nodes=1:ppn=8
cd "${PBS_O_WORKDIR}"


La commande « cd ${PBS_O_WORKDIR} » est nécessaire pour s'assurer que la tâche s'exécute dans le répertoire à partir duquel le script a été soumis.

Fichiers de sortie et d'erreur par défaut

Sur Colosse, les fichiers de sortie et d'erreur de la tâche sont définis par défaut aux ${MOAB_JOBID}.out et ${MOAB_JOBID}.err, dans le répertoire d'exécution de la tâche. Vous pouvez changer ces valeurs avec les options usuelles -o et -e.

Queue de soumission

Il n'est pas nécessaire de spécifier une queue de soumission sur Colosse. La queue de soumission est déterminée automatiquement en fonction du temps (walltime), du nombre de nœuds, ainsi que potentiellement d'autres paramètres.

Attribut ckpt

Certains nœuds de Colosse sont réservés à des tâches qui effectuent des sauvegarde périodiques (checkpointing). Lorsque des nœuds de calcul sont remis en production suite à une maintenance ou une réparation, l'équipe de Colosse exécute une batterie de tests sur ceux-ci afin de s'assurer qu'ils sont stables. Néanmoins, les tests pouvant être exécutés sont limités par le temps et par notre imagination, il faut éventuellement prendre la décision de les remettre en production. Afin de rendre ces nœuds disponibles le plus rapidement possible, nous mettons maintenant à votre disposition ces nœuds (après nos tests) pour les tâches qui réalisent des sauvegardes périodiques (checkpointing). Si votre tâche se sauvegarde périodiquement, vous pourriez ainsi avoir accès à plusieurs centaines de cœurs supplémentaires. Comme ces nœuds sont testés intensivement (mémoire, processeurs et réseautique), la probabilité qu'ils plantent demeure faible.

Pour indiquer à Moab que vous désirez utiliser ces nœuds, ajoutez la ligne suivante à votre fichier de soumission :

#PBS -l gattr=ckpt

Fonctionnalités particulières de certains nœuds

Sur Colosse, nous avons une seule fonctionnalité (feature) particulière à certains nœuds, pour les nœuds de 48 Go de mémoire vive. Pour demander des nœuds de 48 Go, ajoutez la ligne

#PBS -l feature='48g'

à votre fichier de soumission.

colosse-info

Sur Colosse, la commande colosse-info permet d'obtenir de l'information sur l'utilisation de votre groupe ainsi que sur l'utilisation globale de la grappe de calcul. Par exemple,

[nom@serveur $] colosse-info 
 Your Rap IDs are: bwg-974-aa colosse-users exx-883-aa exx-883-ab
Total number of jobs currently running: 385
Total number of slots in use: 6848/7216 (94.00%). Reserved for checkpointing jobs: 496
You are currently using 0 slots for 0 job(s).
RAPI bwg-974-aa: 0 used cores / 10 allocated cores (recent history)
RAPI colosse-users: 5.73178 used cores / 77 allocated cores (recent history)
RAPI exx-883-aa: 0.00397147 used cores / 10 allocated cores (recent history)
RAPI exx-883-ab: 0 used cores / 10 allocated cores (recent history)


Questions fréquemment posées

Voir la page FAQ Moab Colosse, spécifique à Colosse.

Guillimin

Helios

Paramètres obligatoires

Sur Helios, les paramètres -A, -l walltime= et -l nodes=x:gpus=y sont obligatoires. Notez en particulier que, pour éviter que deux usagers se partagent le même bus PCI, il est requis de demander des multiples de 2 GPU. Notez aussi que l'option ppn=z est interdite. Automatiquement, pour chaque paire de GPUs demandées, vous obtiendrez 5 cœurs, soit la moitié d'un processeur.

Fichier : script_soumission.sh
#!/bin/bash
#PBS -N MaTache
#PBS -A abc-123-aa
#PBS -l walltime=300
#PBS -l nodes=1:gpus=2
cd "${PBS_O_WORKDIR}"


La commande « cd ${PBS_O_WORKDIR} » est nécessaire pour s'assurer que la tâche s'exécute dans le répertoire à partir duquel le script a été soumis.

Demande de GPUs

Le nombre de GPUs requis par nœud de calcul est spécifié via l'option -l nodes=x:gpus=y. Par exemple, la requête -l nodes=1:gpus=4 vous allouera un nœud ainsi que quatre GPUs et 10 processeurs sur ce nœud. Les nœuds d'Helios possèdent 8 GPUs et 2 processeurs de 10 cœurs chacun. Vous pouvez donc demander au maximum 8 GPUs pour un nœud. Si vous désirez deux nœuds complets, vous demanderez -l nodes=2:gpus=8.

Fichiers de sortie et d'erreur par défaut

Sur Helios, les fichiers de sortie et d'erreur de la tâche sont définis par défaut aux ${MOAB_JOBID}.out et ${MOAB_JOBID}.err, dans le répertoire d'exécution de la tâche. Vous pouvez changer ces valeurs avec les options usuelles -o et -e.

Queue de soumission

Il n'est pas nécessaire de spécifier une queue de soumission sur Helios. La queue de soumission est déterminée automatiquement en fonction du temps (walltime) et du nombre de GPUs.

helios-info

Sur Helios, la commande helios-info permet d'obtenir de l'information sur l'utilisation de votre groupe ainsi que sur l'utilisation globale de la grappe de calcul. Par exemple,

[nom@serveur $] helios-info 
 Your Rap IDs are: colosse-users six-213-ad exx-883-ac bwg-974-aa exx-883-ab exx-883-aa
Total number of jobs currently running: 0
Total number of GPUs in use: 0/88 (0%).
You are currently using 0 GPUs for 0 job(s).
RAPI colosse-users: 0 used GPUs / 0.396 allocated GPUs (recent history)
RAPI six-213-ad: 0.305774 used GPUs / 0.396 allocated GPUs (recent history)
RAPI exx-883-ac: 0 used GPUs / 0.396 allocated GPUs (recent history)
RAPI bwg-974-aa: 0 used GPUs / 0.396 allocated GPUs (recent history)
RAPI exx-883-ab: 0 used GPUs / 0.396 allocated GPUs (recent history)
RAPI exx-883-aa: 0 used GPUs / 0.396 allocated GPUs (recent history)


Références


Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager