Niagara Quickstart/fr: Difference between revisions

Jump to navigation Jump to search
Updating to match new version of source page
No edit summary
(Updating to match new version of source page)
Line 1: Line 1:
<languages />  
<languages />  


<div class="mw-translate-fuzzy">
=Renseignements et spécifications de la grappe=
=Renseignements et spécifications de la grappe=
</div>


<div class="mw-translate-fuzzy">
La grappe Niagara compte 1500 serveurs Lenovo SD350, chacun avec 40 cœurs Skylake de 2.4GHz.
La grappe Niagara compte 1500 serveurs Lenovo SD350, chacun avec 40 cœurs Skylake de 2.4GHz.
Sa performance de pointe est de 3.02 pétaflops (4.6 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].  
Sa performance de pointe est de 3.02 pétaflops (4.6 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>   


<div class="mw-translate-fuzzy">
Chaque nœud de la grappe est de 188Gio/202Go dont un minimum de 4Gio par cœur vont aux tâches des utilisateurs. 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'ordonnanceur Slurm accepte les 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.
Chaque nœud de la grappe est de 188Gio/202Go dont un minimum de 4Gio par cœur vont aux tâches des utilisateurs. 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'ordonnanceur Slurm accepte les 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.
</div>


Visionnez [https://support.scinet.utoronto.ca/education/go.php/370/content.php/cid/1383/ la vidéo de présentation de SciNet].
Visionnez [https://support.scinet.utoronto.ca/education/go.php/370/content.php/cid/1383/ la vidéo de présentation de SciNet].
Line 12: Line 18:
Pour plus d'information sur les spécifications matérielles, consultez [[Niagara/fr| la page Niagara]].
Pour plus d'information sur les spécifications matérielles, consultez [[Niagara/fr| la page Niagara]].


= Se connecter =
= 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.]
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 =
</div>


<div class="mw-translate-fuzzy">
Autrement, 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'').
Autrement, 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'').
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.
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.
</div>


<source lang="bash">
<source lang="bash">
Line 36: Line 52:
Si vous ne pouvez vous connecter, vérifiez d'abord [https://docs.scinet.utoronto.ca l'état de la grappe].
Si vous ne pouvez vous connecter, vérifiez d'abord [https://docs.scinet.utoronto.ca l'état de la grappe].


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


<div class="mw-translate-fuzzy">
== Répertoires ''home'' et ''scratch'' ==
== Répertoires ''home'' et ''scratch'' ==
</div>


<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 46: 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>
Line 66: Line 95:
'''''IMPORTANT : Mesure préventive '''''
'''''IMPORTANT : Mesure préventive '''''


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


= Gestion des données =
<div class="mw-translate-fuzzy">
== Systèmes de fichiers ==
= Stockage et quotas =
=== /home ===
</div>
Principalement destiné aux fichiers des utilisateurs, logiciels communs et ensembles de données de petite taille, pourvu qu'ils ne dépassent pas les quotas individuels; autrement, utilisez /scratch ou /project. Le système de fichiers /home est en lecture seule sur les nœuds de calcul.


