Info

HPC resources

To learn more about Baobab, visit https://plone.unige.ch/distic/pub/hpc/baobab_en

To learn more about Scylla, see below.

La machine Scylla

Scylla est une machine parallèle à mémoire distribuée/partagée possédant les caractéristiques suivantes:

  • 40 Intel Westmeres 5500 (Xeon) Hexa-cœurs (240 cœurs disponibles)
  • 960 Go de RAM

Ces ressources sont réparties de la manière suivante sur les 20 nœuds de calcul de Scylla:

  • chaque nœud est composé de 2 Westmeres (12 cœurs par nœud)
  • les 12 cœurs de chaque nœud partagent 24 Go de RAM

Utilisation de Scylla

 

Connexion

Pour utiliser la machine vous devez vous connecter à la machine via le nom Scylla0 avec ssh:

$ ssh scylla0.unige.ch -l login_etudiant

et entrer le mot de passe qui vous a été donné ou utiliser votre mot de passe du CUI. Notez que cette machine est accessible uniquement depuis le réseau interne de l'Université. Si vous voulez vous connecter à cette machine depuis l'extérieur vous devez passer par la machine cuilxa.unige.ch.

Arborescence

L'arborescence de Scylla est un peu différente des autres machines du CUI par le fait que cette dernière ne monte pas votre home du CUI. La conséquence est que lorsque vous vous connectez à Scylla le répertoire dans lequel vous vous trouvez est un home local à la Scylla.

Néanmoins votre home est tout de même accessible et est monté dans /cui/home/xxxxxx est votre nom d'utilisateur du cui. Notez qu'il est normal de ne pas voir son répertoire en listant les répertoires de /cui/home étant donné que les répertoires sont montés lorsque l'on tente d'y accéder.

Le .bashrc

Comme le home de Scylla n'est pas celui du CUI, vous devez modifier votre .bashrc qui se trouve dans votre répertoire local à scylla afin de pouvoir importer les librairies et les outils utiles pour accomplir les projets du cours.

Pour utiliser les compilateurs ainsi que le système de gestion de ressources vous devez ajouter les lignes suivantes:

module load gcc
module load maui
module load torque 
module load openmpi/gcc

Compilation

Pour compiler sur scylla vous pouvez utiliser le compilateur mpicxx qui s'utilise comme le compilateur mpiCC sur le poulailler PC69240.

L'outil TORQUE

Cette page est une brève introduction au système d'ordonnancement des tâches et de gestion des ressources TORQUE (Terascale Open-Source Resource and QUEue Manager). Cet outil permet, entre autres, de:

  • procéder à des soumission automatique de tâches;
  • surveiller l'exécution des tâches;
  • gérer les priorités pour contrôler l'ordre d'exécution de différentes tâches indépendantes.

Cet outil permet donc de gérer la répartition des ressources disponible sur une machine entre différentes tâches.

Scripte d'exécution

Pour exécuter votre programme sur une des machines parallèles vous devez le soumettre au système de gestion de ressources de la machine. La soumission d'un job passe par la création d'un script et l'utilisation du programme qsub auquel vous passez votre scripte en argument.

Temps d'exécution et ressources

Les scriptes passé au système de gestion de ressources doit contenir au minimum les informations suivantes:

  • le temps d'exécution maximal de votre programme;
  • le nombre de ressources nécessaires à votre programme;
  • la commande exécutant votre programme.

Les informations sont soumises sous la forme de commentaires dans votre scripte que Torque pourra interpréter. La forme à utiliser pour spécifier ces informations est

#PBS -x name/value

name/value est le nom et/ou la valeur de l'option que l'on souhaite assigner:

#PBS -l walltime=04:00:00
#PBS -l nodes=2:ppn=8
#PBS -q spc

Dans ce cas précis walltime est le temps maximal que peut prendre votre programme à s'exécuter au format hh:mm:ss. Passer le délais du walltime le système tuera votre job.

L'option nodes=x:ppn=y permettent de spécifier le nombre le nombre de nœuds (x) et de cœurs par nœuds (y) que vous votre programme peut utiliser.

Dans l'exemple ci-dessus on spécifie au gestionnaire de ressource que l'on va utiliser 8 cœurs et 2 nœuds, c'est-à-dire que l'on aura à disposition un total de 16 unités de calculs. Vous devez prendre en compte la manière dont sont répartis les unités de calcul dans la machine.

Par exemple si chaque nœud d'une machine est composé de 3 processeurs quadri-cœurs (un total 12 cœurs) et que vous voulez utiliser 36 cœurs, vous devez réserver 3 nœuds et 12 cœurs par nœud. Ce qu'il faut retenir c'est que pour réserver les ressources correctement il est important de comprendre comment la machine est construite.

La ligne #PBS -q spc permet de spécifier la file d'attente à utiliser. Dans ce cas le nom de la file est spc. Les étudiants doivent utiliser la file d'attente nommée etu sur scylla et default sur PC69240.

