Newton

Configuration

Newton est un cluster Dell C6320 d'une capacité de 40 Tflops, comprenant actuellement 55 noeuds dédiées aux queues de calcul intensif qui totalisent :

  • 884 coeurs Haswell à 2.60GHz
  • 6,4 To de RAM DDR4
  • 38 To utiles pour le stockage de type /home, 1To pour les softs et 1To de stockage pour des besoins spécifiques 
  • 55 x 1To utiles pour le stockage temporaire local (de type /tmp),
  • réseaux d'interconnexion InfiniBand QDR pour la production et Ethernet Gb (management et IDRAC),
  • systèmes CentOS 7.3
  • système de batch SLURM

Composition 

Newton est composé

  • d'une machine de login (login),
  • d'une machine de compilation (compil),
  • d'une machine de visualisation (visu),
  • d'un serveur de fichiers NFS partagé (40 To),
  • des serveurs de stockage dédiés à des projets, 
  • de noeuds de calcul.

Cet ensemble est géré depuis un noeud d'administration ("invisible" aux utilisateurs).

Il y a actuellement trois types de noeuds de calcul :

thin (newton-t-#) fat ou intermediate (newton-f-#) xfat (newton-x-#)
CPU Bi-Xeon E5-2640v3, 16C Bi-Xeon E5-2640v3, 16C Bi-Xeon E5-2640v3, 16C
RAM 64 Go 256 Go 512 Go
nombre 45*   6  4 

* le dernier noeud thin (newton-t-45) dispose de 20 cores et 80 Go.

Ces différentes machines sont reliées via un réseau Infiniband QDR par l'intermédiaire de 4 switchs Intel, disposés en arbre. 

Connexion à la frontale

La frontale est accessible par SSH directement depuis les réseaux de l'École Centrale (LMFA, LTDS, Ampère, INL, LIRIS, ICJ). Pour se connecter depuis l'extérieur, vous pouvez utiliser le VPN de l'école ou bien la passerelle SSHGATE.

ssh mon_login@login.pmcs2i.ec-lyon.fr

Cette frontale sert à effectuer les transferts de données.

Accès en mode graphique

Pour certains usages, il peut être intéressant d'avoir accès un "bureau" graphique. Pour cela, la machine visu du cluster newton a été équipé d'un serveur x2go.
Après installation du client sur votre poste, lancez x2go et configurer comme suit :

 
Une fois la configuration créée, cliquez dessus pour vous connecter et un bureau graphique XFCE s'ouvrira.

Pour info, ce système est également accessible via le VPN de l'ECL.

Commandes SLURM utiles

  • sinfo : interrogation des files d'attente ;
  • sbatch : soumission d'un job dans une file d'attente (appelées partitions dans Slurm) ;
  • scancel : suppression d'un job ;
  • squeue : interrogation des jobs ;
  • srun : exécution immédiate d'une commande ;
  • salloc : batch interactif, obtention d'un shell, permettant d'enchaîner plusieurs commandes sur les mêmes ressources ;
  • sprio : priorités relatives entre les jobs en attente.

Compilation

Depuis la machine de login, vous DEVEZ vous connecter sur la machine de compilation (compil), qui fourni les outils standards (gcc, make, ...) issu de la distribution Centos 7.2.

[mon_login@login ~]$ ssh compil
Last login: Wed Mar  9 17:26:15 2016 from 172.16.0.21
[mon_login@compil ~]$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)

Toutefois, de nombreux modules optimisés sur les noeuds de calcul sont également disponibles sur cette machine et les noeuds de calcul.

[mon_login@compil ~]$ module avail

---------------------------------------------- /softs/modules/compiler ----------------------------------------------
GCC/4.6.3               GCC/4.8.1               GCC/4.9.3-2.25          GCCcore/4.9.3
GCC/4.7.2               GCC/4.9.2               GCC/4.9.3-binutils-2.25

------------------------------------------------ /softs/modules/mpi -------------------------------------------------
OpenMPI/1.6.4-GCC-4.7.2 OpenMPI/1.6.5-GCC-4.8.1 OpenMPI/1.8.4-GCC-4.9.2

...