=== /scratch ===
You should familiarize yourself with the [[Data_Management#Purpose_of_each_file_system | various file systems]], what purpose they serve, and how to properly use themThis table summarizes the various file systemsSee the [[Data_Management | Data Management]] page for more details.
Principalement destiné aux fichiers temporaires ou transitoires, résultat de calculs ou de simulations et au contenu pouvant être recréé ou réacquis. Peut aussi être utilisé pour les étapes intermédiaires d'un processus pourvu qu'il n'y ait pas trop d'opérations en lecture/écriture ou trop de petits fichiers pour cet espace de stockage sur disque partagé; autrement, utilisez /bb (''burst buffer''). Les résultats à conserver à long terme peuvent être migrés vers  /project ou /archive. Le système de fichiers /scratch est purgé régulièrement; aucune copie de sauvegarde n'en est faite.
 
=== /project ===
Principalement destiné aux logiciels de groupes communs, grands ensembles de données statiques et au contenu difficile à réacquérir ou regénérer par le groupe. <font color=red>Son contenu devrait être relativement stable dans le temps.</font> Les fichiers temporaires ou transitoires devraient se trouver sur /scratch. Le traitement intensif des données consomme beaucoup d'espace sur les bandes du système de sauvegarde TSM et ce longtemps après que les données sont supprimées, ceci en raison des politiques de rétention des sauvegardes et des versions supplémentaires du même fichier. Les utilisateurs qui en font un mauvais usage seront remarqués et contactés. Le système de fichiers /project est disponible uniquement aux groupes qui disposent de ressources allouées par concours.
 
=== /bb (''burst buffer'') ===
Mémoire tampon d'accès en rafale sur disques SSD, alternative très performante pour /scratch. Vous pouvez demander cette ressource si vous vous attendez à trop d'opérations IO/IOPs pour /scratch ou si la performance de votre tâche laisse à désirer sur /scratch ou /project parce que les opérations d'I/O causent des goulots d'étranglement. N'oubliez pas qu'en tout temps, seulement 232To sont disponibles pour les utilisateurs. Une fois que vos résultats sont produits, groupez-les (''bundle'' ou ''tarball'') et déplacez-les vers /scratch, /project ou /archive. Le système de fichiers /bb est purgé très fréquemment.
 
=== /archive ===
Espace de stockage partagé ''nearline'' utilisé pour héberger temporairement des données en provenance des autres systèmes de fichiers. En pratique, il sert à déposer et récupérer des données lors du déroulement d'un processus ou lorsque les quotas sont atteints dans /scratch ou /project. Ce contenu peut demeurer sur HPSS pendant quelques mois ou quelques années. Le système de fichiers /archive est disponible uniquement aux groupes qui disposent de ressources allouées par concours.
 
==Performance==
[http://en.wikipedia.org/wiki/IBM_General_Parallel_File_System GPFS] is a high-performance filesystem which provides rapid reads and writes to large datasets in parallel from many nodesAs a consequence of this design, however, '''the file system performs quite ''poorly'' at accessing data sets which consist of many, small files.''' For instance, you will find that reading data in from one 16MB file is enormously faster than from 400 40KB files. Such small files are also quite wasteful of space, as the blocksize for the scratch and project filesystems is 16MB. This is something you should keep in mind when planning your input/output strategy for runs on SciNet.
 
For instance, if you run multi-process jobs, having each process write to a file of its own is not an scalable I/O solution. A directory gets locked by the first process accessing it, so all other processes have to wait for it. Not only has the code just become considerably less parallel, chances are the file system will have a time-out while waiting for your other processes, leading your program to crash mysteriously.
Consider using MPI-IO (part of the MPI-2 standard), which allows files to be opened simultaneously by different processes, or using a dedicated process for I/O to which all other processes send their data, and which subsequently writes this data to a single file.
 
== Déplacer des données ==
=== Avec rsync/scp ===
'''''Déplacer moins de 10Go par les nœuds de connexion'''''
 
* Seulement les nœuds de connexion Niagara visibles de l'extérieur de SciNet.
* Utilisez scp ou rsync vers niagara.scinet.utoronto.ca ou niagara.computecanada.ca (aucune différence).
* Il y aura interruption dans les cas où il y a plus qu'environ 10Go.
 
'''''Déplacer plus de 10Go par les nœuds de copie'''''
 
* À partir d'un nœud de connexion Niagara par ssh vers <code>nia-datamover1</code> ou  <code>nia-datamover2</code>.
* Les transferts doivent se faire à partir de ce nœud de copie.
* L'autre partie (votre ordinateur) doit pouvoir être rejointe de l'extérieur.
* Si vous transférez souvent de telles quantités, considérez l'outil web [[Globus/fr|Globus]].
 
'''''Déplacer des données vers HPSS/Archive/Nearline avec l'ordonnanceur'''''
 
*[https://docs.scinet.utoronto.ca/index.php/HPSS HPSS] est une solution de stockage sur bandes employée comme espace ''nearline'' par SciNet.
*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].
 
=== Avec Globus ===
Si vous déplacez souvent des quantités de plus de 10Go, considérez l'outil web Globus.
 
Consultez la  [[globus/fr | documentation Globus]].
 
Le point de chute Globus est "computecanada#niagara".
 
= Stockage et quotas =


<div class="mw-translate-fuzzy">
{| class="wikitable"
{| class="wikitable"
!   
!   
Line 169: Line 155:
| ?
| ?
|}
|}
</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://docs.scinet.utoronto.ca/index.php/HPSS HPSS] qui est 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'') désigne la mémoire tampon d'accès en rafale. </p></li></ul>
 
==File/Ownership Management (ACL)==
* By default, at SciNet, users within the same group already have read permission to each other's files (not write)
* You may use access control list ('''ACL''') to allow your supervisor (or another user within your group) to manage files for you (i.e., create, move, rename, delete), while still retaining your access and permission as the original owner of the files/directories. You may also let users in other groups or whole other groups access (read, execute) your files using this same mechanism.


<!--
If you need to move data to Niagara for analysis, or when you need to move data off of Niagara, use the following guidelines:
===Using  setfacl/getfacl===
* If your data is less than 10GB, move the data using the login nodes.
* To allow [supervisor] to manage files in /project/g/group/[owner] using '''setfacl''' and '''getfacl''' commands, follow the 3-steps below as the [owner] account from a shell:
* 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 .
<pre>
1) $ /scinet/gpc/bin/setfacl -d -m user:[supervisor]:rwx /project/g/group/[owner]
  (every *new* file/directory inside [owner] will inherit [supervisor] ownership by default from now on)


2) $ /scinet/gpc/bin/setfacl -d -m user:[owner]:rwx /project/g/group/[owner]
Details of how to use the datamover nodes can be found on the [[Data_Management#Moving_data | Data Management ]] page.
  (but will also inherit [owner] ownership, ie, ownership of both by default, for files/directories created by [supervisor])


3) $ /scinet/gpc/bin/setfacl -Rm user:[supervisor]:rwx /project/g/group/[owner]
= Charger des modules =
  (recursively modify all *existing* files/directories inside [owner] to also be rwx by [supervisor])
 
  $ /scinet/gpc/bin/getfacl /project/g/group/[owner]
  (to determine the current ACL attributes)
 
  $ /scinet/gpc/bin/setfacl -b /project/g/group/[owner]
  (to remove any previously set ACL)
 
PS: on the datamovers getfacl, setfacl and chacl will be on your path
</pre>
For more information on using [http://linux.die.net/man/1/setfacl <tt>setfacl</tt>] or [http://linux.die.net/man/1/getfacl <tt>getfacl</tt>] see their man pages.
 
-->
===Using mmputacl/mmgetacl===
* You may use gpfs' native '''mmputacl''' and '''mmgetacl''' commands. The advantages are that you can set "control" permission and that [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm1160.html POSIX or NFS v4 style ACL] are supported. You will need first to create a /tmp/supervisor.acl file with the following contents:
<pre>
user::rwxc
group::----
other::----
mask::rwxc
user:[owner]:rwxc
user:[supervisor]:rwxc
group:[othegroup]:r-xc
</pre>
 
Lancez ensuite les deux commandes
<pre>
1) $ mmputacl -i /tmp/supervisor.acl /project/g/group/[owner]
2) $ mmputacl -d -i /tmp/supervisor.acl /project/g/group/[owner]
  (every *new* file/directory inside [owner] will inherit [supervisor] ownership by default as well as
  [owner] ownership, ie, ownership of both by default, for files/directories created by [supervisor])
 
  $ mmgetacl /project/g/group/[owner]
  (to determine the current ACL attributes)
 
  $ mmdelacl -d /project/g/group/[owner]
  (to remove any previously set ACL)
 
  $ mmeditacl /project/g/group/[owner]
  (to create or change a GPFS access control list)
  (for this command to work set the EDITOR environment variable: export EDITOR=/usr/bin/vi)
</pre>
 
NOTES:
* There is no option to recursively add or remove ACL attributes using a gpfs built-in command to existing files. You'll need to use the -i option as above for each file or directory individually. [https://docs.scinet.utoronto.ca/index.php/Recursive_ACL_script Here is a sample bash script you may use for that purpose]]
 
* mmputacl will not overwrite the original linux group permissions for a directory when copied to another directory already with ACLs, hence the "#effective:r-x" note you may see from time to time with mmgetacf. If you want to give rwx permissions to everyone in your group you should simply rely on the plain unix 'chmod g+rwx' command. You may do that before or after copying the original material to another folder with the ACLs.
 
* Pour ce qui est de PROJECT, le superviseur de votre groupe devra définir les accès ACL appropriés au niveau /project/G/GROUP pour que les utilisateurs des autres groupes puissent avoir accès à vos fichiers.
 
* ACL ne vous permet pas d'accorder des permissions pour des fichiers ou des répertoires qui ne vous appartiennent pas.
 
* We highly recommend that you never give write permission to other users on the top level of your home directory (/home/G/GROUP/[owner]), since that would seriously compromise your privacy, in addition to disable ssh key authentication, among other things. If necessary, make specific sub-directories under your home directory so that other users can manipulate/access files from those.
 
Pour plus d'information, consultez [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm11120.html <tt>mmputacl</tt>] et [http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.gpfs.doc%2Fgpfs31%2Fbl1adm11120.html <tt>mmgetaclacl</tt>].
 
===Recursive ACL script ===
You may use/adapt '''[https://docs.scinet.utoronto.ca/index.php/Recursive_ACL_script this sample bash script]''' to recursively add or remove ACL attributes using gpfs built-in commands
 
Courtoisie d'Agata Disks (http://csngwinfo.in2p3.fr/mediawiki/index.php/GPFS_ACL).
 
==Politique de purge pour ''scratch''==


In order to ensure that there is always significant space available for running jobs '''we automatically delete files in /scratch that have not been accessed or modified for more than 2 months by the actual deletion day on the 15th of each month'''. Note that we recently changed the cut out reference to the ''MostRecentOf(atime,ctime)''. This policy is subject to revision depending on its effectiveness. More details about the purging process and how users can check if their files will be deleted follows. If you have files scheduled for deletion you should move them to more permanent locations such as your departmental server or your /project space or into HPSS (for PIs who have either been allocated storage space by the RAC on project or HPSS).
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.
 
On the '''first''' of each month, a list of files scheduled for purging is produced, and an email notification is sent to each user on that list. You also get a notification on the shell every time your login to Niagara. Furthermore, at/or about the '''12th''' of each month a 2nd scan produces a more current assessment and another email notification is sent. This way users can double check that they have indeed taken care of all the files they needed to relocate before the purging deadline. Those files will be automatically deleted on the '''15th''' of the same month unless they have been accessed or relocated in the interim. If you have files scheduled for deletion then they will be listed in a file in /scratch/t/todelete/current, which has your userid and groupid in the filename. For example, if user xxyz wants to check if they have files scheduled for deletion they can issue the following command on a system which mounts /scratch (e.g. a scinet login node): '''ls -1 /scratch/t/todelete/current |grep xxyz'''. In the example below, the name of this file indicates that user xxyz is part of group abc, has 9,560 files scheduled for deletion and they take up 1.0TB of space:
 
<pre>
[xxyz@nia-login03 ~]$ ls -1 /scratch/t/todelete/current |grep xxyz
-rw-r----- 1 xxyz    root      1733059 Jan 17 11:46 3110001___xxyz_______abc_________1.00T_____9560files
</pre>
 
Le fichier contient (dans la dernière colonne) la liste de tous les fichiers à supprimer, visible avec des commandes standards comme more/less/cat, par exemple '''more /scratch/t/todelete/current/3110001___xxyz_______abc_________1.00T_____9560files'''
 
Similarly, you can also verify all other users on your group by using the ls command with grep on your group. For example: '''ls -1 /scratch/t/todelete/current |grep abc'''. That will list all other users in the same group that xxyz is part of, and have files to be purged on the 15th. Members of the same group have access to each other's contents.
 
'''NOTE:''' Preparing these assessments takes several hours. If you change the access/modification time of a file in the interim, that will not be detected until the next cycle. A way for you to get immediate feedback is to use the ''''ls -lu'''' command on the file to verify the ctime and ''''ls -lc'''' for the mtime. If the file atime/ctime has been updated in the meantime, coming the purging date on the 15th it will no longer be deleted.
 
==Vérifier l'espace disque disponible==
 
The <tt>'''/scinet/niagara/bin/diskUsage'''</tt> command, available on the login nodes and datamovers, provides information in a number of ways on the home, scratch, project and archive file systems. For instance, how much disk space is being used by yourself and your group (with the -a option), or how much your usage has changed over a certain period ("delta information") or you may generate plots of your usage over time. Please see the usage help below for more details.
<pre>
Usage: diskUsage [-h|-?| [-a] [-u <user>]
      -h|-?: help
      -a: list usages of all members on the group
      -u <user>: as another user on your group
</pre>
 
Pour savoir quels sont vos répertoires qui contiennent plus de 1000 fichiers, utilisez la commande <tt>'''/scinet/niagara/bin/topUserDirOver1000list'''</tt>; la commande <tt>'''/scinet/niagara/bin/topUserDirOver1GBlist'''</tt> vous permet de savoir quels répertoires contiennent plus de 1Go.
 
Note :
* les renseignements sur l'utilisation et les quotas est mise à jour aux trois heures seulement.
 
= Trucs pour les opérations lecture/écriture =
 
* $HOME, $SCRATCH et $PROJECT utilisent tous le système de fichiers parallèle GPFS.
* Vos fichiers sont visibles sur tous les nœuds de connexion et de calcul de Niagara.
* GPFS est un système de fichiers haute performance avec des entrées/sorties rapides sur plusieurs nœuds pour de grands ensembles de données.
* Cependant, l'accès à des ensembles de données constitués de plusieurs petits fichiers engendre une faible performance.
* Évitez de lire et écrire plusieurs petites quantités de données sur les disques.<br />
 
* Un système constitué de plusieurs petits fichiers utilise mal l'espace disponible et ralentit l'accès, la lecture et l'écriture.
* Écrivez vos données en binaire pour plus de vitesse et une économie de l'espace.
* La fonctionnalité ''burst buffer'' est en préparation; elle facilitera les entrées/sorties pour les tâches intensives et accélérera la création et l'enregistrement des points de contrôle.
 
= Charger des modules =


<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
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.


  anaconda2: anaconda2/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>.


  anaconda3: anaconda3/5.1.0
== Software stacks: NiaEnv and CCEnv ==
 
  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
 
  ...</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>


<div class="mw-translate-fuzzy">
Il y a en réalité deux environnements logiciels sur Niagara ː
Il y a en réalité deux environnements logiciels sur Niagara ː
</div>


<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>
Line 339: Line 197:
<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 346: Line 203:
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.


<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].
Voyez l'information sur les [https://docs.scinet.utoronto.ca/index.php/Bashrc_guidelines fichiers par défaut .bashrc et .bash_profile].
</div>


Instead, load modules by hand when needed, or by sourcing a separate script.
Instead, load modules by hand when needed, or by sourcing a separate script.
Line 353: Line 212:


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.
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.
Certaines abréviations sont utiles ː
<pre class="sh">
        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éalable d'autres modules.
Certains modules requièrent le chargement préalable d'autres modules.
Line 366: Line 217:
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 =


La sous-commande ''spider'' vous renseigne sur les modules qui sont chargés.
* 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.
* Open source interpreted, interactive software is also available:
** [[Python]]
** [[R]]
** Julia
** Octave
 
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]].


Prenons un exemple ː En voulant charger le module openmpi, vous recevez le message
<div class="mw-translate-fuzzy">
<source lang="bash">nia-login07:~$ module load openmpi
Applications du commerce =
Lmod has detected the error:  These module(s) exist but cannot be loaded as requested: "openmpi"
</div>
  Try: "module spider openmpi" to see how to load the module(s).</source>
Ceci n'a pas fonctionné, mais le message fournit un indice, alors la commande serait
<source lang="bash">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
------------------------------------------------------------------------------------------------------</source>
Nous avons maintenant des détails sur comment utiliser la commande; profitons de ce conseil et modifions le script ː
<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>
Les directives expliquent comment charger ce module openmpi particulier.
<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:
May I use commercial software on Niagara?
  S:  Module is Sticky, requires --force to unload or purge</source>
 
=  Applications du commerce =


<div class="mw-translate-fuzzy">
* Vous devrez peut-être fournir votre propre licence.
* 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.
* 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.
Line 423: Line 243:
* Nous vous aiderons à installer toute application du commerce pour laquelle vous détenez une licence.
* 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.
* 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 =
Line 445: Line 266:
</source>
</source>


<div class="mw-translate-fuzzy">
Note :
Note :
* 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).
* 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).
* 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>.
* 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].
* 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 =
Line 454: Line 277:
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.
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>Les tâches de test courtes peuvent être exécutées sur les nœuds de connexion.</p>
<li><p>Les tâches de test courtes peuvent être exécutées sur les nœuds de connexion.</p>
Line 466: Line 290:
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.
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.
</li></ul>
</li></ul>
 
