Niagara Quickstart/fr: Difference between revisions

From Alliance Doc
Jump to navigation Jump to search
(Created page with "== La commande ''module spider'' ==")
No edit summary
 
(148 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages />  
<languages />  
=Renseignements sur la grappe=


Pour les caractéristiques matérielles de la grappe, [[Niagara/fr|consultez cette page]].
=Caractéristiques de la grappe=


<div class="mw-translate-fuzzy">
La grappe Niagara compte 1548 serveurs Lenovo SD350, chacun avec 40 cœurs Skylake de 2.4GHz.
Sa performance de pointe est de 3.02 pétaflops (4.75 en théorie). En juin 2018, la grappe se classait au [https://www.top500.org/list/2018/06/?page=1 53e rang des 500 superordinateurs les plus performants].
</div>   
Chaque nœud de la grappe est de 188Gio/202Go dont un minimum de 4Gio par cœur. La grappe est conçue pour des tâches parallèles intensives avec un réseau InfiniBand EDR (''Enhanced Data Rate'') à topologie Dragonfly+ et routage dynamique. L'accès au nœuds de calcul se fait via un système de queues qui exécute des tâches d'une durée d'au moins 15 minutes et d'au plus 12 ou 24 heures en priorisant les tâches intensives.
Visionnez [https://support.scinet.utoronto.ca/education/go.php/370/content.php/cid/1383/ la vidéo d'introduction à Niagara].
Pour plus d'information sur les spécifications matérielles, consultez [[Niagara/fr| la page Niagara]].
= Getting started on Niagara =
<div class="mw-translate-fuzzy">
Si vous êtes un nouvel utilisateur de SciNet et que vous appartenez à un groupe dont le chercheur principal ne dispose pas de ressources allouées par le concours d'allocation de ressources, vous devez [https://www.scinethpc.ca/getting-a-scinet-account/ obtenir un compte SciNet.]
</div> 
Please read this document carefully.  The [https://docs.scinet.utoronto.ca/index.php/FAQ FAQ] is also a useful resource.  If at any time you require assistance, or if something is unclear, please do not hesitate to [mailto:niagara@computecanada.ca contact us].
<div class="mw-translate-fuzzy">
= Se connecter =
= Se connecter =
</div>


L'accès à Niagara se fait uniquement par SSH (''Secure Shell'').  
<div class="mw-translate-fuzzy">
Comme c'est le cas avec toutes les grappes de Calcul Canada et de SciNet, vous ne pouvez vous connecter que par SSH (''secure shell'').
Ouvrez d'abord une fenêtre de terminal (par exemple avec [[Connecting with PuTTY/fr|PuTTY]] sous Windows ou [[Connecting with MobaXTerm/fr|MobaXTerm]]), puis connectez-vous avec SSH aux nœuds de connexion avec les informations d'identification pour votre compte Calcul Canada.
</div>


Pour accéder à Niagara, ouvrez d'abord une fenêtre de terminal (par exemple avec [[Connecting with PuTTY/fr|PuTTY]] sous Windows ou [[Connecting with MobaXTerm/fr|MobaXTerm]]), puis connectez-vous avec SSH aux nœuds de connexion avec les coordonnées de votre compte Calcul Canada.
Open a terminal window (e.g. [[Connecting with PuTTY|PuTTY]] on Windows or [[Connecting with MobaXTerm|MobaXTerm]]), then ssh into the Niagara login nodes with your CC credentials:


<div class="mw-translate-fuzzy">
<source lang="bash">
<source lang="bash">
$ ssh -Y MYCCUSERNAME@niagara.scinet.utoronto.ca</source>
$ ssh -Y MYCCUSERNAME@niagara.scinet.utoronto.ca</source>
</div>


ou
ou


<div class="mw-translate-fuzzy">
<source lang="bash">$ ssh -Y MYCCUSERNAME@niagara.computecanada.ca</source>
<source lang="bash">$ ssh -Y MYCCUSERNAME@niagara.computecanada.ca</source>
</div>


Les tâches sont créées, éditées, compilées, préparées et soumises dans les nœuds de connexion.
Les tâches sont créées, éditées, compilées, préparées et soumises dans les nœuds de connexion.
Line 25: Line 52:
Pour utiliser les nœuds de calcul, il faut soumettre les tâches  en lot (''batch'') à l'ordonnanceur.
Pour utiliser les nœuds de calcul, il faut soumettre les tâches  en lot (''batch'') à l'ordonnanceur.


= Migrer vers Niagara =
Si vous ne pouvez vous connecter, vérifiez d'abord [https://docs.scinet.utoronto.ca l'état de la grappe].
 
== Utilisateurs de GPC existants ==
 
Niagara remplace les grappes de SciNet
*TCS (''Tightly Coupled Cluster''), hors service depuis l'automne 2017;
*GPC (''General Purpose Cluster'') dont les nœuds de calcul ne seront plus disponibles à compter du 21 avril 2018 et l'espace de stockage à compter du 9 mai 2018.
 
Les utilisateurs actifs de GPC ont accès à Niagara depuis le 9 avril 2018.
 
Les répertoires ''home'' et ''project'' ont été migrés de GPC à Niagara le 5 avril 2018, à l'exception des fichiers commençant par un point et qui se trouvaient dans les répertoires ''home''; ces fichiers n'ont jamais été synchronisés.
 
Après le 5 avril 2018, la responsabilité de migrer les données de GPC vers Niagara revient à l'utilisateur.
 
Les données dans les répertoires ''scratch'' n'ont pas été transférées automatiquement. Ces données sont temporaires et les utilisateurs doivent nettoyer leur espace scratch et transférer les données à conserver via les nœuds de copie (''datamovers'').
 
Jusqu'au 9 mai 2018, vous aurez accès à Niagara et au stockage sur GPC pour effectuer les copies.
 
Si vos données totalisent 10Go et plus, utilisez les nœuds de copie <tt>gpc-logindm01</tt> et <tt>gpc-logindm02</tt> de GPC et <tt>nia-dm1</tt> et <tt>nia-dm2</tt> de Niagara.  Par exemple, pour copier le répertoire <code>abc</code> de votre espace ''scratch'' GPC à votre espace ''scratch'' Niagara ː
<source>
$ ssh CCUSERNAME@niagara.computecanada.ca
$ ssh nia-dm1
$ scp -r SCINETUSERNAME@gpc-logindm01:\$SCRATCH/abc $SCRATCH/abc
</source>
N'oubliez pas la barre oblique inversée (\) devant la première occurrence de <tt>$SCRATCH</tt> pour que soit utilisée la valeur de scratch sur le nœud à distance (ici, gpc-logindm01). Notez que gpc-logindm01 vous demandera votre mot de passe SciNet.
 
Vous pouvez aussi procéder à l'inverse, soit
<source>
$ ssh SCINETUSERNAME@login.scinet.utoronto.ca
$ ssh gpc-logindm01
$ scp -r $SCRATCH/abc CCUSERNAME@nia-dm1:\$SCRATCH/abc
</source>
Cette fois-ci, la barre oblique inversée est devant la deuxième occurrence de <tt>$SCRATCH</tt>.
 
Si vous utilisez <tt>rsync</tt>, nous vous recommandons de ne pas utiliser les indicateurs <tt>-a</tt>; avec <tt>cp</tt>, n'utilisez pas les indicateurs <tt>-a</tt> et <tt>-p</tt>.
 
== Autres utilisateurs ==
 
Les comptes sont déjà créés pour les nouveaux utilisateurs de SciNet qui ont des ressources allouées par le concours de 2018; ils peuvent se connecter.
 
Pour les utilisateurs qui n'ont pas de ressources allouées par le concours de 2018, la procédure d'accès n'est pas encore disponible. Entretemps, vous pouvez demander un compte SciNet via [https://ccdb.computecanada.ca/me/facilities CCDB].


<div class="mw-translate-fuzzy">
= Localisation de vos répertoires =
= Localisation de vos répertoires =
</div>


== Répertoires ''home'' et ''scratch'' ==
== Répertoires /home et /scratch ==


<div class="mw-translate-fuzzy">
Pour localiser vos espaces ''home'' et ''scratch'', utilisez
Pour localiser vos espaces ''home'' et ''scratch'', utilisez
</div>


<code>$HOME=/home/g/groupname/myccusername</code>
<code>$HOME=/home/g/groupname/myccusername</code>
Line 77: Line 68:
<code>$SCRATCH=/scratch/g/groupname/myccusername</code>
<code>$SCRATCH=/scratch/g/groupname/myccusername</code>


<div class="mw-translate-fuzzy">
Par exemple,
Par exemple,
</div>
<source lang="bash">nia-login07:~$ pwd
<source lang="bash">nia-login07:~$ pwd
/home/s/scinet/rzon
/home/s/scinet/rzon
nia-login07:~$ cd $SCRATCH
nia-login07:~$ cd $SCRATCH
nia-login07:rzon$ pwd
nia-login07:rzon$ pwd
/scratch/s/scinet/rzon</source>
/scratch/s/scinet/rzon</source>
NOTE: home is read-only on compute nodes.
<div class="mw-translate-fuzzy">
== Répertoire ''project'' ==
== Répertoire ''project'' ==
</div>


<div class="mw-translate-fuzzy">
Les utilisateurs disposant de ressources allouées par le concours 2018 peuvent localiser leur répertoire projet avec
Les utilisateurs disposant de ressources allouées par le concours 2018 peuvent localiser leur répertoire projet avec
</div>


<code>$PROJECT=/project/g/groupname/myccusername</code>
<code>$PROJECT=/project/g/groupname/myccusername</code>
<code>$ARCHIVE=/archive/g/groupname/myccusername</code>
<div class="mw-translate-fuzzy">
NOTE : L'espace d'archivage n'est présentement disponible que sur [https://docs.scinet.utoronto.ca/index.php/HPSS HPSS].
</div>


'''''IMPORTANT : Mesure préventive '''''
'''''IMPORTANT : Mesure préventive '''''


Puisque les chemins risquent de changer, utilisez plutôt les variables d'environnement (HOME, SCRATCH, PROJECT).
<div class="mw-translate-fuzzy">
Puisque les chemins risquent de changer, utilisez plutôt les variables d'environnement (HOME, SCRATCH, PROJECT, ARCHIVE).
</div>
 
<div class="mw-translate-fuzzy">
= Stockage et quotas =
</div>


= Stockage =
You should familiarize yourself with the [[Data_management_at_Niagara#Purpose_of_each_file_system | various file systems]], what purpose they serve, and how to properly use them.  This table summarizes the various file systems.  See the [[Data_management_at_Niagara | Data management at Niagara]] page for more details.


<div class="mw-translate-fuzzy">
{| class="wikitable"
{| class="wikitable"
!   
!   
Line 146: Line 157:
| ?
| ?
|}
|}
</div>


<ul>
=== Moving data to Niagara ===
<li>Les nœuds de calcul n'offrent pas d'espace de stockage.</li>
<li>L'espace d'archivage est sur [https://wiki.scinet.utoronto.ca/wiki/index.php/HPSS HPSS] qui sera éventuellement relié à Niagara.</li>
<li>La sauvegarde est un instantané (''snapshot'') récent et non une copie archivée de toutes les données ayant existé.</li>
<li><p><code>$BBUFFER</code> (''Burst Buffer'') est une fonctionnalité sur laquelle nous travaillons; il s'agit d'un niveau de stockage parallèle plus rapide pour les données temporaires.</p></li></ul>


== Déplacer des données ==
If you need to move data to Niagara for analysis, or when you need to move data off of Niagara, use the following guidelines:
* If your data is less than 10GB, move the data using the login nodes.
* If your data is greater than 10GB, move the data using the datamover nodes nia-datamover1.scinet.utoronto.ca and nia-datamover2.scinet.utoronto.ca .


Utilisez les commandes scp ou rsync pour déplacer les données vers niagara.scinet.utoronto.ca ou niagara.computecanada.ca. La méthode de déplacement à partir de ou en direction de Niagara dépend de la quantité de données à déplacer.  
Details of how to use the datamover nodes can be found on the [[Data_management_at_Niagara#Moving_data | Data management at Niagara]] page.


*Pour déplacer moins de 10Go, utilisez les nœuds de connexion; seuls ceux-ci sont visibles de l'extérieur de Niagara. Un transfert est interrompu ci les donnés dépassent environ 10Go.
= Charger des modules =
 
*Pour déplacer plus de 10Go, utilisez les nœuds de copie (''datamovers''); ceux-ci ne peuvent pas être accédés de l'extérieur. Pour ce faire, à partir d'un nœud de connexion, connectez-vous à <code>nia-dm1</code> ou <code>nia-dm2</code> via SSH, puis initiez le transfert des nœuds de copie (''datamovers''). L'autre côté du transfert (c'est-à-dire votre ordinateur) doit pouvoir être rejoint de l'extérieur.
 
Si vous transférez souvent des données, pensez utiliser l'outil web [[Globus/fr|Globus]].
 
Vous pourriez vouloir déplacer des données vers [https://wiki.scinet.utoronto.ca/wiki/index.php/HPSS HPSS/Archive/Nearline], mais ceci sera implémenté à une date ultérieure. L'espace de stockage sur HPSS est alloué dans le cadre du [https://www.computecanada.ca/page-daccueil-du-portail-de-recherche/acces-aux-ressources/concours-dallocation-des-ressources/?lang=fr concours d'allocation de ressources].


= Charger des modules =
You have two options for running code on Niagara: use existing software, or [[Niagara_Quickstart#Compiling_on_Niagara:_Example | compile your own]].  This section focuses on the former.


<div class="mw-translate-fuzzy">
Mis à part les logiciels essentiels, les applications sont installées via des [[Utiliser des modules|modules]]. Les modules configurent les variables d'environnement (<code>PATH</code>, etc.). Ceci rend disponible plusieurs versions incompatibles d'un même paquet. Pour connaître les logiciels disponibles, utilisez <tt> module spider</tt>.
Mis à part les logiciels essentiels, les applications sont installées via des [[Utiliser des modules|modules]]. Les modules configurent les variables d'environnement (<code>PATH</code>, etc.). Ceci rend disponible plusieurs versions incompatibles d'un même paquet. Pour connaître les logiciels disponibles, utilisez <tt> module spider</tt>.
</div>


Par exemple,
Common module subcommands are:
<source lang="bash">nia-login07:~$ module spider
<li><code>module load &lt;module-name&gt;</code>: use particular software</li>
---------------------------------------------------
<li><code>module purge</code>: remove currently loaded modules</li>
The following is a list of the modules currently av
<li><code>module spider</code> (or <code>module spider &lt;module-name&gt;</code>): list available software packages</li>
---------------------------------------------------
<li><code>module avail</code>: list loadable software packages</li>
  CCEnv: CCEnv
<li><code>module list</code>: list loaded modules</li>
 
  NiaEnv: NiaEnv/2018a


  anaconda2: anaconda2/5.1.0
Along with modifying common environment variables, such as PATH, and LD_LIBRARY_PATH, these modules also create a SCINET_MODULENAME_ROOT environment variable, which can be used to access commonly needed software directories, such as /include and /lib.


  anaconda3: anaconda3/5.1.0
There are handy abbreviations for the module commands. <code>ml</code> is the same as <code>module list</code>, and <code>ml <module-name></code> is the same as <code>module load <module-name></code>.


  autotools: autotools/2017
== Software stacks: NiaEnv and CCEnv ==
    autoconf, automake, and libtool


  boost: boost/1.66.0
<div class="mw-translate-fuzzy">
 
Il y a en réalité deux environnements logiciels sur Niagara ː
  cfitsio: cfitsio/3.430
</div>
 
  cmake: cmake/3.10.2 cmake/3.10.3
 
  ...</source>
<ul>
Les commandes les plus utilisées sont ː
<li><code>module load &lt;module-name&gt;</code> : pour un logiciel particulier</li>
<li><code>module purge</code> : pour supprimer les modules déjà chargés</li>
<li><code>module spider</code> (ou <code>module spider &lt;module-name&gt;</code>) : pour obtenir la liste des paquets logiciels disponibles</li>
<li><code>module avail</code> : pour obtenir la liste des paquets logiciels disponibles pour le chargement</li>
<li><code>module list</code> : pour obtenir la liste des modules chargés</li></ul>
 
Il y a deux piles logicielles sur Niagara.


<div class="mw-translate-fuzzy">
<ol style="list-style-type: decimal;">
<ol style="list-style-type: decimal;">
<li><p>[[Modules specific to Niagara|La pile logicielle Niagara]] est spécifiquement adaptée à cette grappe. Elle est disponible par défaut, mais au besoin peut être chargée à nouveau avec </p>
<li><p>[[Modules specific to Niagara|La pile logicielle Niagara]] est spécifiquement adaptée à cette grappe. Elle est disponible par défaut, mais au besoin peut être chargée à nouveau avec </p>
<source lang="bash">module load NiaEnv</source>.</li>
<source lang="bash">module load NiaEnv</source>.</li>
<li><p>[[Modules|La pile logicielle usuelle des grappes d'usage général]] ([[Graham/fr|Graham]] et [[Cedar/fr|Cedar]]), compilée pour l'instant pour une génération précédente de CPU.  </p>
<li><p>[[Available software|La pile logicielle usuelle des grappes d'usage général]] ([[Graham/fr|Graham]] et [[Cedar/fr|Cedar]]), compilée pour l'instant pour une génération précédente de CPU.  </p>
<source lang="bash">module load CCEnv</source>
<source lang="bash">module load CCEnv</source>
<p>Pour charger les modules par défaut comme ceux de Cedar ou Graham, exécutez aussi <code>module load StdEnv</code>.</p></li></ol>
<p>Pour charger les modules par défaut comme ceux de Cedar ou Graham, exécutez aussi <code>module load StdEnv</code>.</p></li></ol>
 
</div>
Note : Les modules <code>*Env</code> sont '''''sticky'''''; supprimez-les avec <code>--force</code>.


== Trucs pour le chargement de modules ==
== Trucs pour le chargement de modules ==
Line 215: Line 205:
Il '''''n'est pas conseillé''''' de changer des modules dans votre .bashrc de Niagara. Dans certains cas, le comportement peut être très étrange. Au besoin, chargez plutôt les modules manuellement ou par un script distinct et chargez des modules requis pour l'exécution via le script de soumission de votre tâche.
Il '''''n'est pas conseillé''''' de changer des modules dans votre .bashrc de Niagara. Dans certains cas, le comportement peut être très étrange. Au besoin, chargez plutôt les modules manuellement ou par un script distinct et chargez des modules requis pour l'exécution via le script de soumission de votre tâche.


Les noms courts sont pour les versions par défaut; par exemple, <code>intel</code> → <code>intel/2018.2</code>. Il est habituellement préférable de préciser la version pour pouvoir reproduire un cas.
<div class="mw-translate-fuzzy">
Voyez l'information sur les [https://docs.scinet.utoronto.ca/index.php/Bashrc_guidelines fichiers par défaut .bashrc et .bash_profile].
</div>


Certaines abréviations sont utiles ː
Instead, load modules by hand when needed, or by sourcing a separate script.


<pre class="sh">
Load run-specific modules inside your job submission script.
        ml → module list
        ml NAME → module load NAME  # if NAME is an existing module
        ml X → module X
</pre>


Certains modules requièrent le chargement précédent d'autres modules.
Les noms courts sont pour les versions par défaut; par exemple, <code>intel</code> → <code>intel/2018.2</code>. Il est habituellement préférable de préciser la version pour pouvoir reproduire un cas.
 
Certains modules requièrent le chargement préalable d'autres modules.


Pour résoudre les dépendances, utilisez <code>module spider</code>.
Pour résoudre les dépendances, utilisez <code>module spider</code>.


== La commande ''module spider'' ==
= Available compilers and interpreters =


Oddly named, the module subcommand spider is the search-and-advise facility for modules.
* For most compiled software, one should use the Intel compilers (<tt>icc</tt> for C, <tt>icpc</tt> for C++, and <tt>ifort</tt> for Fortran). Loading an <tt>intel</tt> module makes these available.  
 
* The GNU compiler suite (<tt>gcc, g++, gfortran</tt>) is also available, if you load one of the <tt>gcc</tt> modules.
Suppose one wanted to load the openmpi module.  Upon trying to load the module, one may get the following message:
* Open source interpreted, interactive software is also available:
<source lang="bash">nia-login07:~$ module load openmpi
** [[Python]]
Lmod has detected the error:  These module(s) exist but cannot be loaded as requested: "openmpi"
** [[R]]
  Try: "module spider openmpi" to see how to load the module(s).</source>
** Julia
So while that fails, following the advice that the command outputs, the next command would be:
** Octave
<source lang="bash">nia-login07:~$ module spider openmpi
    
------------------------------------------------------------------------------------------------------
Please visit the [[Python]] or [[R]] page for details on using these tools. For information on running MATLAB applications on Niagara, visit [[MATLAB| this page]].
  openmpi:
------------------------------------------------------------------------------------------------------
    Versions:
        openmpi/2.1.3
        openmpi/3.0.1
        openmpi/3.1.0rc3
 
------------------------------------------------------------------------------------------------------
  For detailed information about a specific "openmpi" module (including how to load the modules) use
  the module s full name.
  For example:
 
    $ module spider openmpi/3.1.0rc3
------------------------------------------------------------------------------------------------------</source>
So this gives just more details suggestions on using the <tt>spider</tt> command. Following the advice again, one would type:
<source lang="bash">nia-login07:~$ module spider openmpi/3.1.0rc3
------------------------------------------------------------------------------------------------------
  openmpi: openmpi/3.1.0rc3
------------------------------------------------------------------------------------------------------
    You will need to load all module(s) on any one of the lines below before the "openmpi/3.1.0rc3"
    module is available to load.
 
      NiaEnv/2018a  gcc/7.3.0
      NiaEnv/2018a  intel/2018.2
</source>
These are concrete instructions on how to load this particular openmpi module. Following these leads to a successful loading of the module.
<source lang="bash">
nia-login07:~$ module load NiaEnv/2018a  intel/2018.2
nia-login07:~$ module load openmpi/3.1.0rc3
</source>
<source lang="bash">nia-login07:~$ module list
Currently Loaded Modules:
   1) NiaEnv/2018a (S)  2) intel/2018.2  3) openmpi/3.1.0.rc3


  Where:
<div class="mw-translate-fuzzy">
  S: Module is Sticky, requires --force to unload or purge</source>
= Applications du commerce =
</div>


= Running commercial software =
May I use commercial software on Niagara?


* You may have to provide your own license.
<div class="mw-translate-fuzzy">
* SciNet and Compute Canada have an extremely large and broad user base of thousands of users, so we cannot provide licenses for everyone's favorite software.
* Vous devrez peut-être fournir votre propre licence.
* Thus, the only commercial software installed on Niagara is software that can benefit everyone: compilers, math libraries and debuggers.
* SciNet et Compute Canada desservent des milliers d'utilisateurs de disciplines variées; il n'est pas possible d'accommoder toutes les applications préférées de chacun.
* That means no Matlab, Gaussian, IDL,
* Ainsi, les seules applications du commerce installées sur Niagara sont d'ordre général, soit des compilateurs, des bibliothèques mathématiques et des outils de débogage.  
* Open source alternatives like Octave, Python, R are available.
* Ceci exclut Matlab, Gaussian, IDL.
* We are happy to help you to install commercial software for which you have a license.
* Des options ''open source'' sont disponibles, comme Octave, Python et R.
* In some cases, if you have a license, you can use software in the Compute Canada stack.
* Nous vous aiderons à installer toute application du commerce pour laquelle vous détenez une licence.
* Dans certains cas, si vous avez une licence, vous pouvez utiliser des applications de la pile logicielle de Calcul Canada.
</div>


= Exemple de compilation =
= Exemple de compilation =


Suppose one want to compile an application from two c source files, main.c and module.c, which use the Gnu Scientific Library (GSL). This is an example of how this would be done:
Nous voulons compiler une application à partir des deux fichiers source ''main.c'' et ''module.c'' qui utilisent GSL (Gnu Scientific Library). Nous pourrions procéder ainsi ː
<source lang="bash">nia-login07:~$ module list
<source lang="bash">nia-login07:~$ module list
Currently Loaded Modules:
Currently Loaded Modules:
Line 308: Line 268:
</source>
</source>


Note:
<div class="mw-translate-fuzzy">
* The optimization flags <tt>-O3 -xHost</tt> allow the Intel compiler to use instructions specific to the architecture CPU that is present (instead of for more generic x86_64 CPUs).
Note :
* The GSL requires a cblas implementation, for is contained in the Intel Math Kernel Library (MKL). Linking with this library is easy when using the intel compiler, it just requires the <tt>-mkl</tt> flags.
* Les indicateurs d'optimisation <tt>-O3 -xHost</tt> permettent au compilateur Intel d'utiliser les instructions spécifiques à l'architecture CPU existante (plutôt que pour des CPU x86_64 plus génériques).
* If compiling with gcc, the optimization flags would be <tt>-O3 -march=native</tt>. For the way to link with the MKL, it is suggested to use the [https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor MKL link line advisor].
* GSL exige une implémentation cblas qui fait partie de MKL(Intel Math Kernel Library). Il st facile de faire un lien avec cette bibliothèque quand on utilise le compilateur Intel; on n'a besoin que des indicateurs <tt>-mkl</tt>.
* Pour compiler avec gcc, les indicateurs d'optimisation seraient <tt>-O3 -march=native</tt>. Pour faire un lien avec MKL, nous suggérons [https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor MKL link line advisor].
</div>


= Tests =
= Tests =


You really should test your code before you submit it to the cluster to know if your code is correct and what kind of resources you need.
Vous devriez toujours tester votre code avant de soumettre une tâche pour savoir s'il est valide et pour connaître les ressources dont vous avez besoin.


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>Small test jobs can be run on the login nodes.</p>
<li><p>Les tâches de test courtes peuvent être exécutées sur les nœuds de connexion.</p>
<p>Rule of thumb: couple of minutes, taking at most about 1-2GB of memory, couple of cores.</p></li>
<p>En principe : quelques minutes, utilisant au plus 1-2Go de mémoire, quelques cœurs.</p></li>
<li><p>You can run the the ddt debugger on the login nodes after <code>module load ddt</code>.</p></li>
<li><p>Après <code>module load ddt</code>, vous pouvez lancer le débogueur ddt sur les nœuds de connexion.</p></li>
<li><p>Short tests that do not fit on a login node, or for which you need a dedicated node, request an<br />
<li><p>Les tests courts qui ne peuvent être exécutés sur un nœud de connexion ou qui nécessitent un nœud dédié requièrent un débogage interactif avec la commande salloc. <br />
interactive debug job with the salloc command</p>
interactive debug job with the salloc command</p>
<source lang="bash">nia-login07:~$ salloc -pdebug --nodes N --time=1:00:00</source>
<source lang="bash">nia-login07:~$ salloc -pdebug --nodes N --time=1:00:00</source>
<p>where N is the number of nodes. The duration of your interactive debug session can be at most one hour, can use at most 4 nodes, and each user can only have one such session at a time.</p>
<p>N est le nombre de nœuds. La session de débogage interactif ne doit pas dépasser une heure, ne doit pas utiliser plus de 4 cœurs et chaque utilisateur ne doit avoir qu'une session de débogage à la fois.</p>
Alternatively, on Niagara, you can use the command
Une autre option est d'utiliser la commande
<source lang="bash">nia-login07:~$ debugjob N</source>
<source lang="bash">nia-login07:~$ debugjob N</source>
where N is the number of nodes, If N=1, this gives an interactive session one 1 hour, when N=4 (the maximum), it give you 30 minutes.
N est le nombre de nœuds. Si N=1, la session interactive est d'une heure et si N=4 (valeur maximale) la session est de 30 minutes.
</li></ul>
</li></ul>
</div>


= Soumettre des tâches =
= Soumettre des tâches =


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>Niagara uses SLURM as its job scheduler.</p></li>
<li><p>Niagara utilise l'ordonnanceur Slurm.</p></li>
<li><p>You submit jobs from a login node by passing a script to the sbatch command:</p>
<li><p>À partir d'un nœud de connexion, les tâches sont soumises en passant un script à la commande sbatch :</p>
<source lang="bash">nia-login07:~$ sbatch jobscript.sh</source></li>
<source lang="bash">nia-login07:~$ sbatch jobscript.sh</source></li>
<li><p>This puts the job in the queue. It will run on the compute nodes in due course.</p></li>
<li><p>Ceci place la tâche dans la queue; elle sera exécutée sur les nœuds de calcul à son tour. </p></li>
<li><p>Jobs will run under their group's RRG allocation, or, if the group has none, under a RAS allocation (previously called `default' allocation).</p></li></ul>
<li><p>Les tâches seront comptabilisées contre l'allocation de Ressources pour les groupes de recherche; si le groupe n'a reçu aucune de ces ressources, la tâche sera comptabilisée contre le Service d'accès rapide  (autrefois ''allocation par défaut'').</p></li></ul>
</div>


Souvenez-vous ː
Souvenez-vous ː


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>Scheduling is by node, so in multiples of 40-cores.</p></li>
<li><p>L'ordonnancement se fait par nœud, donc en multiples de 40 cœurs.</p></li>
<li><p>Maximum walltime is 24 hours.</p></li>
<li><p>La limite en temps réel ne doit pas dépasser 24 heures; pour les utilisateurs sans allocation, la limite est de 12 heures.</p></li>
<li><p>Jobs must write to your scratch or project directory (home is read-only on compute nodes).</p></li>
<li><p>L'écriture doit se faire dans votre répertoire ''scratch'' ou ''project'' (sur les nœuds de calcul, ''home'' est seulement en lecture).</p></li>
<li><p>Compute nodes have no internet access.</p>
<li><p>Les nœuds de calcul ne peuvent accéder à l'internet.</p>
<p>Download data you need beforehand on a login node.</p></li></ul>
<p>Avant de commencer, téléchargez les données sur un nœud de connexion. </p></li></ul>
</div>


<div class="mw-translate-fuzzy">
== Ordonnancement par nœud ==
== Ordonnancement par nœud ==
</div>


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>All job resource requests on Niagara are scheduled as a multiple of '''nodes'''.</p></li>
<li><p>Toutes les requêtes de ressources pour les tâches sont ordonnancées en multiples de '''nœuds'''.</p></li>
<li>The nodes that your jobs run on are exclusively yours.
<li>Les nœuds utilisés par vos tâches sont à votre usage exclusif.
<ul>
<ul>
<li>No other users are running anything on them.</li>
<li>Aucun autre utilisateur n'y a accès.</li>
<li>You can ssh into them to see how things are going.</li></ul>
<li>Vous pouvez accéder aux tâches avec SSH pour en faire le suivi.</li></ul>
</li>
</li>
<li><p>Whatever your requests to the scheduler, it will always be translated into a multiple of nodes.</p></li>
<li><p>Peu importe votre requête, l'ordonnanceur la traduit en multiples de nœuds alloués à la tâche.</p></li>
<li><p>Memory requests to the scheduler are of no use.</p>
<li><p>Il est inutile de faire une requête pour une quantité de mémoire.</p>
<p>Your job gets N x 202GB of RAM if N is the number of nodes.</p></li>
<p>Votre tâche obtient toujours Nx202Go de mémoire vive, où N représente le nombre de nœuds.</p></li>
<li><p>You should '''use all 40 cores on each of the nodes''' that your job uses.</p>
<li><p>Vous devriez essayer d'utiliser tous les cœurs des nœuds alloués à votre tâche. Puisqu'il y a 40 cœurs par nœud, votre tâche devrait utiliser Nx40 cœurs. Si ce n'est pas le cas, nous vous contacterons pour vous aider à optimiser votre travail.</p></li></ul>
<p>You will be contacted if you don't, and we will help you get more science done.</p></li></ul>
</div>
 
== Limits ==


== Hyperthreading: Logical CPUs vs. cores ==
There are limits to the size and duration of your jobs, the number of jobs you can run and the number of jobs you can have queued.  It matters whether a user is part of a group with a [https://www.computecanada.ca/research-portal/accessing-resources/resource-allocation-competitions/ Resources for Research Group allocation] or not. It also matters in which 'partition' the jobs runs. 'Partitions' are SLURM-speak for use cases.  You specify the partition with the <tt>-p</tt> parameter to <tt>sbatch</tt> or <tt>salloc</tt>, but if you do not specify one, your job will run in the <tt>compute</tt> partition, which is the most common case.  


Hyperthreading, a technology that leverages more of the physical hardware by pretending there are twice as many logical cores than real once, is enabled on Niagara.
{| class="wikitable"
!Usage
!Partition
!Running jobs
!Submitted jobs (incl. running)
!Min. size of jobs
!Max. size of jobs
!Min. walltime
!Max. walltime
|-
|Compute jobs with an allocation||compute || 50 || 1000 || 1 node (40 cores) || 1000 nodes (40000 cores)|| 15 minutes || 24 hours
|-
|Compute jobs without allocation ("default")||compute || 50 || 200 || 1 node (40 cores) || 20 nodes (800 cores)|| 15 minutes || 24 hours
|-
|Testing or troubleshooting || debug || 1 || 1 || 1 node (40 cores) || 4 nodes (160 cores)|| N/A || 1 hour
|-
|Archiving or retrieving data in [https://docs.scinet.utoronto.ca/index.php/HPSS HPSS]|| archivelong || 2 per user (max 5 total) || 10 per user || N/A || N/A|| 15 minutes || 72 hours
|-
|Inspecting archived data, small archival actions in [https://docs.scinet.utoronto.ca/index.php/HPSS HPSS] || archiveshort || 2 per user|| 10 per user || N/A || N/A || 15 minutes || 1 hour
|}


So the OS and scheduler see 80 logical cores.
Within these limits, jobs will still have to wait in the queue.  The waiting time depends on many factors such as the allocation amount, how much allocation was used in the recent past, the number of nodes and the walltime, and how many other jobs are waiting in the queue.


80 logical cores vs. 40 real cores typically gives about a 5-10% speedup (Your Mileage May Vary).
== File Input/Output Tips ==


Because Niagara is scheduled by node, hyperthreading is actually fairly easy to use:
It is important to understand the file systems, so as to perform your file I/O (Input/Output) responsibly.  Refer to the [[Data_management_at_niagara | Data management at Niagara]] page for details about the file systems.
* Your files can be seen on all Niagara login and compute nodes.
* $HOME, $SCRATCH, and $PROJECT all use the parallel file system called GPFS.
* GPFS is a high-performance file system which provides rapid reads and writes to large data sets in parallel from many nodes.
* Accessing data sets which consist of many, small files leads to poor performance on GPFS.
* Avoid reading and writing lots of small amounts of data to disk.  Many small files on the system waste space and are slower to access, read and write.  If you must write many small files, use [https://docs.scinet.utoronto.ca/index.php/User_Ramdisk ramdisk].
* Write data out in a binary format. This is faster and takes less space.
* The [https://docs.scinet.utoronto.ca/index.php/Burst_Buffer Burst Buffer] is better for i/o heavy jobs and to speed up [https://docs.scinet.utoronto.ca/index.php/Checkpoints checkpoints].


<div class="mw-translate-fuzzy">
== Exemple d'un script de soumission pour MPI ==
Pour exécuter l'application [[MPI/fr|MPI]] nommée <tt>appl_mpi_ex</tt> avec 320 processus, le script serait ː
</div>
<source lang="bash">
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks=80
#SBATCH --time=1:00:00
#SBATCH --job-name mpi_job
#SBATCH --output=mpi_output_%j.txt
#SBATCH --mail-type=FAIL
cd $SLURM_SUBMIT_DIR
module load intel/2018.2
module load openmpi/3.1.0
mpirun ./mpi_example
# or "srun ./mpi_example"
</source>
<div class="mw-translate-fuzzy">
Soumettez le script (nommé ici mpi_ex.sh) avec la commande
<source lang="bash">nia-login07:~$ sbatch mpi_ex.sh</source>
<ul>
<ul>
<li>Ask for a certain number of nodes N for your jobs.</li>
<li><p>La première ligne mentionne qu'il s'agit d'un script bash.</p></li>
<li>You know that you get 40xN cores, so you will use (at least) a total of 40xN mpi processes or threads. (mpirun, srun, and the OS will automaticallly spread these over the real cores)</li>
<li><p>Les lignes qui commencent par <code>#SBATCH</code> sont pour l'ordonnanceur.</p></li>
<li>But you should also test if running 80xN mpi processes or threads gives you any speedup.</li>
<li><p>sbatch interprète ces lignes comme étant une requête et la nomme <code>mpi_ex</code></p></li><li><p>Ici, l'ordonnanceur cherche 8 nœuds avec 40 cœurs pour exécuter 320 tâches, pour une durée d'une heure.</p></li>
<li>Regardless, your usage will be counted as 40xNx(walltime in years).</li>
<li><p>Une fois le nœud trouvé, le script est exécuté ː</p>
<ul>
<li>redirige vers le répertoire de soumission;</li>
<li>charge les modules;</li>
<li>exécute l'application <code>appl_mpi_ex</code> avec mpirun (srun devrait aussi fonctionner).</li></ul>
</li>
<li>Pour utiliser la fonctionnalité hyperthreading, remplacez <tt>--ntasks=320</tt> par <tt>--ntasks=640</tt> et ajoutez <tt>--bind-to none</tt> à la commande mpirun (seulement avec avec OpenMPI et non IntelMPI).</li>
</ul>
</div>
 
<ul>
<li>First line indicates that this is a bash script.</li>
<li>Lines starting with <code>#SBATCH</code> go to SLURM.</li>
<li>sbatch reads these lines as a job request (which it gives the name <code>mpi_job</code>)</li>
<li>In this case, SLURM looks for 2 nodes (each of which will have 40 cores) on which to run a total of 80 tasks, for 1 hour.<br>(Instead of specifying <tt>--ntasks=80</tt>, you can also ask for <tt>--ntasks-per-node=40</tt>, which amounts to the same.)</li>
<li>Note that the mpifun flag "--ppn" (processors per node) is ignored.</li>
<li>Once it found such a node, it runs the script:
<ul>
<li>Change to the submission directory;</li>
<li>Loads modules;</li>
<li>Runs the <code>mpi_example</code> application (SLURM will inform mpirun or srun on how many processes to run).
</li>
</ul>
<li>To use hyperthreading, just change --ntasks=80 to --ntasks=160, and add --bind-to none to the mpirun command (the latter is necessary for OpenMPI only, not when using IntelMPI).
</ul>
</ul>


== Exemple d'un script de soumission pour OpenMP ==
== Exemple d'un script de soumission pour OpenMP ==


Suppose you want to run a single-node, multi-threaded application called <tt>appl_openmp_ex</tt> that uses [[OpenMP]]. The job script could look as follows:
<source lang="bash">#!/bin/bash
<source lang="bash">#!/bin/bash
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --nodes=1
#SBATCH --cpus-per-task=40
#SBATCH --cpus-per-task=40
#SBATCH --time=1:00:00
#SBATCH --time=1:00:00
#SBATCH --job-name openmp_ex
#SBATCH --job-name openmp_job
#SBATCH --output=openmp_ex_%j.txt
#SBATCH --output=openmp_output_%j.txt
 
#SBATCH --mail-type=FAIL
cd $SLURM_SUBMIT_DIR
cd $SLURM_SUBMIT_DIR
 
module load intel/2018.2
module load intel/2018.2
 
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
 
./appl_openmp_ex
./openmp_example
# or "srun ./openmp_example".
</source>
</source>
Submit this script (if it is called openmp_ex.sh) with the command:
<div class="mw-translate-fuzzy">
<source lang="bash">nia-login07:~$ sbatch openmp_ex.sh</source>
Soumettez le script (nommé openmp_ex.sh) avec la commande <source lang="bash">nia-login07:~$ sbatch openmp_ex.sh</source>
* First line indicates that this is a bash script.
* La première ligne mentionne qu'il s'agit d'un script bash.
* Lines starting with <code>#SBATCH</code> go to SLURM.
* Les lignes qui commencent par <code>#SBATCH</code> sont pour l'ordonnanceur.
* sbatch reads these lines as a job request (which it gives the name <code>openmp_ex</code>) .
* sbatch interprète ces lignes comme étant une requête et la nomme <code>openmp_ex</code>.
* In this case, SLURM looks for one node with 40 cores to be run inside one task, for 1 hour.
* L'ordonnanceur cherche alors un nœud de 40 cœurs à exécuter dans une tâche, pour une durée d'une heure.
* Once it found such a node, it runs the script:
* Une fois le nœud trouvé, le script est exécuté:
** Change to the submission directory;
** redirige vers le répertoire de soumission;
** Loads modules (must be done again in the submission script on Niagara);
** charge les modules (doit être fait aussi dans le script de soumission sur Niagara);
** Sets an environment variable to set the number of threads to 40 (no hyperthreading in this example);
** configure une variable d'environnement pour spécifier 40 fils (il n'y a pas de hyperthreading dans cet exemple);
** Runs the <code>appl_openmp_ex</code> application.
** exécute l'application  <code>appl_openmp_ex</code>.
* To use hyperthreading, just change <tt>--cpus-per-task=40</tt> to <tt>--cpus-per-task=80</tt>.
* Pour utiliser la fonctionnalité hyperthreading, remplacez <tt>--cpus-per-task=40</tt> par <tt>--cpus-per-task=80</tt>.
</div>


== Example submission script (MPI) ==
<div class="mw-translate-fuzzy">
Suppose you want to run an [[MPI]] application called <tt>appl_mpi_ex</tt> with 320 processes. The job script could look as follows:
= Suivi des tâches en attente =
<source lang="bash">
</div>
#!/bin/bash
#SBATCH --nodes=8
#SBATCH --ntasks=320
#SBATCH --time=1:00:00
#SBATCH --job-name mpi_ex
#SBATCH --output=mpi_ex_%j.txt


cd $SLURM_SUBMIT_DIR
Une fois la tâche placée dans la queue, suivez son déroulement avec les commandes suivantes ː


module load intel/2018.2
<div class="mw-translate-fuzzy">
module load openmpi/3.1.0rc3
 
mpirun ./appl_mpi_ex
</source>
Submit this script (if it is called mpi_ex.sh) with the command:
<source lang="bash">nia-login07:~$ sbatch mpi_ex.sh</source>
<ul>
<li><p>First line indicates that this is a bash script.</p></li>
<li><p>Lines starting with <code>#SBATCH</code> go to SLURM.</p></li>
<li><p>sbatch reads these lines as a job request (which it gives the name <code>mpi_ex</code>)</p></li>
<li><p>In this case, SLURM looks for 8 nodes with 40 cores on which to run 320 tasks, for 1 hour.</p></li>
<li><p>Once it found such a node, it runs the script:</p>
<ul>
<ul>
<li>Change to the submission directory;</li>
<li><p><code>squeue</code> ou <code>qsum</code> pour voir les tâches dans la queue (<code>squeue -u $USER</code> pour vos propres tâches);</p></li>
<li>Loads modules;</li>
<li><p><code>squeue -j JOBID</code> pour des renseignements sur une tâche en particulier</p>
<li>Runs the <code>appl_mpi_ex</code> application with mpirun (srun should work too).</li></ul>
<p>(ou la version plus longue <code>scontrol show job JOBID</code>);</p></li>
</li>
<li><p><code>squeue --start -j JOBID</code> pour une estimation de quand la tâche sera exécutée (le résultat n'est pas toujours fiable);</p></li>
<li>To use hyperthreading, just change <tt>--ntasks=320</tt> to <tt>--ntasks=640</tt>, and add <tt>--bind-to none</tt> to the mpirun command (the latter is necessary for OpenMPI only, not when using IntelMPI).</li>
<p>
</ul>
Puisque ceci n'est pas très précis, vous pourriez vouloir savoir où se trouve votre tâche dans la queue avec la fonction bash suivante ː
</div>


= Suivi des tâches en attente =
<div class="mw-translate-fuzzy">
Pour en savoir plus, consultez [[Running jobs/fr|Exécuter des tâches]].
</div>


Once the job is incorporated into the queue, there are some command you can use to monitor its progress.
= Visualisation =
Pour savoir comment utiliser les outils de visualisation de Niagara, consultez [https://docs.scinet.utoronto.ca/index.php/Visualization cette page du wiki SciNet].


<ul>
= Pour plus d'information =
<li><p><code>squeue</code> or <code>qsum</code> to show the job queue (<code>squeue -u $USER</code> for just your jobs);</p></li>
<li><p><code>squeue -j JOBID</code> to get information on a specific job</p>
<p>(alternatively, <code>scontrol show job JOBID</code>, which is more verbose).</p></li>
<li><p><code>squeue --start -j JOBID</code> to get an estimate for when a job will run; these tend not to be very accurate predictions.</p></li>
<li><p><code>scancel -i JOBID</code> to cancel the job.</p></li>
<li><p><code>sinfo -pcompute</code> to look at available nodes.</p></li>
<li><p><code>jobperf JOBID</code> to get an instantaneous view of the cpu and memory usage of the nodes of the job while it is running.</p></li>
<li><p><code>sacct</code> to get information on your recent jobs.</p>
</li>
</ul>
For more information, check out the wiki page devoted to [[Running jobs]].


= Data management and I/O tips =
'''Sites'''


* $HOME, $SCRATCH, and $PROJECT all use the parallel file system called GPFS.
* SciNet : https://www.scinet.utoronto.ca
* Your files can be seen on all Niagara login and compute nodes.
* Niagara : [[Niagara/fr|page wiki Niagara]]
* GPFS is a high-performance file system which provides rapid reads and writes to large data sets in parallel from many nodes.
* État du système : https://docs.scinet.utoronto.ca/index.php/Main_Page
* But accessing data sets which consist of many, small files leads to poor performance.
* Formation : https://support.scinet.utoronto.ca/education
* Avoid reading and writing lots of small amounts of data to disk.<br />


* Many small files on the system would waste space and would be slower to access, read and write.
<b>Assistance</b>
* Write data out in binary. Faster and takes less space.
Contactez notre [[Technical support/fr | soutien technique]]
* Burst buffer (to come) is better for i/o heavy jobs and to speed up checkpoints.

Latest revision as of 18:11, 9 October 2023

Other languages:

Caractéristiques de la grappe

La grappe Niagara compte 1548 serveurs Lenovo SD350, chacun avec 40 cœurs Skylake de 2.4GHz. Sa performance de pointe est de 3.02 pétaflops (4.75 en théorie). En juin 2018, la grappe se classait au 53e rang des 500 superordinateurs les plus performants.

Chaque nœud de la grappe est de 188Gio/202Go dont un minimum de 4Gio par cœur. La grappe est conçue pour des tâches parallèles intensives avec un réseau InfiniBand EDR (Enhanced Data Rate) à topologie Dragonfly+ et routage dynamique. L'accès au nœuds de calcul se fait via un système de queues qui exécute des tâches d'une durée d'au moins 15 minutes et d'au plus 12 ou 24 heures en priorisant les tâches intensives.

Visionnez la vidéo d'introduction à Niagara.

Pour plus d'information sur les spécifications matérielles, consultez la page Niagara.

Getting started on Niagara

Si vous êtes un nouvel utilisateur de SciNet et que vous appartenez à un groupe dont le chercheur principal ne dispose pas de ressources allouées par le concours d'allocation de ressources, vous devez obtenir un compte SciNet.

Please read this document carefully. The FAQ is also a useful resource. If at any time you require assistance, or if something is unclear, please do not hesitate to contact us.

Se connecter

Comme c'est le cas avec toutes les grappes de Calcul Canada et de SciNet, vous ne pouvez vous connecter que par SSH (secure shell). Ouvrez d'abord une fenêtre de terminal (par exemple avec PuTTY sous Windows ou MobaXTerm), puis connectez-vous avec SSH aux nœuds de connexion avec les informations d'identification pour votre compte Calcul Canada.

Open a terminal window (e.g. PuTTY on Windows or MobaXTerm), then ssh into the Niagara login nodes with your CC credentials:

$ ssh -Y MYCCUSERNAME@niagara.scinet.utoronto.ca

ou

$ ssh -Y MYCCUSERNAME@niagara.computecanada.ca

Les tâches sont créées, éditées, compilées, préparées et soumises dans les nœuds de connexion.

Ces nœuds de connexion ne font pas partie de la grappe Niagara, mais ils ont la même architecture et la même pile logicielle que les nœuds de calcul.

Dans les commandes ci-dessus, -Y est optionnel, mais nécessaire pour ouvrir des fenêtres de lignes de commande sur votre serveur local.

Pour utiliser les nœuds de calcul, il faut soumettre les tâches en lot (batch) à l'ordonnanceur.

Si vous ne pouvez vous connecter, vérifiez d'abord l'état de la grappe.

Localisation de vos répertoires

Répertoires /home et /scratch

Pour localiser vos espaces home et scratch, utilisez

$HOME=/home/g/groupname/myccusername

$SCRATCH=/scratch/g/groupname/myccusername

Par exemple,

nia-login07:~$ pwd
/home/s/scinet/rzon
nia-login07:~$ cd $SCRATCH
nia-login07:rzon$ pwd
/scratch/s/scinet/rzon

NOTE: home is read-only on compute nodes.

Répertoire project

Les utilisateurs disposant de ressources allouées par le concours 2018 peuvent localiser leur répertoire projet avec

$PROJECT=/project/g/groupname/myccusername

$ARCHIVE=/archive/g/groupname/myccusername

NOTE : L'espace d'archivage n'est présentement disponible que sur HPSS.

IMPORTANT : Mesure préventive

Puisque les chemins risquent de changer, utilisez plutôt les variables d'environnement (HOME, SCRATCH, PROJECT, ARCHIVE).

Stockage et quotas

You should familiarize yourself with the various file systems, what purpose they serve, and how to properly use them. This table summarizes the various file systems. See the Data management at Niagara page for more details.

quota taille des blocs durée sauvegarde sur nœuds de connexion sur nœuds de calcul
$HOME 100 Go 1 Mo oui oui lecture seule
$SCRATCH 25 To 16 Mo 2 mois non oui oui
$PROJECT par groupe 16 Mo oui oui oui
$ARCHIVE par groupe 2 copies non non
$BBUFFER ? 1 Mo très courte non ? ?

Moving data to Niagara

If you need to move data to Niagara for analysis, or when you need to move data off of Niagara, use the following guidelines:

  • If your data is less than 10GB, move the data using the login nodes.
  • If your data is greater than 10GB, move the data using the datamover nodes nia-datamover1.scinet.utoronto.ca and nia-datamover2.scinet.utoronto.ca .

Details of how to use the datamover nodes can be found on the Data management at Niagara page.

Charger des modules

You have two options for running code on Niagara: use existing software, or compile your own. This section focuses on the former.

Mis à part les logiciels essentiels, les applications sont installées via des modules. Les modules configurent les variables d'environnement (PATH, etc.). Ceci rend disponible plusieurs versions incompatibles d'un même paquet. Pour connaître les logiciels disponibles, utilisez module spider.

Common module subcommands are:

  • module load <module-name>: use particular software
  • module purge: remove currently loaded modules
  • module spider (or module spider <module-name>): list available software packages
  • module avail: list loadable software packages
  • module list: list loaded modules
  • Along with modifying common environment variables, such as PATH, and LD_LIBRARY_PATH, these modules also create a SCINET_MODULENAME_ROOT environment variable, which can be used to access commonly needed software directories, such as /include and /lib. There are handy abbreviations for the module commands. ml is the same as module list, and ml <module-name> is the same as module load <module-name>.

    Software stacks: NiaEnv and CCEnv

    Il y a en réalité deux environnements logiciels sur Niagara ː

    1. La pile logicielle Niagara est spécifiquement adaptée à cette grappe. Elle est disponible par défaut, mais au besoin peut être chargée à nouveau avec

      module load NiaEnv
      
      .
    2. La pile logicielle usuelle des grappes d'usage général (Graham et Cedar), compilée pour l'instant pour une génération précédente de CPU.

      module load CCEnv
      

      Pour charger les modules par défaut comme ceux de Cedar ou Graham, exécutez aussi module load StdEnv.

    Trucs pour le chargement de modules

    Il n'est pas conseillé de changer des modules dans votre .bashrc de Niagara. Dans certains cas, le comportement peut être très étrange. Au besoin, chargez plutôt les modules manuellement ou par un script distinct et chargez des modules requis pour l'exécution via le script de soumission de votre tâche.

    Voyez l'information sur les fichiers par défaut .bashrc et .bash_profile.

    Instead, load modules by hand when needed, or by sourcing a separate script.

    Load run-specific modules inside your job submission script.

    Les noms courts sont pour les versions par défaut; par exemple, intelintel/2018.2. Il est habituellement préférable de préciser la version pour pouvoir reproduire un cas.

    Certains modules requièrent le chargement préalable d'autres modules.

    Pour résoudre les dépendances, utilisez module spider.

    Available compilers and interpreters

    • For most compiled software, one should use the Intel compilers (icc for C, icpc for C++, and ifort for Fortran). Loading an intel module makes these available.
    • The GNU compiler suite (gcc, g++, gfortran) is also available, if you load one of the gcc modules.
    • Open source interpreted, interactive software is also available:

    Please visit the Python or R page for details on using these tools. For information on running MATLAB applications on Niagara, visit this page.

    Applications du commerce

    May I use commercial software on Niagara?

    • Vous devrez peut-être fournir votre propre licence.
    • SciNet et Compute Canada desservent des milliers d'utilisateurs de disciplines variées; il n'est pas possible d'accommoder toutes les applications préférées de chacun.
    • Ainsi, les seules applications du commerce installées sur Niagara sont d'ordre général, soit des compilateurs, des bibliothèques mathématiques et des outils de débogage.
    • Ceci exclut Matlab, Gaussian, IDL.
    • Des options open source sont disponibles, comme Octave, Python et R.
    • Nous vous aiderons à installer toute application du commerce pour laquelle vous détenez une licence.
    • Dans certains cas, si vous avez une licence, vous pouvez utiliser des applications de la pile logicielle de Calcul Canada.

    Exemple de compilation

    Nous voulons compiler une application à partir des deux fichiers source main.c et module.c qui utilisent GSL (Gnu Scientific Library). Nous pourrions procéder ainsi ː

    nia-login07:~$ module list
    Currently Loaded Modules:
      1) NiaEnv/2018a (S)
      Where:
       S:  Module is Sticky, requires --force to unload or purge
    
    nia-login07:~$ module load intel/2018.2 gsl/2.4
    
    nia-login07:~$ ls
    appl.c module.c
    
    nia-login07:~$ icc -c -O3 -xHost -o appl.o appl.c
    nia-login07:~$ icc -c -O3 -xHost -o module.o module.c
    nia-login07:~$ icc  -o appl module.o appl.o -lgsl -mkl
    
    nia-login07:~$ ./appl
    

    Note :

    • Les indicateurs d'optimisation -O3 -xHost permettent au compilateur Intel d'utiliser les instructions spécifiques à l'architecture CPU existante (plutôt que pour des CPU x86_64 plus génériques).
    • GSL exige une implémentation cblas qui fait partie de MKL(Intel Math Kernel Library). Il st facile de faire un lien avec cette bibliothèque quand on utilise le compilateur Intel; on n'a besoin que des indicateurs -mkl.
    • Pour compiler avec gcc, les indicateurs d'optimisation seraient -O3 -march=native. Pour faire un lien avec MKL, nous suggérons MKL link line advisor.

    Tests

    Vous devriez toujours tester votre code avant de soumettre une tâche pour savoir s'il est valide et pour connaître les ressources dont vous avez besoin.

    • Les tâches de test courtes peuvent être exécutées sur les nœuds de connexion.

      En principe : quelques minutes, utilisant au plus 1-2Go de mémoire, quelques cœurs.

    • Après module load ddt, vous pouvez lancer le débogueur ddt sur les nœuds de connexion.

    • Les tests courts qui ne peuvent être exécutés sur un nœud de connexion ou qui nécessitent un nœud dédié requièrent un débogage interactif avec la commande salloc.
      interactive debug job with the salloc command

      nia-login07:~$ salloc -pdebug --nodes N --time=1:00:00
      

      où N est le nombre de nœuds. La session de débogage interactif ne doit pas dépasser une heure, ne doit pas utiliser plus de 4 cœurs et chaque utilisateur ne doit avoir qu'une session de débogage à la fois.

      Une autre option est d'utiliser la commande

      nia-login07:~$ debugjob N
      

      où N est le nombre de nœuds. Si N=1, la session interactive est d'une heure et si N=4 (valeur maximale) la session est de 30 minutes.

    Soumettre des tâches

    • Niagara utilise l'ordonnanceur Slurm.

    • À partir d'un nœud de connexion, les tâches sont soumises en passant un script à la commande sbatch :

      nia-login07:~$ sbatch jobscript.sh
      
    • Ceci place la tâche dans la queue; elle sera exécutée sur les nœuds de calcul à son tour.

    • Les tâches seront comptabilisées contre l'allocation de Ressources pour les groupes de recherche; si le groupe n'a reçu aucune de ces ressources, la tâche sera comptabilisée contre le Service d'accès rapide (autrefois allocation par défaut).

    Souvenez-vous ː

    • L'ordonnancement se fait par nœud, donc en multiples de 40 cœurs.

    • La limite en temps réel ne doit pas dépasser 24 heures; pour les utilisateurs sans allocation, la limite est de 12 heures.

    • L'écriture doit se faire dans votre répertoire scratch ou project (sur les nœuds de calcul, home est seulement en lecture).

    • Les nœuds de calcul ne peuvent accéder à l'internet.

      Avant de commencer, téléchargez les données sur un nœud de connexion.

    Ordonnancement par nœud

    • Toutes les requêtes de ressources pour les tâches sont ordonnancées en multiples de nœuds.

    • Les nœuds utilisés par vos tâches sont à votre usage exclusif.
      • Aucun autre utilisateur n'y a accès.
      • Vous pouvez accéder aux tâches avec SSH pour en faire le suivi.
    • Peu importe votre requête, l'ordonnanceur la traduit en multiples de nœuds alloués à la tâche.

    • Il est inutile de faire une requête pour une quantité de mémoire.

      Votre tâche obtient toujours Nx202Go de mémoire vive, où N représente le nombre de nœuds.

    • Vous devriez essayer d'utiliser tous les cœurs des nœuds alloués à votre tâche. Puisqu'il y a 40 cœurs par nœud, votre tâche devrait utiliser Nx40 cœurs. Si ce n'est pas le cas, nous vous contacterons pour vous aider à optimiser votre travail.

    Limits

    There are limits to the size and duration of your jobs, the number of jobs you can run and the number of jobs you can have queued. It matters whether a user is part of a group with a Resources for Research Group allocation or not. It also matters in which 'partition' the jobs runs. 'Partitions' are SLURM-speak for use cases. You specify the partition with the -p parameter to sbatch or salloc, but if you do not specify one, your job will run in the compute partition, which is the most common case.

    Usage Partition Running jobs Submitted jobs (incl. running) Min. size of jobs Max. size of jobs Min. walltime Max. walltime
    Compute jobs with an allocation compute 50 1000 1 node (40 cores) 1000 nodes (40000 cores) 15 minutes 24 hours
    Compute jobs without allocation ("default") compute 50 200 1 node (40 cores) 20 nodes (800 cores) 15 minutes 24 hours
    Testing or troubleshooting debug 1 1 1 node (40 cores) 4 nodes (160 cores) N/A 1 hour
    Archiving or retrieving data in HPSS archivelong 2 per user (max 5 total) 10 per user N/A N/A 15 minutes 72 hours
    Inspecting archived data, small archival actions in HPSS archiveshort 2 per user 10 per user N/A N/A 15 minutes 1 hour

    Within these limits, jobs will still have to wait in the queue. The waiting time depends on many factors such as the allocation amount, how much allocation was used in the recent past, the number of nodes and the walltime, and how many other jobs are waiting in the queue.

    File Input/Output Tips

    It is important to understand the file systems, so as to perform your file I/O (Input/Output) responsibly. Refer to the Data management at Niagara page for details about the file systems.

    • Your files can be seen on all Niagara login and compute nodes.
    • $HOME, $SCRATCH, and $PROJECT all use the parallel file system called GPFS.
    • GPFS is a high-performance file system which provides rapid reads and writes to large data sets in parallel from many nodes.
    • Accessing data sets which consist of many, small files leads to poor performance on GPFS.
    • Avoid reading and writing lots of small amounts of data to disk. Many small files on the system waste space and are slower to access, read and write. If you must write many small files, use ramdisk.
    • Write data out in a binary format. This is faster and takes less space.
    • The Burst Buffer is better for i/o heavy jobs and to speed up checkpoints.

    Exemple d'un script de soumission pour MPI

    Pour exécuter l'application MPI nommée appl_mpi_ex avec 320 processus, le script serait ː

    #!/bin/bash 
    #SBATCH --nodes=2
    #SBATCH --ntasks=80
    #SBATCH --time=1:00:00
    #SBATCH --job-name mpi_job
    #SBATCH --output=mpi_output_%j.txt
    #SBATCH --mail-type=FAIL
     
    cd $SLURM_SUBMIT_DIR
     
    module load intel/2018.2
    module load openmpi/3.1.0
     
    mpirun ./mpi_example
    # or "srun ./mpi_example"
    

    Soumettez le script (nommé ici mpi_ex.sh) avec la commande

    nia-login07:~$ sbatch mpi_ex.sh
    
    • La première ligne mentionne qu'il s'agit d'un script bash.

    • Les lignes qui commencent par #SBATCH sont pour l'ordonnanceur.

    • sbatch interprète ces lignes comme étant une requête et la nomme mpi_ex

    • Ici, l'ordonnanceur cherche 8 nœuds avec 40 cœurs pour exécuter 320 tâches, pour une durée d'une heure.

    • Une fois le nœud trouvé, le script est exécuté ː

      • redirige vers le répertoire de soumission;
      • charge les modules;
      • exécute l'application appl_mpi_ex avec mpirun (srun devrait aussi fonctionner).
    • Pour utiliser la fonctionnalité hyperthreading, remplacez --ntasks=320 par --ntasks=640 et ajoutez --bind-to none à la commande mpirun (seulement avec avec OpenMPI et non IntelMPI).
    • First line indicates that this is a bash script.
    • Lines starting with #SBATCH go to SLURM.
    • sbatch reads these lines as a job request (which it gives the name mpi_job)
    • In this case, SLURM looks for 2 nodes (each of which will have 40 cores) on which to run a total of 80 tasks, for 1 hour.
      (Instead of specifying --ntasks=80, you can also ask for --ntasks-per-node=40, which amounts to the same.)
    • Note that the mpifun flag "--ppn" (processors per node) is ignored.
    • Once it found such a node, it runs the script:
      • Change to the submission directory;
      • Loads modules;
      • Runs the mpi_example application (SLURM will inform mpirun or srun on how many processes to run).
    • To use hyperthreading, just change --ntasks=80 to --ntasks=160, and add --bind-to none to the mpirun command (the latter is necessary for OpenMPI only, not when using IntelMPI).

    Exemple d'un script de soumission pour OpenMP

    #!/bin/bash
    #!/bin/bash
    #SBATCH --nodes=1
    #SBATCH --cpus-per-task=40
    #SBATCH --time=1:00:00
    #SBATCH --job-name openmp_job
    #SBATCH --output=openmp_output_%j.txt
    #SBATCH --mail-type=FAIL
     
    cd $SLURM_SUBMIT_DIR
     
    module load intel/2018.2
     
    export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
     
    ./openmp_example
    # or "srun ./openmp_example".
    
    Soumettez le script (nommé openmp_ex.sh) avec la commande
    nia-login07:~$ sbatch openmp_ex.sh
    
    • La première ligne mentionne qu'il s'agit d'un script bash.
    • Les lignes qui commencent par #SBATCH sont pour l'ordonnanceur.
    • sbatch interprète ces lignes comme étant une requête et la nomme openmp_ex.
    • L'ordonnanceur cherche alors un nœud de 40 cœurs à exécuter dans une tâche, pour une durée d'une heure.
    • Une fois le nœud trouvé, le script est exécuté:
      • redirige vers le répertoire de soumission;
      • charge les modules (doit être fait aussi dans le script de soumission sur Niagara);
      • configure une variable d'environnement pour spécifier 40 fils (il n'y a pas de hyperthreading dans cet exemple);
      • exécute l'application appl_openmp_ex.
    • Pour utiliser la fonctionnalité hyperthreading, remplacez --cpus-per-task=40 par --cpus-per-task=80.

    Suivi des tâches en attente

    Une fois la tâche placée dans la queue, suivez son déroulement avec les commandes suivantes ː

    • squeue ou qsum pour voir les tâches dans la queue (squeue -u $USER pour vos propres tâches);

    • squeue -j JOBID pour des renseignements sur une tâche en particulier

      (ou la version plus longue scontrol show job JOBID);

    • squeue --start -j JOBID pour une estimation de quand la tâche sera exécutée (le résultat n'est pas toujours fiable);

    • Puisque ceci n'est pas très précis, vous pourriez vouloir savoir où se trouve votre tâche dans la queue avec la fonction bash suivante ː

    Pour en savoir plus, consultez Exécuter des tâches.

    Visualisation

    Pour savoir comment utiliser les outils de visualisation de Niagara, consultez cette page du wiki SciNet.

    Pour plus d'information

    Sites

    Assistance Contactez notre soutien technique