Pour charger le module qui vous intéresse (à la fois pour la compilation ou au sein d'un script de batch slurm) :

[mon_login@compil ~]$ module load icc/2015.1.133

Partitions

Les partitions correspondent aux queues de soumission de jobs sur Newton. Elles sont regroupant les noeuds à quantité de mémoire égale.
Chaque noeud de calcul dispose de 16 coeurs.

Queue par défaut

La queue par défaut est définie dans la partition thin.

Queue Durée par default Durée max. No. max nodes par job No. max de noeuds par queue
thin* 10 min 24h 16 42

Noeuds à 64 Go mémoire RAM

On dispose actuellement de 45 noeuds à 64 Go RAM qui sont dédiés aux queues suivantes :

Queue Durée par default Durée max. Nb. max de noeuds par job Nb. total de noeuds
thin 10 min 24h 16 43
thinlong 10 min 48h 8 43
thinxlong 10 min 96h 4 43
test 10 min 1h 2 2

Remarque : la queue test est définie sur deux noeuds dédiés. Les ressources de ces noeuds (CPU, mémoire) sont partagées entre tous les jobs de la queue.

Remarque : Le dernier noeud thin (newton-t-45) dispose en fait de plus de RAM (80 Go) car il possède plus de coeurs (20), en conservant la même quantité de RAM par coeur (4Go par coeur).

Noeuds à 256 Go mémoire RAM

On dispose actuellement de six noeuds à 256 Go RAM qui sont dédiés aux queues fat et fatlong :

Queue Durée par default Durée max. Nb. max noeuds par job Nb. total de noeuds
fat 10 min 24h 4 6
fatlong 10 min 48h 2 6

Noeuds à 512 Go mémoire RAM

On dispose actuellement de quatre noeuds à 512 Go RAM qui sont dédiés aux queues xfat et xfatlong :

Queue Durée par default Durée max. Nb. max noeuds par job Nb. total de noeuds
xfat 10 min 24h 2 4
xfatlong 10 min 48h 1 4

Informations sur l'état des ressources de calcul

Suivre la configuration et l'utilisation des queues en temps réel

sinfo -l
Fri Jan 20 16:13:21 2017
PARTITION AVAIL  TIMELIMIT   JOB_SIZE ROOT    SHARE     GROUPS  NODES       STATE NODELIST
thin*        up 1-00:00:00       1-16   no    YES:4        all      1       mixed newton-t-40
thin*        up 1-00:00:00       1-16   no    YES:4        all     14   allocated newton-t-[03-12,37-39,45]
thin*        up 1-00:00:00       1-16   no    YES:4        all     28    reserved newton-t-[13-36,41-44]
thinlong     up 2-00:00:00        1-8   no    YES:4        all      1       mixed newton-t-40
thinlong     up 2-00:00:00        1-8   no    YES:4        all     14   allocated newton-t-[03-12,37-39,45]
thinlong     up 2-00:00:00        1-8   no    YES:4        all     28    reserved newton-t-[13-36,41-44]
thinxlong    up 4-00:00:00        1-4   no    YES:4        all      1       mixed newton-t-40
thinxlong    up 4-00:00:00        1-4   no    YES:4        all     14   allocated newton-t-[03-12,37-39,45]
thinxlong    up 4-00:00:00        1-4   no    YES:4        all     28    reserved newton-t-[13-36,41-44]
fat          up 1-00:00:00        1-4   no    YES:4        all      6    reserved newton-f-[01-06]
fatlong      up 2-00:00:00        1-2   no    YES:4        all      6    reserved newton-f-[01-06]
xfat         up 1-00:00:00        1-2   no    YES:4        all      4    reserved newton-x-[01-04]
xfatlong     up 2-00:00:00          1   no    YES:4        all      4    reserved newton-x-[01-04]
test         up    1:00:00 1-infinite   no  FORCE:4        all      2    reserved newton-t-[01-02]

Avoir une estimation de l'heure de démarrage des jobs

$ squeue --start
             JOBID PARTITION     NAME     USER ST          START_TIME  NODES SCHEDNODES           NODELIST(REASON)
             23251 thinxlong MIYANO-t rpereira PD                 N/A      1 (null)               (AssocMaxJobsLimit)
             23252 thinxlong MIYANO-t rpereira PD                 N/A      1 (null)               (AssocMaxJobsLimit)
             23308      thin OpenFOAM easybuil PD 2016-08-26T18:44:11      1 newton-t-13          (Resources)
             23310      thin      he1   ljiang PD 2016-08-26T18:44:11      1 newton-t-14          (Priority)
             23311      thin      he2   ljiang PD 2016-08-26T18:44:11      1 newton-t-15          (Priority)
             23274  thinlong  HS3_TND   abarge PD 2016-08-27T10:48:57      4 newton-t-[41-44]     (Resources)
             23289  thinlong KTH_PBS.   qrendu PD 2016-08-27T10:48:57      6 newton-t-[16-18,24,2 (Resources)
             23290  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 newton-t-[05-06,08-0 (Resources)
             23291  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23292  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23293  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23294  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23295  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23296  thinlong KTH_PBS.   qrendu PD 2016-08-27T17:26:26      6 (null)               (Resources)
             23152      thin pod_60_a   pspelt PD 2016-08-28T10:30:19     16 newton-t-[09,12-18,2 (Priority)

Connaître la priorité des jobs en attente

$ sprio -l
          JOBID     USER   PRIORITY        AGE  FAIRSHARE    JOBSIZE  PARTITION        QOS   NICE                 TRES
          23152   pspelt       5741       5577        164          0          1          0      0                     
          23251 rpereira      27394       1486      25907          0          1          0      0                     
          23252 rpereira      27390       1482      25907          0          1          0      0                     
          23274   abarge      39185        491      38693          0          1          0      0                     
          23289   qrendu       9282        234       9047          0          1          0      0                     
          23290   qrendu       9282        234       9047          0          1          0      0                     
          23291   qrendu       9282        234       9047          0          1          0      0                     
          23292   qrendu       9281        234       9047          0          1          0      0                     
          23293   qrendu       9281        233       9047          0          1          0      0                     
          23294   qrendu       9281        233       9047          0          1          0      0                     
          23295   qrendu       9281        233       9047          0          1          0      0                     
          23296   qrendu       9281        233       9047          0          1          0      0                     
          23308 easybuil      98717         19      98697          0          1          0      0                     
          23310   ljiang      97732          6      97726          0          1          0      0                     
          23311   ljiang      97727          0      97726          0          1          0      0

Lister les jobs en exécution trié par temps d'exécution (walltime)

squeue -S t

Travail en interactif

Avant d'effectuer la réservation, il est recommandé de vérifier la disponibilité des noeuds (i.e. l'occupation de la machine).
La connexion interactive s'effectue depuis la machine compil

[jsmith@login ~]$ ssh compil

avec la commande srun. Par défaut, un seul noeud est réservé. Pour en réserver plus, il faut travailler dans la partition correspondante. Vous trouverez ci-dessous un exemple de réservation de 4 noeuds avec 8 processus par noeuds dans la partition short :

[jsmith@compil ~]$ srun -N 4 -p thin  --ntasks-per-node=8 --pty $SHELL

Après éventuellement un délai d'attente (lié à la disponibilité de la machine), vous pouvez travailler en interactif.

[jsmith@newton-t-13 ~]$

Vous pouvez vérifier la réservation par la commande :

[jsmith@newton-t-13: ~]$ squeue -u jsmith
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             223     short     bash  jsmith  R       0:03      4 newton-t-[13-16]

Pour travailler, vous pouvez si nécessaire (i.e. s'ils ne sont pas dans votre environnement) charger les modules dont vous avez besoin, par exemple :

[jsmith@newton-t-13: ~]$ module purge 
[jsmith@newton-t-13: ~]$ module load GCC/4.9.2
[jsmith@newton-t-13: ~]$ module load OpenMPI/1.8.4-GCC-4.9.2 
[jsmith@newton-t-13: ~]$ mpirun -np 32  ./a.out

La session interactive est quittée par la commande

[jsmith@newton-t-13: ~]$ exit
[jsmith@compil: ~]$

Travail en batch

Pour soumettre les jobs, il faut se connecter sur la machine compil.

Exemple de script de soumission de job séquentiel

#!/bin/bash
#
#SBATCH --job-name=myjob_seq
#SBATCH --output=job.%j.out
#SBATCH --error=job.%j.err 
#SBATCH --mail-user=jefferson.smith@ec-lyon.fr
#SBATCH --mail-type=ALL
#
#SBATCH --partition=test
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH -t 00:15:00

module purge 
module load GCC/4.9.2

./a.out infille outfile

Exemple de script de soumission OpenMP

#!/bin/bash
#
#SBATCH --job-name=myjob_omp
#SBATCH --output=job.%j.out # output messages go here 
#SBATCH --error=job.%j.err    # error messages go here 
#SBATCH --mail-user=jefferson.smith@ec-lyon.fr
#SBATCH --mail-type=ALL
#
#SBATCH --partition=fat # partition name 
#SBATCH --nodes=1   
#SBATCH --cpus-per-task=16
#SBATCH --mem=63000 # amount of RAM memory required per node, in Mega Bytes
#SBATCH --time=96:00:00 

module purge
module load GCC/4.9.2
export OMP_NUM_THREADS=16

./a.out

Exemple de script de soumission MPI

#!/bin/bash
#
#SBATCH --job-name=myjob_mpi
#SBATCH --output=job.%j.out
#SBATCH --error=job.%j.err 
#SBATCH --mail-user=jefferson.smith@ec-lyon.fr
#SBATCH --mail-type=ALL
#
#SBATCH --partition=thin
#SBATCH --exclusive
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=5
#SBATCH --cpus-per-task=1
#SBATCH -t 00:15:00


module purge 
module load GCC/4.9.2
module load OpenMPI/1.8.4-GCC-4.9.2

mpirun -np 20 $HOME/Wave/Sources/bin/CHANP-OpenMPI-1.8.4-GCC-4.9.2 < cas.dat > res.out

Avec IntelMPI

Même script que précédemment sauf le chargement des modules et la ligne d'exécution :

module purge
module load impi/5.0.2.044-iccifort-2015.1.133-GCC-4.9.2

mpirun -env I_MPI_FABRICS shm:ofa -n 20 ./testmpi.exe

Remarques :

  • La variable I_MPI_FABRICS positionne les protocols de communication intra et inter noeuds (shm : shared-memory et ofa : Infiniband via les paquets OpenFabrics Enterprise Distribution (OFED) verbs installés sur les noeuds de Newton)
  • préciser le nombre de process MPI est réquis (l'argument n -32 dans cet exemple)

Jobs enchainés

On lance un premier job :

sbatch <jobA.sh>

On récupère son job_id et on le met en dépendance pour le job suivant :

sbatch --dependency=afterok:<jobID_A> jobB.sh

On peut faire cela autant de fois que l'on veut :

sbatch --dependency=afterok:<jobID_A:jobID_C:jobID_D> jobB.sh

Connexion sur un job en cours

srun --jobid=6498 --pty $SHELL