pages tagged tychoDIOhttps://dio.obspm.fr/tags/tycho/DIOikiwiki2024-02-06T10:13:54ZGrappe de calcul internehttps://dio.obspm.fr/Calcul/tycho/2024-02-06T10:13:54Z2013-09-23T13:18:27Z
<h1>Description générale</h1>
<h2>Présentation du service</h2>
<p>La DIO met à la disposition des utilisateurs une grappe de calcul et
de traitement de données : tycho.</p>
<p>L'accès à cette machine est ouvert à tous les membres de l'Observatoire
néanmoins il est nécessaire d'en faire la demande. Pour cela envoyez un mail à </p>
<pre><code>admin.dio@obspm.fr
</code></pre>
<p>Nous invitons tous les utilisateurs à lire les paragraphes ci-dessous
et à suivre ces recommandations. Pour une utilisation optimale des
moyens de calcul, les utilisateurs doivent soumettre leurs jobs via le
système de gestionnaire de tâches
<a href="https://slurm.schedmd.com/documentation.html">SLURM</a> (Simple Linux Utility
for Resource Management).</p>
<p>Les utilisateurs doivent s'inscrire à la liste de diffusion <a href="https://sympa.obspm.fr/wws/info/mpopm">mpopm</a> (machine parallèle de l'observatoire de Paris-Meudon) pour être informé des arrêts programmés de la grappe (mise à jour système, coupure électrique...) et des mises à jour logiciels.</p>
<p>N'hésitez pas à nous faire part de votre avis concernant l'utilisation du système. De nouveaux logiciels seront installés sur demande.</p>
<h2>Description et caractéristiques techniques de la grappe</h2>
<p>La grappe est actuellement constituée de :</p>
<ul>
<li><p>1 frontale : <strong>tycho</strong></p>
<pre><code> pour l'édition, la compilation et la soumission des jobs
pour travailler en interactif
</code></pre></li>
<li><p>80 noeuds :</p></li>
</ul>
<table>
<thead>
<tr>
<th><strong>Noeud</strong></th>
<th><strong>Nb coeurs</strong></th>
<th><strong>Processeur</strong></th>
<th><strong>Mémoire/noeud</strong></th>
<th><strong>Disque local</strong></th>
<th><strong>GPU</strong></th>
<th><strong>Mise en service</strong></th>
<th><strong>feature</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>tycho[01-16]</strong></td>
<td> 16</td>
<td> Intel Xeon E5-2670 à 2.60 GHz</td>
<td> 64 Go</td>
<td> 1,7 To</td>
<td></td>
<td> Octobre 2013</td>
<td> tycho2013</td>
</tr>
<tr>
<td><strong>tycho[17-20]</strong></td>
<td> 16</td>
<td> Intel Xeon E5-2650 v2 à 2.60 GHz</td>
<td> 64 Go</td>
<td> 0,9 To</td>
<td></td>
<td> Juin 2014</td>
<td> tycho2013</td>
</tr>
<tr>
<td><strong>tycho[21-24]</strong></td>
<td> 16</td>
<td> Intel Xeon E5-2640 v3 à 2.60 GHz</td>
<td> 64 Go</td>
<td> 1,7 To</td>
<td></td>
<td> Octobre 2015</td>
<td>tycho2015</td>
</tr>
<tr>
<td><strong>tycho[27,28]</strong></td>
<td> 24</td>
<td> Intel Xeon E5-2690 v3 à 2.6 GHz</td>
<td> 256 Go</td>
<td> 1,7 To</td>
<td></td>
<td> Janvier 2016</td>
<td>tycho2015</td>
</tr>
<tr>
<td><strong>tycho[29-32]</strong></td>
<td> 16</td>
<td> Intel Xeon E5-2640 v3 à 2.60 GHz</td>
<td> 64 Go</td>
<td> 1,7 To</td>
<td></td>
<td> Mars 2016</td>
<td> tycho2015</td>
</tr>
<tr>
<td><strong>tycho[33-36]</strong></td>
<td> 24</td>
<td> Intel Xeon E5-2650 v4 à 2.20 GHz</td>
<td> 128 Go</td>
<td> 1,7 To</td>
<td></td>
<td> Septembre 2017</td>
<td> tycho2015</td>
</tr>
<tr>
<td><strong>tycho[37-44]</strong></td>
<td> 16</td>
<td> Intel Xeon Silver 4110 à 2.10GHz</td>
<td> 96 Go</td>
<td> 0,7 To</td>
<td></td>
<td> Décembre 2017</td>
<td> tycho2015</td>
</tr>
<tr>
<td><strong>tycho[45-48]</strong></td>
<td> 24</td>
<td> Intel Xeon Gold 5118 à 2.30GHz</td>
<td> 128 Go</td>
<td> 1,6 To</td>
<td></td>
<td> Décembre 2017</td>
<td> tycho2015</td>
</tr>
<tr>
<td><strong>tycho[49-52]</strong></td>
<td> 24</td>
<td> Intel Xeon Gold 5118 à 2.30GHz</td>
<td> 192 Go</td>
<td> 1,6 To</td>
<td></td>
<td> Décembre 2017</td>
<td> tycho2015</td>
</tr>
<tr>
<td><strong>tycho[53-56]</strong></td>
<td> 28</td>
<td> Intel Xeon Gold 5120 à 2.20GHz</td>
<td> 96 Go</td>
<td> 1,6 To</td>
<td></td>
<td> Novembre 2018</td>
<td> tycho2020</td>
</tr>
<tr>
<td><strong>tycho57</strong></td>
<td> 16</td>
<td> Intel Xeon Bronze 3106 à 1.70GHz</td>
<td> 96 Go</td>
<td> 3.4 To</td>
<td> 2 Tesla P40</td>
<td> novembre 2018</td>
<td> tycho2020</td>
</tr>
<tr>
<td><strong>tycho58</strong></td>
<td> 24</td>
<td> Intel Xeon Silver 4214 à 2.20GHz</td>
<td> 192 Go</td>
<td> 1.7 To</td>
<td> 3 Tesla V100-PCIE-32GB</td>
<td> octobre 2019</td>
<td> tycho2020</td>
</tr>
<tr>
<td><strong>tycho[59-62]</strong></td>
<td>32</td>
<td> Intel Xeon Gold 5120 à 2.30GHz</td>
<td> 96 Go</td>
<td> 1,6 To</td>
<td></td>
<td> Janvier 2020</td>
<td> tycho2020</td>
</tr>
<tr>
<td><strong>tycho[63-66]</strong></td>
<td>48</td>
<td> Intel Xeon Gold 5220R à 2.20GHz</td>
<td> 192 Go</td>
<td> 1,5 To</td>
<td></td>
<td> Juin 2020</td>
<td> tycho2020</td>
</tr>
<tr>
<td><strong>tycho[67-70]</strong></td>
<td>48</td>
<td> Intel Xeon Gold 5220R à 2.20GHz</td>
<td> 192 Go</td>
<td> 1,5 To</td>
<td></td>
<td> Mars 2021</td>
<td> tycho2021</td>
</tr>
<tr>
<td><strong>tycho[71-74]</strong></td>
<td>48</td>
<td> Intel Xeon Gold 5220R à 2.20GHz</td>
<td> 192 Go</td>
<td> 1,5 To</td>
<td></td>
<td> Mars 2022</td>
<td> tycho2022</td>
</tr>
<tr>
<td><strong>tycho[75-78]</strong></td>
<td>48</td>
<td> Intel Xeon Gold 5220R à 2.20GHz</td>
<td> 192 Go</td>
<td> 1,5 To</td>
<td></td>
<td> Mars 2022</td>
<td> tycho2022</td>
</tr>
<tr>
<td><strong>tycho[79-82]</strong></td>
<td>32</td>
<td> Intel Xeon Silver 4314 à 2.40GHz</td>
<td> 256 Go</td>
<td> 1,5 To</td>
<td></td>
<td> Octobre 2022</td>
<td> tycho2022</td>
</tr>
</tbody>
</table>
<h2>Logiciels et accès</h2>
<p>Tous les noeuds de calcul sont d'un point de vue système parfaitement
identiques. Si les <a href="https://dio.obspm.fr/Calcul/logiciels_pour_tycho/">logiciels scientifiques</a> dont vous avez besoin ne
sont pas encore disponibles sur ces machines, signalez-le mail à la
DIO (<a href="mailto:admin.dio@obspm.fr">admin.dio@obspm.fr</a>). Nous vous
demandons de ne pas installer de logiciel dans votre espace de
stockage personnel.</p>
<p>L'utilisation de cette grappe est possible pour toute personne ayant
un <a href="https://dio.obspm.fr/Syst%C3%A8me_et_r%C3%A9seau/Comptes_et_adresses_IP/">compte durable DIO</a>
(c'est-à-dire dans l'annuaire LDAP commun, utilisé aussi pour la
messagerie et l'accès sans-fil).</p>
<p>Il est possible d'y accéder (depuis l'intérieur du réseau de
l'Observatoire) par les outils <code>ssh</code>, avec donc le même identifiant de
login et le même mot de passe que pour la messagerie ou l'accès
sans-fil. Pour cela utilisez, par exemple, la commande suivante :</p>
<pre><code>ssh -X tycho.obspm.fr
</code></pre>
<p>Pour le transfert de fichiers, depuis votre poste de travail vers ces
machines, ou vice et versa, vous pouvez utiliser des outils comme
<code>scp</code>, <code>sftp</code> ou <code>rsync</code>.</p>
<h2>Espace de stockage</h2>
<p>Chaque utilisateur possède des espaces de stockage :</p>
<p><code>/</code><strong><code>obs</code></strong><code>/son_login</code></p>
<ul>
<li>sauvegarde une fois par jour, en rotation sur 14 occurrences</li>
<li>à utiliser pour y mettre les fichiers produits par l'utilisateur
lui-même : fichiers bureautiques, programmes, scripts, etc... En
bref tout ce qui n'est pas reproductible par calcul ou traitement,
et qui a beaucoup de valeur</li>
<li>quota de 30 Go</li>
</ul>
<p><code>/</code><strong><code>data</code></strong><code>/son_login</code></p>
<ul>
<li>sauvegarde une fois par semaine, en rotation sur 4 occurrences</li>
<li>à utiliser pour y mettre les données consolidées avant ou après
calcul et traitement ; autrement dit des choses qui ne bougent pas
forcément beaucoup une fois qu'elles existent, mais qui ont de la
valeur, car produit d'un long traitement</li>
<li>quota de 60 Go (augmentable sur demande motivée)</li>
</ul>
<p><code>/</code><strong><code>poubelle</code></strong><code>/son_login</code> :</p>
<ul>
<li>pas de sauvegarde</li>
<li>suppression après 120 jours des fichiers non modifiés</li>
<li>à utiliser pour des grosses manipulations de fichiers temporaires :
désarchivage/archivage, transfert avec d'autres machines extérieures
à la DIO, fichiers intermédiaires dans une série de traitements,
etc.</li>
<li>autrement dit, un gros passe-plats et espace tampon</li>
<li>pas de quota</li>
</ul>
<p><code>/</code><strong><code>scratch</code></strong><code>/son_login</code> :</p>
<ul>
<li>pas de sauvegarde</li>
<li>les fichiers datant de plus de 20 jours sont régulièrement effacés</li>
<li>espace non partagé entre les serveurs de calcul</li>
<li>à utiliser sans réserve pour les fichiers temporaires créés lors de
l'exécution d'un calcul</li>
<li>pas de quota, mais demande de déplacement à la fin du job, de
manière à laisser ces espaces libres pour les calculs à venir des
collègues</li>
</ul>
<p><code>/</code><strong><code>scratch2</code></strong><code>/son_login</code> :</p>
<ul>
<li>espace partagé entre les noeuds Tycho, à la différence de /scratch</li>
<li>pas de sauvegarde</li>
<li>les fichiers datant de plus de 20 jours sont régulièrement effacés</li>
<li>à utiliser sans réserve pour les fichiers temporaires créés lors de
l'exécution d'un calcul</li>
<li>pas de quota, mais demande de déplacement à la fin du job, de
manière à laisser ces espaces libres pour les calculs à venir des
collègues</li>
</ul>
<p>Nous attirons votre attention sur le fait que l'espace <code>$HOME</code> (=
<code>/obs/login</code>) est sauvé une fois par jour : aussi si
vous l'utilisez pour des fichiers interméiaires liés à des calculs,
cela pénalise gravement le système de sauvegarde qui va enregistrer
tous ces fichiers et toutes leurs variations.</p>
<p>L'idée sous-jacente est d'appliquer une politique de stockage et de
sauvegarde adéquate aux données suivant leur nature. Plus nous
pourrons « optimiser » cela, plus nous pourrons offrir de la ressource
(taille de l'espace, performances, fréquence de sauvegarde, nombre de
versions dans le temps, durée de conservation), là où c'est utile. Car
énormément d'espace avec beaucoup de sauvegardes n'est pas
possible. D'où le besoin de classifier.</p>
<p>Aussi merci par avance à chaque utilisateur pour bien répartir ses
fichiers, souvent actuellement exclusivement dans son <code>$HOME</code>, entre
ces différents espaces.</p>
<h2>Statistiques d'utilisation de la grappe</h2>
<p>Vous pouvez voir en temps réel
l'<a href="https://ganglia.obspm.fr/ganglia/">utilisation de la grappe</a>.</p>
<h1>Gestion des variables d'environnement</h1>
<p>La modification des variables d'environnement pour l'accès aux
compilateurs est gérée par l'alias <strong><code>module</code></strong> du shell bash.</p>
<p>Lors de la connexion sur la frontale aucun module n'est chargé. Chaque utilisateur doit charger les modules et les versions souhaités. Il est possible de charger des modules par défaut en ajoutant la commande : <strong>module load {module_name}/{version}</strong> au fichier <code>$HOME/.profile</code>.</p>
<p><strong>Remarque</strong> : toute modification faite sur le <code>.profile</code> nécessite de
se déconnecter de la frontale pour sa prise en compte.</p>
<p>Les commandes suivantes sont disponibles :</p>
<ul>
<li><code>module avail</code> : affiche les modules disponibles</li>
<li><code>module whatis</code> : affiche les modules disponible avec un résumé</li>
<li><code>module list</code> : affiche les modules chargés dans le shell courant</li>
<li><code>module load module1 [module2] [...]</code> : permet de charger des
modules</li>
<li><code>module unload module1</code> : permet d'annuler la modification des
variables d'environnement effectuée par le chargement du module
<code>module1</code></li>
<li><code>module purge</code> : annule toutes les modifications apportées aux
variables d'environnement par les précédent chargements</li>
</ul>
<h1>Le gestionnaire de tâches SLURM</h1>
<p>Pour une répartition optimale des jobs que vous aurez à exécuter sur
la grappe de calcul tycho, nous utilisons le système de gestion de
tâches <a href="https://computing.llnl.gov/linux/slurm/">SLURM</a> (Simple Linux
Utility for Resource Management). Ce système permet une utilisation
optimale des noeud/processeurs disponibles. Ce système de batch a été
organisé en plusieurs queues de soumission. Dans un premier temps chaque utilisateur est limité à 156 tâches, ensuite nous ajusterons les limites par queues.</p>
<h2>Définition des queues</h2>
<p>6 queues publiques qui peuvent être utilisées par l'ensemble des utilisateurs, la queue par défaut est la queue short :</p>
<table>
<thead>
<tr>
<th><strong>Partition</strong></th>
<th><strong>temps maximum en min</strong></th>
<th><strong>Nb noeuds maximum</strong></th>
<th><strong>Noeud</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>maup</strong>(Mise Au Point)</td>
<td> 5</td>
<td> 1</td>
<td> tycho[01-04,06-24,27-52,57,59-82]</td>
</tr>
<tr>
<td><strong>short</strong></td>
<td> 60</td>
<td> 4</td>
<td> tycho[03-04,06-16,53-82]</td>
</tr>
<tr>
<td><strong>medium</strong></td>
<td> 1440</td>
<td> 4</td>
<td> tycho[01-04,06-24,26-32,53-56,59-82]</td>
</tr>
<tr>
<td><strong>long</strong></td>
<td> 7200</td>
<td> 4</td>
<td> tycho[01-02,04,06-15,17-24,27-48,57,59-82]</td>
</tr>
<tr>
<td><strong>verylong</strong></td>
<td> 21600</td>
<td> 4</td>
<td> tycho[01-02,04,06-11,17-24,27-32,67-82]</td>
</tr>
<tr>
<td><strong>interactif</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho05</td>
</tr>
<tr>
<td><strong>low</strong></td>
<td> 21600</td>
<td> 4</td>
<td> tycho[03-04,06-16,67-82]</td>
</tr>
</tbody>
</table>
<p>10 queues dédiées à des projets, les membres du
laboratoire/projet sont prioritaire sur les noeuds qui leur sont dédiés :</p>
<p> <table>
<thead>
<tr>
<th><strong>Partition</strong></th>
<th><strong>temps maximum en min</strong></th>
<th><strong>Nb noeuds maximum</strong></th>
<th><strong>Noeud</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>gaia</strong></td>
<td> 21600</td>
<td> 8</td>
<td> tycho[02,21,33-36,49-52,65,79-82]</td>
</tr>
<tr>
<td><strong>gaiaservice</strong></td>
<td> 21600</td>
<td> 4</td>
<td> tycho[02,21,49-52,65,79-82]</td>
</tr>
<tr>
<td><strong>grace</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho57</td>
</tr>
<tr>
<td><strong>minerva</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho58</td>
</tr>
<tr>
<td><strong>mis</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[01,22-24,37-44,68,70,75-76]</td>
</tr>
<tr>
<td><strong>misservice</strong></td>
<td> 21600</td>
<td> 2</td>
<td> tycho[01,22,68,70]</td>
</tr>
<tr>
<td><strong>mosaic</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[29-32,63-64]</td>
</tr>
<tr>
<td><strong>padc_medium</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[66,75-78]</td>
</tr>
<tr>
<td><strong>padc_verylong</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[66,75-78]</td>
</tr>
<tr>
<td><strong>pegase</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[71-72]</td>
</tr>
<tr>
<td><strong>plato</strong></td>
<td> 21600</td>
<td> 1</td>
<td> tycho[27-28,67,69]</td>
</tr>
<tr>
<td><strong>skybot</strong></td>
<td> 21600</td>
<td> 4</td>
<td> tycho[17-20]</td>
</tr>
<tr>
<td><strong>virage</strong></td>
<td> 21600</td>
<td> 5</td>
<td> tycho[45-48]</td>
</tr>
</tbody>
</table></p>
<p>Rq : les partitions [gaia,mis]service sont plus prioritaires que les partitions gaia,mis dont elles préemptent les jobs.</p>
<p>1 queue dédiée aux utilisateurs de la bibliothèque NAG :</p>
<ul>
<li><strong>nag</strong> : maximum 15j, le noeud nag-serveur.</li>
</ul>
<p>Les jobs non prioritaires qui s'exécutent sur les noeud dédiés aux
queues <em>gaia</em>, <em>mis</em>, <em>skybot</em>, <em>grace</em>, <em>virage</em>, <em>plato</em>, <em>mosaic</em>, <em>minerva</em>, <em>padc</em> ou <em>pegase</em> sont susceptibles d'être
préemptés (le job de basse priorité est mis en sommeil ---et en swap--- pour laisser la
place au job prioritaire.)</p>
<p>Les jobs en cours d'exécution qui ont été soumis sur la partition 'low' sont susceptibles d'être préemptés par les jobs des autres partitions.</p>
<h2>En-tête des scripts de soumission SLURM</h2>
<p>La grappe de calcul étant hétérogène il est important de bien définir les ressources nécessaire pour que le gestionnaire de tâches répartisse au mieux les jobs.
Pour cela il est indispensable de définir ces directives SLURM en en-tête :</p>
<pre><code>#!/bin/bash
#SBATCH --job-name=MonProg {Nom du programme}
#SBATCH --nodes=2 --ntasks-per-node=16 {Le nombre de noeud et de coeurs/noeud}
#SBATCH --time=120 {Le temps en minute}
#SBATCH --partition=medium {La file d'attente}
#SBATCH --mail-user=prenom.nom@obspm.fr
#SBATCH --mail-type=ALL
#SBATCH --mem=1gb {la mémoire globale, au maximum 61Gb}
#SBATCH --tmp=10gb {l'espace disque pour des fichiers stockés temporairement sur /scratch}
</code></pre>
<p>Rq : la directive --tmp fait référence à la taille réelle du disque scratch et non à la taille disponible.</p>
<p>Des exemples de scripts de soumission sont disponible dans le répertoire <strong>/shared/apps/slurm/exemples</strong></p>
<h2>Script de soumission d'un job MPI</h2>
<p>Voici un script typique qui réserve 2 noeuds avec 1Gb de mémoire pour 120 mn sur la queue medium :</p>
<pre><code>#!/bin/bash
#SBATCH --job-name=MonProg
#SBATCH --nodes=2 --ntasks-per-node=16
#SBATCH --time=120
#SBATCH --partition=medium
#SBATCH --mem=1gb
## Définir le répertoire scratch et recopier les fichiers nécessaires à l'exécution
SCRATCH=/scratch/$USER/run.${SLURM_JOBID}
srun --ntasks=$SLURM_JOB_NUM_NODES mkdir -p $SCRATCH
cd $SCRATCH
srun --ntasks=$SLURM_JOB_NUM_NODES cp /obs/$USER/MonProg .
srun --ntasks=$SLURM_JOB_NUM_NODES cp /data/$USER/MesDonnees .
mpiexec ./MonProg > MonProg.out
srun --ntasks=$SLURM_JOB_NUM_NODES mv MesResultats /data/$USER
cd ${SLURM_SUBMIT_DIR}
mv ${SCRATCH}/MonProg.out .
srun --ntasks=$SLURM_JOB_NUM_NODES rm -rf ${SCRATCH}
exit 0
</code></pre>
<h2>Script de soumission d'un job openMP</h2>
<p>Voici un script typique :</p>
<pre><code>#!/bin/bash
#SBATCH --job-name=MonProg
#SBATCH --nodes=1 --ntasks-per-node=16
#SBATCH --time=120
#SBATCH --partition=medium
#SBATCH --mem=1gb
## Définir le répertoire scratch et recopier les fichiers nécessaires à l'exécution
SCRATCH=/scratch/$USER/run.${SLURM_JOBID}
mkdir -p $SCRATCH
cd $SCRATCH
cp /obs/$USER/MonProg.f90 .
cp /data/$USER/MesDonnees .
ifort -openmp MonProg.f90 -o MonProg
export OMP_NUM_THREADS=16
./MonProg > MonProg.out
mv MesResultats /data/$USER
cd ${SLURM_SUBMIT_DIR}
mv ${SCRATCH}/MonProg.out .
rm -rf ${SCRATCH}
exit 0
</code></pre>
<p>Le nombre maximum de threads par noeud est de <strong>16</strong>.</p>
<h2>Soumission d'un tableau de tâches (ARRAY_TASKS)</h2>
<p>Les ARRAY_TASKS permettent de lancer et de gérer une collection de jobs similaires, par exemple dans le cas d'un même programme analysant des sources différentes, ou initialisés avec différents fichiers de configuration.</p>
<h5>Soumission</h5>
<p>Pour lancer un ARRAY_TASKS il faut utiliser la commande <code>sbatch --array=0-16 tache.slurm</code>. Ceci
aura pour effet de générer des variables d'environnement supplémentaire, notamment SLURM_ARRAY_TASK_ID et SLURM_ARRAY_JOB_ID :</p>
<ul>
<li><p>SLURM_ARRAY_JOB_ID contient l'identifiant du tableau de tâche (identique pour toutes les taches de ce tableau)</p></li>
<li><p>SLURM_ARRAY_TASK_ID contient le numéro de la tâche courante.</p></li>
</ul>
<h5>L'option <code>--array</code></h5>
<p>L'option --array=0-16 présente plusieurs options :</p>
<ul>
<li><p>--array=0-7:2 lancera les taches de 0 à 7 avec un pas de 2</p></li>
<li><p>--array=0-7%2 lancera les taches de 0 à 7 et empêchera l'exécution simultanée de plus de 2 tâches.</p></li>
</ul>
<h5>Nom des fichiers</h5>
<p>Pour nommer les fichiers de sortie des jobs d'ARRAY_TASKS, il est possible d'utiliser %A et % a</p>
<ul>
<li><p>%A : valeur de SLURM_ARRAY_JOB_ID</p></li>
<li><p>%a : valeur de SLURM_ARRAY_TASK_ID.</p></li>
</ul>
<h5>email</h5>
<p>L'utilisation de tous les mots clés de l'option <code>--mail</code> fonctionne. Il ne s'applique cependant
qu'au SLURM_ARRAY_JOB_ID. L'ajout de l'option ARRAY_TASKS appliquera l'ensemble des autres mots clés utilisés (BEGIN, ALL, END...) à chacune des tâches.</p>
<h5>Exemple de tableau de tâches</h5>
<p>La façon la plus simple d'utiliser un SLURM_ARRAY_JOB est de déclarer un tableau de paramètres et d'appeler chaque valeur avec SLURM_ARRAY_TASK_ID.</p>
<pre><code class="bash">#!/bin/bash
#SBATCH --job-name=jobarray
#SBATCH --time=01:00:00
#SBATCH --nodes=1 --ntasks-per-node=2
#SBATCH --partition=short
#SBATCH --mem=40gb
#SBATCH --mail-user=clement.hottier@obspm.fr
#SBATCH --output=slurm-jobarray-%A_%a.out
#SBATCH --mail-type=ALL
#SBATCH --array=0-7%4
initarray = ("init0" "init1" "init2" "init3" "init4" "init5" "init6")
SCRATCH=/scratch/$USER/run.$SLURM_ARRAY_JOB_ID.$SLURM_ARRAY_TASK_ID
mkdir $SCRATCH
./monprog --init ${initarray[$SLURM_ARRAY_TASK_ID]} --scratch $SCRATCH
rm -rf $SCRATCH
</code></pre>
<p>Le script précédent lancera l'exécutable monprog sur tous les fichiers init.</p>
<pre><code>$> sbatch jobarray.slurm
Submitted batch job 25289
$> squeue -j 25289
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
25290_[4-7] short chottier PD 0:00 1 (Priority)
25290_0 short chottier R 0:05 1 tycho04
25290_1 short chottier R 0:05 1 tycho04
25290_2 short chottier R 0:05 1 tycho04
25290_3 short chottier R 0:05 1 tycho04
</code></pre>
<h5>contrôle des SLURM_ARRAY_JOB</h5>
<p>Toutes les fonctionnalités de <code>scontrol</code> et <code>scancel</code> peuvent être utilisées :</p>
<ul>
<li><p>sur tout les SLURM_ARRAY_JOB : <code>scontrol update --job=25290</code></p></li>
<li><p>sur une seule tâche : <code>scontrol update --job=25290_2</code></p></li>
<li><p>sur une sélection de tâches : <code>scontrol update --job=25290_[1-4,7]</code> (s'applique sur 1, 2, 3,
4 et 7)</p></li>
</ul>
<h5>Soumission d'un job "finisher"</h5>
<p>Il est possible de soumettre un job qui ne se lancera qu'après la fin de l'exécution du
SLURM_ARRAY_JOB : <code>sbatch --depend=aftercondition:jobid(s) finisher.slurm</code>. Le job finisher ne se lancera
que lorsque la condition aftercondition sera réalisée.</p>
<p>Plusieurs <code>aftercondition</code> sont possibles :</p>
<ul>
<li><p><code>after</code> : satisfait quand toutes les tâches sont lancées</p></li>
<li><p><code>afterok</code> : satisfait quand toutes les tâches sont achevées sans erreurs</p></li>
<li><p><code>afterany</code> : satisfait quand toutes les tâches sont achevées</p></li>
<li><p><code>afternotok</code> : satisfait quand toutes les tâches sont achevées, et qu'au moins une ait
produit une erreur.</p></li>
</ul>
<p>On peut ainsi spécifier un job finisher pour tout le SLURM_ARRAY_JOB</p>
<p><code>sbatch --depend=afterok:25290 finisher.slurm</code></p>
<p>mais aussi pour un job spécifique :</p>
<p><code>sbatch --depend=afterok:25290_5</code></p>
<p>Enfin on peut aussi lancer un réparateur</p>
<p><code>sbatch --depend=afternotok:25290 execfixer.slurm</code></p>
<h2>Soumission d'un job utilisant IDL</h2>
<p>Nous avons un nombre limité de jetons IDL (cf <a href="https://palpatine.obspm.fr/munin/services/jetons.obspm.fr/index.html#licenses">Nombre de licences</a>). Pour utiliser le moins de jeton un utilisateur doit soumettre tous ses jobs faisant appel à IDL sur un même noeud. Pour cela il faut utiliser la commande idl.slurm.sh, cette commande renvoie le nom du noeud ou l'utilisateur doit soumettre son job.
Si l'utilisateur n'utilise pas encore de jeton IDL, le nom du noeud sera le noeud qui a le plus de processeurs disponible au cas ou l'utilisateur voudrait soumettre un ou plusieurs autres jobs. S'il utilise déjà un jeton IDL, la commande va regarder si on peut soumettre un autre job sur le même noeud. Le résultat de la commande dépend du nombre de processeurs, de la taille mémoire et de la partition demandés. Quand il n'y a plus de noeud disponible, la commande renvoie 1.</p>
<p>Par exemple, je souhaite soumettre un job sur 4 proc avec 0.5 Go dans la partition medium :</p>
<pre><code>tycho :~> idl.slurm.sh 4 0.5 medium
tycho03
</code></pre>
<p>La commande a vérifié que j'utilisais déjà un jeton IDL et qu'il restait suffisamment d'espace pour mon job. Je dois donc ajouter dans l'en-tête de mon script</p>
<pre><code>#SBATCH --nodelist=tycho03
</code></pre>
<h2>Travail interactif</h2>
<ul>
<li><p>Réservation d'un coeur sur le noeud interactif et exécution de Mathematica</p>
<pre><code> module load mathematica
salloc -t 04:00:00 -p interactif -J mathematica srun --x11 mathematica
</code></pre></li>
<li><p>Réservation d'un coeur sur un le noeud interactif et exécution de Matlab</p>
<pre><code> module load matlab
salloc -t 04:00:00 -p interactif -J matlab srun --pty --x11 matlab
</code></pre></li>
<li><p>Réservation d'un coeur sur le noeud interactif et ouverture d'une session sur ce noeud</p>
<pre><code> salloc [-t tempsMinute] [-J NomJob] -p interactif srun --pty bash
ou
salloc [-t tempsMinute] [-J NomJob] -p interactif srun --x11 xterm
</code></pre></li>
<li><p>Réservation d'un coeur et ouverture d'une session sur nag-serveur pour la compilation des bibliothèques NAG</p>
<pre><code> salloc [-t tempsMinute] [-J NomJob] -p nag srun --pty bash
ou
salloc [-t tempsMinute] [-J NomJob] -p nag srun --x11 xterm
</code></pre></li>
</ul>
<p>Attention : la version actuelle de slurm ne permet pas d'utiliser l'option --x11.
Il faut exécuter srun --pty bash pour réserver les ressources nécessaires et ensuite se connecter sur le noeud interactif : ssh -X interactif</p>
<h2>Soumission d'un job utilisant le GPU</h2>
<p>Il faut réserver un GPU en précisant l'option :</p>
<pre><code>#SBATCH --gres=gpu:1
</code></pre>
<h2>Les commandes de base</h2>
<ul>
<li><p><code>sbatch</code> : soumission d'un job</p>
<pre><code> tycho:~$ sbatch MonProg.slurm
Submitted batch job 381
</code></pre></li>
</ul>
<p> Option : -x pour exclure des noeuds, par exemple les noeuds qui peuvent être préemptés</p>
<pre><code> tycho:~$ sbatch -x tycho[01-02,17-20] MonProg.slurm
</code></pre>
<p> ou dans le script :</p>
<pre><code> #SBATCH --exclude=tycho[01-02,17-20]
</code></pre>
<p> Une autre façon d'exclure les noeuds sur lequels la préemption peut avoir lieu :</p>
<pre><code> #SBATCH --constraint=public
</code></pre>
<p> Pour faire tourner un job sur type de noeud particulier :</p>
<pre><code> #SBATCH --constraint=tycho2013
</code></pre>
<ul>
<li><p><code>scancel</code> : destruction d'un job</p>
<pre><code> tycho:~$ scancel 381
</code></pre></li>
<li><p><code>scancel</code> : destruction de tous ses jobs</p>
<pre><code> tycho:~$ scancel -u $USER
</code></pre></li>
<li><p><code>squeue</code> : suivi d'un job</p>
<pre><code> tycho:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
381 long MonProg marchand R 2-23:49:59 2 tycho[03-04]
475 medium Test vaillant R 23:18 1 tycho06
473 medium MonProg marchand PD 0:00 1 (resources)
</code></pre></li>
<li><p><code>sacct</code> : récapitulatif des jobs sur une période</p></li>
</ul>
<p> Par exemple afficher certains paramètres de tous les jobs soumis après le 1er Mars 2014 :</p>
<pre><code> tycho:~$ sacct -S 2014-03-01 -o jobid,user,nodelist,state
JobID User NodeList State
-------- -------- ------------- ---------
245 marchand tycho03 TIMEOUT
245.0 tycho03 CANCELLED
286 vaillant tycho05 COMPLETED
286.0 tycho05 COMPLETED
381 marchand tycho[03-04] RUNNING
475 vaillant tycho06 RUNNING
473 marchand None assigned PENDING
</code></pre>
<p> Pour connaitre la liste des paramètres :</p>
<pre><code> tycho:~$ sacct -helpformat
</code></pre>
<ul>
<li><p><code>scontrol</code> : visualisation et modification d'un job</p>
<pre><code> tycho:~$ scontrol show job {jobid}
tycho:~$ scontrol update JobID={jobid} TimeLimit=10:00:00
</code></pre></li>
<li><p><code>sview</code> : interface graphique qui permet de voir l'état général du
système</p></li>
</ul>
<p>Liste des variables d'environnement définies par SLURM lors de
l'exécution d'un job :</p>
<pre><code>SLURM_CHECKPOINT_IMAGE_DIR=/home/$USER/MonRep
SLURM_CPUS_ON_NODE=16
SLURMD_NODENAME=tycho03
SLURM_GTIDS=0
SLURM_JOB_CPUS_PER_NODE=16(x2)
SLURM_JOB_ID=381
SLURM_JOBID=381
SLURM_JOB_NAME=MonProg
SLURM_JOB_NODELIST=tycho[03-04]
SLURM_JOB_NUM_NODES=2
SLURM_LOCALID=0
SLURM_MEM_PER_NODE=1024
SLURM_NNODES=2
SLURM_NODEID=0
SLURM_NODELIST=tycho[03-04]
SLURM_NPROCS=32
SLURM_NTASKS=32
SLURM_PRIO_PROCESS=0
SLURM_PROCID=0
SLURM_SUBMIT_DIR=/home/$USER/MonRep
SLURM_TASK_PID=25434
SLURM_TASKS_PER_NODE=16(x2)
SLURM_TOPOLOGY_ADDR_PATTERN=node
SLURM_TOPOLOGY_ADDR=tycho03
</code></pre>
<h2>Commandes de gestion de l'espace /scratch</h2>
<p>L'espace /scratch est local à chaque noeud.</p>
<p>A la fin du script, les données de scratch doivent être recopiées sur une des zones partagées (obs, data ou poubelle) puis être effacées de l'espace /scratch de chacuns des noeuds alloués à l'exécution du job.</p>
<p>En cas d'interruption du job (dépassement de la limite de temps par exemple) des données vont rester sur les noeuds et il faudra retrouver les noeuds sur lesquels elles sont restées et les effacer en se connectant par ssh sur chacun des noeuds. Des utilitaires sont là pour vous aider :</p>
<ul>
<li>scratch_ls : liste le contenu de /scratch/$USER sur tous les noeuds</li>
<li>scratch_du : affiche l'espace occupé par /scratch/$USER sur tous les noeuds</li>
<li>scratch_rm tycho[90-92,95] : efface le contenu de /scratch/$USER sur les noeuds tycho90 à tycho92 et tycho95</li>
<li>scratch_rm -a : efface le contenu de /scratch/$USER sur tous les noeuds. Il faut s'assurer auparavant que vous n'avez aucun job en cours d'exécution.</li>
</ul>
<p>Ces commandes utilisent le shell distribué pdsh pour executer une commande sur tout ou partie des noeuds. Par exemple :</p>
<ul>
<li><p>Lister le contenu d'un répertoire sur tous les noeuds :</p>
<p> pdsh -a ls -l /scratch/$USER</p></li>
<li><p>Idem mais avec une meilleure présentation :</p>
<p> pdsh -a ls -l /scratch/$USER | dshbak</p></li>
</ul>
<p>Remarque : Il est normal que ces commandes affichent un message d'erreur lorsqu'elles se connectent à des noeuds éteints par slurm.</p>
<h1>Transfert de fichiers</h1>
<p>Pour transférer vers l'extérieur des fichiers provenant de Tycho il est possible de le faire à l'aide d'un tunnel ssh comme indiqué <a href="https://dio.obspm.fr/Syst%C3%A8me_et_r%C3%A9seau/Tunnels_SSH_dummy/">ici.</a></p>
<h1>Accès à l'IDRIS</h1>
<p>L'accès aux serveurs de l'IDRIS est possible depuis tycho.obspm.fr</p>
<h1>Statistiques d'utilisation</h1>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2024.html">2024</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2024.html">temps d'attente par partition</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.state.2024.html">état des noeuds</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2023.html">2023</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2023.html">temps d'attente par partition</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.state.2023.html">état des noeuds</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2022.html">2022</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2022.html">temps d'attente par partition</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.state.2022.html">état des noeuds</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2021.html">2021</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2021.html">temps d'attente par partition</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2020.html">2020</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2020.html">temps d'attente par partition</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2019.html">2019</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2019.html">temps d'attente par partition</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2018.html">2018</a>, <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tpsAttente.2018.html">temps d'attente par partition</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2017.html">2017</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2016.html">2016</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2015.html">2015</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2014.html">2014</a></p>
<p>Statistiques pour l'année <a href="https://dio.obspm.fr/interne/statsCalcul/stat.tycho.2013.html">2013</a></p>