</div>
== Testing with Graphics: X-forwarding ==
If you need to use graphics while testing your code, e.g. when using a debugger such as DDT or DDD, you have the following options:
 
<ul>
<li> You can use the <code>debugjob</code> command which automatically provides X-forwarding support.
<source lang="bash">
$ ssh  niagara.scinet.utoronto.ca -X
 
USER@nia-login07:~$ debugjob
debugjob: Requesting 1 nodes for 60 minutes
xalloc: Granted job allocation 189857
xalloc: Waiting for resource configuration
xalloc: Nodes nia0030 are ready for job
 
[USER@nia1265 ~]$
</source>
 
<li> If <code>debugjob</code> is not suitable for your case due to the limitations either on time or resources (see above [[#Testing]]), then you have to follow these steps:
 
You will need two terminals in order to achieve this:
<ol>
<li>In the 1st terminal
<ul>
<li> ssh to <code>niagara.scinet.utoronto.ca</code> and issue your <code>salloc</code> command
<li> wait until your resources are allocated and you are assigned the nodes
<li> take note of the node where you are logged to, ie. the head node, let's say <code>niaWXYZ</code>
</ul>
<source lang="bash">
$ ssh  niagara.scinet.utoronto.ca
USER@nia-login07:~$ salloc --nodes 5 --time=2:00:00
 
.salloc: Granted job allocation 141862
.salloc: Waiting for resource configuration
.salloc: Nodes nia1265 are ready for job
 
[USER@nia1265 ~]$
</source>
 
<li> On the second terminal:
<ul>
<li> ssh into <code>niagara.scinet.utoronto.ca</code> now using the <code>-X</code> flag in the ssh command
 
<li> after that <code>ssh -X niaWXYZ</code>, ie. you will ssh carrying on the '-X' flag into the head node of the job
 
<li> in the <code>niaWXYZ</code> you should be able to use graphics and should be redirected by x-forwarding to your local terminal
</ul>
 
<source lang="bash">
ssh niagara.scinet.utoronto.ca -X
USER@nia-login07:~$ ssh -X nia1265
[USER@nia1265 ~]$ xclock  ## just an example to test the graphics, a clock should pop up, close it to exit
[USER@nia1265 ~]$ module load ddt  ## load corresponding modules, eg. for DDT
[USER@nia1265 ~]$ ddt  ## launch DDT, the GUI should appear in your screen
</source>
 
</ol>
</ul>
 
 
Observations:
<ul>
<li> If you are using ssh from a Windows machine, you need to have an X-server, a good option is to use MobaXterm, that already brings an X-server included.
<li> If you are in Mac OS, substitute -X by -Y
<li> Instead of using two terminals, you could just use <code>screen</code> to request the resources and then detach the session and ssh into the head node directly.
</ul>


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


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>Niagara utilise l'ordonnanceur Slurm.</p></li>
<li><p>Niagara utilise l'ordonnanceur Slurm.</p></li>
Line 541: Line 301:
<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>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>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>
<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>L'ordonnancement se fait par nœud, donc en multiples de 40 cœurs.</p></li>
<li><p>L'ordonnancement se fait par nœud, donc en multiples de 40 cœurs.</p></li>
Line 550: Line 312:
<li><p>Les nœuds de calcul ne peuvent accéder à l'internet.</p>
<li><p>Les nœuds de calcul ne peuvent accéder à l'internet.</p>
<p>Avant de commencer, téléchargez les données sur un nœud de connexion. </p></li></ul>
<p>Avant de commencer, téléchargez les données sur un nœud de connexion. </p></li></ul>
</div>


== SLURM nomenclature: jobs, nodes, tasks, cpus, cores, threads  ==
<div class="mw-translate-fuzzy">
 
SLURM, which is the job scheduler used on Niagara, has a somewhat different way of referring to things like mpi processes and threads tasks.  The SLURM nomenclature is reflected in the names of scheduler option (i.e., resource requests). SLURM strictly enforces those requests, so it is important to get this right.
 
{| class="wikitable"
!term
!meaning
!SLURM term
!related scheduler options
|-
|job
|scheduled piece of work for which specific resources were requested.
|job
|<tt>sbatch, salloc</tt>
|-
|node
|basic computing component with several cores (40 for Niagara) that share memory 
|node
|<tt>--nodes -N</tt>
|-
|mpi process
|one of a group of running programs using Message Passing Interface for parallel computing
|task
|<tt>--ntasks -n --ntasks-per-node</tt>
|-
|core ''or'' physical cpu
|A fully functional independent physical execution unit.
| - 
| -
|-
|logical cpu
|An execution unit that the operating system can assign work to. Operating systems can be configured to overload physical cores with multiple logical cpus using hyperthreading.
|cpu
|<tt>--ncpus-per-task</tt>
|-
|thread
|one of possibly multiple simultaneous execution paths within a program, which can share memory.
| -
| <tt>--ncpus-per-task</tt> '''and''' <tt>OMP_NUM_THREADS</tt>
|-
|hyperthread
|a thread run in a collection of threads that is larger than the number of physical cores.
| -
| -
|}
 
== Ordonnancement par nœud ==
== Ordonnancement par nœud ==
</div>


<div class="mw-translate-fuzzy">
<ul>
<ul>
<li><p>Toutes les requêtes de ressources pour les tâches sont ordonnancées en multiples de '''nœuds'''.</p></li>
<li><p>Toutes les requêtes de ressources pour les tâches sont ordonnancées en multiples de '''nœuds'''.</p></li>
Line 610: Line 330:
<p>Votre tâche obtient toujours Nx202Go de mémoire vive, où N représente le nombre de nœuds.</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>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>
<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>
 
</div>
== CPU logiques vs cœur ː ''Hyperthreading'' ==
 
Niagara fait usage de la technologie de ''l'hyperthreading'' qui augmente la capacité du matériel en prétendant qu'il y a deux fois plus de cœurs logiques qu'il n'y en a en réalité.
 
Le système d'exploitation et l'ordonnanceur voient alors 80 cœurs.
 
Utiliser 80 cœurs logiques contre 40 cœurs réels augmente la vitesse de 5 à 10% (variable selon les cas).
 
Puisque l'ordonnancement se fait par nœud, cette technologie est plutôt facile à utiliser.
 
<ul>
<li>Demandez N nœuds pour vos tâches. </li>
<li>Vous savez que vous obtenez 40xN cœurs, alors vous utiliserez (au moins) un total de  40xN processus mpi ou fils. (mpirun, srun, et le système d'exploitation les répartissent automatiquement sur les cœurs réels).</li>
<li>Vous devriez aussi voir si vous obtenez plus de vitesse si vous exécutez 80xN processus mpi ou fils.</li>
<li>Peu importe, votre utilisation sera comptabilisée comme étant 40xN x (temps réel en années).</li>
</ul>


== Limits ==
== Limits ==
Line 644: Line 348:
|Compute jobs with an allocation||compute || 50 || 1000 || 1 node (40 cores) || 1000 nodes (40000 cores)|| 15 minutes || 24 hours
|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 || 12 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
|Testing or troubleshooting || debug || 1 || 1 || 1 node (40 cores) || 4 nodes (160 cores)|| N/A || 1 hour
Line 655: Line 359:
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.
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.


== SLURM Accounts ==
== File Input/Output Tips ==


To be able to prioritise jobs based on groups and allocations, the SLURM scheduler uses the concept of ''accounts''.  Each group that has a Resource for Research Groups (RRG) or Research Platforms and Portals (RPP) allocation (awarded through an annual competition by Compute Canada) has an account that starts with <tt>rrg-</tt> or <tt>rpp-</tt>SLURM assigns a 'fairshare' priority to these accounts based on the size of the award in core-years. Groups without an RRG or RPP can use Niagara using a so-called Rapid Access Service (RAS), and have an account that starts with <tt>def-</tt>.
It is important to understand the file systems, so as to perform your file I/O (Input/Output) responsiblyRefer to the [[Data_Management | Data Management]] page for details about the file systems.
 
* Your files can be seen on all Niagara login and compute nodes.
On Niagara, most users will only ever use one account, and those users do not need to specify the account to SLURM.  However, users that are part of collaborations may be able to use multiple accounts, i.e., that of their sponsor and that of their collaborator, but this mean that they need to select the right account when running jobs.  
* $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.
To select the account, just add
* 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 diskMany small files on the system waste space and are slower to access, read and writeIf you must write many small files, use [https://docs.scinet.utoronto.ca/index.php/User_Ramdisk ramdisk].
    #SBATCH -A [account]
* 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].
to the job scripts, or use the <tt>-A [account]</tt> to <tt>salloc</tt> or <tt>debugjob</tt>.  
 
To see which accounts you have access to, or what their names are, use the command
 
    sshare -U
 
== Passing Variables to Job's submission scripts ==
It is possible to pass values through environment variables into your SLURM submission scripts.
For doing so with already defined variables in your shell, just add the following directive in the submission script,
 
#SBATCH --export=ALL
 
and you will have access to any predefined environment variable.
 
A better way is to specify explicitly which variables you want to pass into the submision script,
 
  sbatch --export=i=15,j='test' jobscript.sbatch
 
You can even set the job name and output files using environment variables, eg.
 
  i="simulation"
j=14
sbatch --job-name=$i.$j.run --output=$i.$j.out --export=i=$i,j=$j jobscript.sbatch
 
(The latter only works on the command line; you cannot use environment variables in <tt>#SBATCH</tt> lines in the job script.)
 
'''Arguments en ligne de commande'''
 
Command line arguments can also be used in the same way as command line argument for shell scripts. All command line arguments given to sbatch that follow after the job script name, will be passed to the job script. In fact, SLURM will not look at any of
these arguments, so you must place all sbatch arguments before the script name, e.g.:
 
sbatch  -p debug  jobscript.sbatch  FirstArgument SecondArgument ...
 
In this example, <tt>-p debug</tt> is interpreted by SLURM, while in your submission script you can access <tt>FirstArgument</tt>, <tt>SecondArgument</tt>, etc., by referring to <code>$1, $2, ...</code>.
 
== Email Notification ==
Email notification works, but you need to add the email address and type of notification you may want to receive in your submission script, eg.
 
    #SBATCH --mail-user=YOUR.email.ADDRESS
    #SBATCH --mail-type=ALL
 
If you omit the mail-user option, the scheduler will use the primary email address associated with your Compute Canada account.
 
The sbatch man page (type <tt>man sbatch</tt> on Niagara) explains all possible mail-types.


<div class="mw-translate-fuzzy">
== Exemple d'un script de soumission pour MPI ==
== 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 ː
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">
<source lang="bash">
#!/bin/bash  
#!/bin/bash  
#SBATCH --nodes=8
#SBATCH --nodes=2
#SBATCH --ntasks=320
#SBATCH --ntasks=80
#SBATCH --time=1:00:00
#SBATCH --time=1:00:00
#SBATCH --job-name mpi_ex
#SBATCH --job-name mpi_job
#SBATCH --output=mpi_ex_%j.txt
#SBATCH --output=mpi_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
module load openmpi/3.1.0rc3
module load openmpi/3.1.0
 
mpirun ./appl_mpi_ex
mpirun ./mpi_example
# or "srun ./mpi_example"
</source>
</source>
<div class="mw-translate-fuzzy">
Soumettez le script (nommé ici mpi_ex.sh) avec la commande  
Soumettez le script (nommé ici mpi_ex.sh) avec la commande  
<source lang="bash">nia-login07:~$ sbatch mpi_ex.sh</source>
<source lang="bash">nia-login07:~$ sbatch mpi_ex.sh</source>
Line 741: Line 406:
<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>
<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>
</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


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


Dans cet exemple, nous allons exécuter sur un nœud unique l'application multifil <tt>appl_openmp_ex</tt> qui utilise [[OpenMP/fr|OpenMP]]. Le script est le suivant :
<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
 
./openmp_example
./openmp_example
# or "srun ./openmp_example".
# or "srun ./openmp_example".
</source>
</source>
<div class="mw-translate-fuzzy">
Soumettez le script (nommé openmp_ex.sh) avec la commande <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>
* La première ligne mentionne qu'il s'agit d'un script bash.
* La première ligne mentionne qu'il s'agit d'un script bash.
Line 772: Line 455:
** exécute l'application  <code>appl_openmp_ex</code>.
** exécute l'application  <code>appl_openmp_ex</code>.
* Pour utiliser la fonctionnalité hyperthreading, remplacez <tt>--cpus-per-task=40</tt> par <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>


<div class="mw-translate-fuzzy">
= Suivi des tâches en attente =
= Suivi des tâches en attente =
</div>


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


<div class="mw-translate-fuzzy">
<ul>
<ul>
<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><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>
Line 784: Line 471:
<p>
<p>
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 ː
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>


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


= Visualisation =
= Visualisation =
38,757

edits

Navigation menu