Niagara ː Guide de démarrage
Renseignements sur la grappe
Pour les caractéristiques matérielles de la grappe, consultez cette page.
Se connecter
L'accès à Niagara se fait uniquement par SSH (Secure Shell).
Pour accéder à Niagara, 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 coordonnées de votre compte Calcul Canada.
$ 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.
Migrer vers Niagara
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 gpc-logindm01 et gpc-logindm02 de GPC et nia-dm1 et nia-dm2 de Niagara. Par exemple, pour copier le répertoire abc
de votre espace scratch GPC à votre espace scratch Niagara ː
$ ssh CCUSERNAME@niagara.computecanada.ca
$ ssh nia-dm1
$ scp -r SCINETUSERNAME@gpc-logindm01:\$SCRATCH/abc $SCRATCH/abc
N'oubliez pas la barre oblique inversée (\) devant la première occurrence de $SCRATCH 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
$ ssh SCINETUSERNAME@login.scinet.utoronto.ca
$ ssh gpc-logindm01
$ scp -r $SCRATCH/abc CCUSERNAME@nia-dm1:\$SCRATCH/abc
Cette fois-ci, la barre oblique inversée est devant la deuxième occurrence de $SCRATCH.
Si vous utilisez rsync, nous vous recommandons de ne pas utiliser les indicateurs -a; avec cp, n'utilisez pas les indicateurs -a et -p.
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 CCDB.
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
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
IMPORTANT : Mesure préventive
Puisque les chemins risquent de changer, utilisez plutôt les variables d'environnement (HOME, SCRATCH, PROJECT).
Stockage
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 | ? | ? |
- Les nœuds de calcul n'offrent pas d'espace de stockage.
- L'espace d'archivage est sur HPSS qui sera éventuellement relié à Niagara.
- La sauvegarde est un instantané (snapshot) récent et non une copie archivée de toutes les données ayant existé.
$BBUFFER
(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.
Déplacer des données
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.
- 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.
- 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 à
nia-dm1
ounia-dm2
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.
Vous pourriez vouloir déplacer des données vers HPSS/Archive/Nearline, mais ceci sera implémenté à une date ultérieure. L'espace de stockage sur HPSS est alloué dans le cadre du concours d'allocation de ressources.
Charger des modules
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.
Par exemple,
nia-login07:~$ module spider
---------------------------------------------------
The following is a list of the modules currently av
---------------------------------------------------
CCEnv: CCEnv
NiaEnv: NiaEnv/2018a
anaconda2: anaconda2/5.1.0
anaconda3: anaconda3/5.1.0
autotools: autotools/2017
autoconf, automake, and libtool
boost: boost/1.66.0
cfitsio: cfitsio/3.430
cmake: cmake/3.10.2 cmake/3.10.3
...
-
Les commandes les plus utilisées sont ː
module load <module-name>
: pour un logiciel particuliermodule purge
: pour supprimer les modules déjà chargésmodule spider
(oumodule spider <module-name>
) : pour obtenir la liste des paquets logiciels disponiblesmodule avail
: pour obtenir la liste des paquets logiciels disponibles pour le chargementmodule list
: pour obtenir la liste des modules chargés
Il y a deux piles logicielles 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
.
Note : Les modules *Env
sont sticky; supprimez-les avec --force
.
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.
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.
Certaines abréviations sont utiles ː
ml → module list ml NAME → module load NAME # if NAME is an existing module ml X → module X
Certains modules requièrent le chargement précédent d'autres modules.
Pour résoudre les dépendances, utilisez module spider
.
La commande module spider
La sous-commande spider vous renseigne sur les modules qui sont chargés.
Prenons un exemple ː En voulant charger le module openmpi, vous recevez le message
nia-login07:~$ module load openmpi
Lmod has detected the error: These module(s) exist but cannot be loaded as requested: "openmpi"
Try: "module spider openmpi" to see how to load the module(s).
Ceci n'a pas fonctionné, mais le message fournit un indice, alors la commande serait
nia-login07:~$ module spider openmpi
------------------------------------------------------------------------------------------------------
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
------------------------------------------------------------------------------------------------------
Nous avons maintenant des détails sur comment utiliser la commande; profitons de ce conseil et modifions le script ː
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
Les directives expliquent comment charger ce module openmpi particulier.
nia-login07:~$ module load NiaEnv/2018a intel/2018.2
nia-login07:~$ module load openmpi/3.1.0rc3
nia-login07:~$ module list
Currently Loaded Modules:
1) NiaEnv/2018a (S) 2) intel/2018.2 3) openmpi/3.1.0.rc3
Where:
S: Module is Sticky, requires --force to unload or purge
Applications du commerce
- 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 par 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
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:
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:
- The optimization flags -O3 -xHost allow the Intel compiler to use instructions specific to the architecture CPU that is present (instead of for more generic x86_64 CPUs).
- 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 -mkl flags.
- If compiling with gcc, the optimization flags would be -O3 -march=native. For the way to link with the MKL, it is suggested to use the MKL link line advisor.
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.
Small test jobs can be run on the login nodes.
Rule of thumb: couple of minutes, taking at most about 1-2GB of memory, couple of cores.
You can run the the ddt debugger on the login nodes after
module load ddt
.Short tests that do not fit on a login node, or for which you need a dedicated node, request an
interactive debug job with the salloc commandnia-login07:~$ salloc -pdebug --nodes N --time=1:00:00
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.
Alternatively, on Niagara, you can use the command
nia-login07:~$ debugjob N
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.
Soumettre des tâches
Niagara uses SLURM as its job scheduler.
You submit jobs from a login node by passing a script to the sbatch command:
nia-login07:~$ sbatch jobscript.sh
This puts the job in the queue. It will run on the compute nodes in due course.
Jobs will run under their group's RRG allocation, or, if the group has none, under a RAS allocation (previously called `default' allocation).
Souvenez-vous ː
Scheduling is by node, so in multiples of 40-cores.
Maximum walltime is 24 hours.
Jobs must write to your scratch or project directory (home is read-only on compute nodes).
Compute nodes have no internet access.
Download data you need beforehand on a login node.
Ordonnancement par nœud
All job resource requests on Niagara are scheduled as a multiple of nodes.
- The nodes that your jobs run on are exclusively yours.
- No other users are running anything on them.
- You can ssh into them to see how things are going.
Whatever your requests to the scheduler, it will always be translated into a multiple of nodes.
Memory requests to the scheduler are of no use.
Your job gets N x 202GB of RAM if N is the number of nodes.
You should use all 40 cores on each of the nodes that your job uses.
You will be contacted if you don't, and we will help you get more science done.
Hyperthreading: Logical CPUs vs. cores
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.
So the OS and scheduler see 80 logical cores.
80 logical cores vs. 40 real cores typically gives about a 5-10% speedup (Your Mileage May Vary).
Because Niagara is scheduled by node, hyperthreading is actually fairly easy to use:
- Ask for a certain number of nodes N for your jobs.
- 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)
- But you should also test if running 80xN mpi processes or threads gives you any speedup.
- Regardless, your usage will be counted as 40xNx(walltime in years).
Exemple d'un script de soumission pour OpenMP
Suppose you want to run a single-node, multi-threaded application called appl_openmp_ex that uses OpenMP. The job script could look as follows:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --cpus-per-task=40
#SBATCH --time=1:00:00
#SBATCH --job-name openmp_ex
#SBATCH --output=openmp_ex_%j.txt
cd $SLURM_SUBMIT_DIR
module load intel/2018.2
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
./appl_openmp_ex
Submit this script (if it is called openmp_ex.sh) with the command:
nia-login07:~$ sbatch openmp_ex.sh
- 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
openmp_ex
) . - In this case, SLURM looks for one node with 40 cores to be run inside one task, for 1 hour.
- Once it found such a node, it runs the script:
- Change to the submission directory;
- Loads modules (must be done again in the submission script on Niagara);
- Sets an environment variable to set the number of threads to 40 (no hyperthreading in this example);
- Runs the
appl_openmp_ex
application.
- To use hyperthreading, just change --cpus-per-task=40 to --cpus-per-task=80.
Example submission script (MPI)
Suppose you want to run an MPI application called appl_mpi_ex with 320 processes. The job script could look as follows:
#!/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
module load intel/2018.2
module load openmpi/3.1.0rc3
mpirun ./appl_mpi_ex
Submit this script (if it is called mpi_ex.sh) with the command:
nia-login07:~$ sbatch mpi_ex.sh
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_ex
)In this case, SLURM looks for 8 nodes with 40 cores on which to run 320 tasks, for 1 hour.
Once it found such a node, it runs the script:
- Change to the submission directory;
- Loads modules;
- Runs the
appl_mpi_ex
application with mpirun (srun should work too).
- To use hyperthreading, just change --ntasks=320 to --ntasks=640, and add --bind-to none to the mpirun command (the latter is necessary for OpenMPI only, not when using IntelMPI).
Suivi des tâches en attente
Once the job is incorporated into the queue, there are some command you can use to monitor its progress.
squeue
orqsum
to show the job queue (squeue -u $USER
for just your jobs);squeue -j JOBID
to get information on a specific job(alternatively,
scontrol show job JOBID
, which is more verbose).squeue --start -j JOBID
to get an estimate for when a job will run; these tend not to be very accurate predictions.scancel -i JOBID
to cancel the job.sinfo -pcompute
to look at available nodes.jobperf JOBID
to get an instantaneous view of the cpu and memory usage of the nodes of the job while it is running.sacct
to get information on your recent jobs.
For more information, check out the wiki page devoted to Running jobs.
Data management and I/O tips
- $HOME, $SCRATCH, and $PROJECT all use the parallel file system called GPFS.
- Your files can be seen on all Niagara login and compute nodes.
- GPFS is a high-performance file system which provides rapid reads and writes to large data sets in parallel from many nodes.
- But accessing data sets which consist of many, small files leads to poor performance.
- Avoid reading and writing lots of small amounts of data to disk.
- Many small files on the system would waste space and would be slower to access, read and write.
- Write data out in binary. Faster and takes less space.
- Burst buffer (to come) is better for i/o heavy jobs and to speed up checkpoints.