Sortie

Lorsqu'un programme est exécuter par Torque les sorties standard et d'erreur sont redirigées automatiquement vers deux fichiers dont les noms sont

  • le nom_du_script.sh concaténé avec .o concaténé avec le numéro du job assigné par Torque pour la sortie standard
  • le nom_du_script.sh concaténé avec .e concaténé avec le numéro du job assigné par Torque pour la sortie d'erreur

Par exemple si l'identifiant associé au job est 7997 et que le scripte fourni à Torque est myscript.sh, les fichiers de sortie se nommeront myscript.o7997 et myscript.e7997. Notez que le système informe de l'identifiant du job lorsque ce dernier lui est soumis.

Il est donc normal que vous n'ayez pas d'affichage à l'écran lorsque votre programme est exécuté. Toutefois il est possible de spécifier le nom des fichier de sortie de sorte à ce que ces derniers ne contiennent pas le nom du script mais un nom de votre choix:

#PBS -N nom_de_la_sortie

Exécution de la tâche

Pour que TORQUE exécute votre tâche, il suffit de spécifier dans le script quelle est la commande à utiliser pour exécuter votre tâche:

# IMPORTANT: toujours se placer dans le répertoire de travail
#            ceci même si le script se trouve déjà dans le bon 
#            répertoire
cd /home/my/working/directory
 
# commande à lancer pour exécuter la tâche
mpirun -np 16 ./my_exec 1204

Dans cet exemple le programme à exécuter compilé se nomme my_exec que je souhaite exécuter avec mpirun afin d'avoir une exécution parallèle de mon programme sur 16 cœurs. On peut aussi passer les arguments nécessaires au programme, comme c'est le cas ici avec la valeur 1204. Notez qu'il est aussi très important de ne pas oublier pas de vous placer dans votre répertoire de travail (utilisez la commande cd).

Utilisation de Torque

Enfin, pour pouvoir exécuter votre programme, vous devez simplement faire appel à Torque avec:

$qsub my_script.sh

qui, sur Scylla, produit la sortie suivante:

7997.scylla0.cm.cluster

où 7997 est le numéro du job qui a été soumis.

Les commandes suivantes vous permette de connaître l'état de la file d'attente ainsi que des jobs que vous avez soumis:

  • qstat qui vous donne l'état de vos jobs
  • showq qui vous liste tous les jobs de la machine ainsi que leur état

Sur Scylla la commande qstat donne:

$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
7997.scylla0              my_script.sh     username               0 R spc

qui fournit, entre autre, le numéro du job (Job id) et l'état (S). Habituellement on a affaire à deux états:

  • R qui informe que le job est en cours d'exécution;
  • Q qui informe que le job est en attente ou bloqué.

La commande showq donne sur la même machine:

$ showq
ACTIVE JOBS--------------------
JOBNAME            USERNAME      STATE  PROC   REMAINING            STARTTIME

7997               username    Running    16  4:00:00:00  Sat Aug  6 11:37:20

     1 Active Job       16 of  240 Processors Active (6.67%)
                         2 of   20 Nodes Active      (10.00%)

IDLE JOBS----------------------
JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME


0 Idle Jobs

BLOCKED JOBS----------------
JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME

Cette commande fournit des informations sur les jobs qui peuvent se trouver dans trois états différents.

  • Active jobs liste les jobs en cours d'exécution sur la machine. Les détails précisent quelles sont les ressources utilisées, le temps d'exécution maximal du job (walltime) et le nom de l'utilisateur qui a lancé le job.
  • Idle jobs liste les jobs en attente d'être exécuter. S'il n'y a pas assez de ressources disponibles un job est mis en attente. Notez que tous les jobs passent par cet état avant d'être exécutés.
  • Blocked jobs liste les jobs qui sont bloqués sur la machine et ne seront probablement jamais exécuter. Ceci peut se produire si, par exemple, vous demandez plus de ressources que la machine peut fournir.

La commande qdel vous permet de supprimer un job de la file d'attente ou en cours d'exécution. La commande qdel prend en paramètre le numéro d'identification du job. Ce numéro est affiché lors de la soumission du job ou est visible avec les deux commandes précédentes. Dans le cas des exemples de commande précédents il faudrait utiliser la commande comme ceci:

qdel 7997

Le script complet

Voici le script complet. Notez que les ressources demandée à TORQUE correspondent aux ressources utilisée par mpirun.

#!/bin/sh
#PBS -l walltime=04:00:00
#PBS -l nodes=2:ppn=8
#PBS -N nom_de_la_sortie
 
# IMPORTANT: toujours se placer dans le répertoire de travail
#            ceci même si le script se trouve déjà dans le bon 
#            répertoire
cd /home/my/working/directory
 
# commande à lancer pour exécuter la tâche
mpirun -np 16 ./my_exec 1204