Niagara ː Guide de démarrage
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 softwaremodule purge
: remove currently loaded modulesmodule spider
(or module spider <module-name>
): list available software packagesmodule avail
: list loadable software packagesmodule 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 ː
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
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, intel
→ intel/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 commandnia-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".
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
ouqsum
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
- SciNet : https://www.scinet.utoronto.ca
- Niagara : page wiki Niagara
- État du système : https://docs.scinet.utoronto.ca/index.php/Main_Page
- Formation : https://support.scinet.utoronto.ca/education
Assistance Contactez notre soutien technique