Projet

Général

Profil

Architecture du calculateur


Voir l'utilisation du calculateur : Utilisation.


jarvis n'est pas une machine de type SMP (Symmetric multiprocessing) où l'accès des coeurs de calcul à la mémoire commune serait uniforme pour tous les coeurs.

Le calculateur est physiquement constitué de multiples lames de calcul, chaque lame (socket) ayant sa propre quantité de mémoire (384Go). C'est grâce à la technologie d'interconnection des lames (NUMAlink) et aux des spécificité du calculateur que cet ensemble de mémoires physiquement distribuées devient accessible et partagé entre tous les coeurs de calculs et au sein d'un seul système d'opération (un seul système Linux suffit à gérer l’ensemble des ressources processeurs et mémoire).

jarvis ressemble donc du point de vue matériel à un cluster de calcul (= machine à mémoire distribuée), mais il a les fonctionnalités d'une machine à mémoire partagée (un seul système, adressage à tout l'espace mémoire).

Ainsi, pour un processeur donné, les temps d'accès à une zone mémoire diffèrent suivant la zone mémoire accédée, d'où le nom de machine NUMA (pour Non Uniform Memory Access ou Non Uniform Memory Architecture).

Bien qu'on bénéficie d'un réseau NUMAlink performant et de lames ultra-denses à hautes performances, l'utilisateur ne doit pas oublier/ignorer qu'il travaille sur une architecture NUMA et pour qu'il obtienne de bonnes performances et une reproductibilité des temps CPU, il doit positionner les processus correctement sur les ressources disponibles et utiliser certaines commandes spécifiques (outils linux : numactl,hwloc).

[homer@jarvis ~]$ cpumap
Thu Nov 28 08:54:35 AM CET 2024
jarvis

model name           : Intel(R) Xeon(R) Platinum 8468H
Architecture         : x86_64
cpu MHz              : 3800.000
cache size           : 107520 KB (Last Level)

Total Number of Sockets                 : 16
Total Number of Cores                   : 768   (48 per socket)
Hyperthreading                          : OFF

=============================================================================
  • la commande numactl -H ( --hardware ) permet de visualiser la distance entre les sockets :
[homer@jarvis ~]$ numactl -H
available: 16 nodes (0-15)
...
node distances:
node     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
   0:   10   16   16   18   40   40   40   40   40   40   40   40   40   40   40   40
   1:   16   10   18   16   40   40   40   40   40   40   40   40   40   40   40   40
   2:   16   18   10   16   40   40   40   40   40   40   40   40   40   40   40   40
   3:   18   16   16   10   40   40   40   40   40   40   40   40   40   40   40   40
   4:   40   40   40   40   10   16   16   18   40   40   40   40   40   40   40   40
   5:   40   40   40   40   16   10   18   16   40   40   40   40   40   40   40   40
   6:   40   40   40   40   16   18   10   16   40   40   40   40   40   40   40   40
   7:   40   40   40   40   18   16   16   10   40   40   40   40   40   40   40   40
   8:   40   40   40   40   40   40   40   40   10   16   16   18   40   40   40   40
   9:   40   40   40   40   40   40   40   40   16   10   18   16   40   40   40   40
  10:   40   40   40   40   40   40   40   40   16   18   10   16   40   40   40   40
  11:   40   40   40   40   40   40   40   40   18   16   16   10   40   40   40   40
  12:   40   40   40   40   40   40   40   40   40   40   40   40   10   16   16   18
  13:   40   40   40   40   40   40   40   40   40   40   40   40   16   10   18   16
  14:   40   40   40   40   40   40   40   40   40   40   40   40   16   18   10   16
  15:   40   40   40   40   40   40   40   40   40   40   40   40   18   16   16   10
  • la commande numastat -m permet de visualiser les capacités mémoires par socket :
$  numastat -m -c 8

Per-node process memory usage (in MBs) for PID 8 (kworker/0:0H-events_highpri)
         Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Node 8 Node 9
         ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
Huge          0      0      0      0      0      0      0      0      0      0
Heap          0      0      0      0      0      0      0      0      0      0
Stack         0      0      0      0      0      0      0      0      0      0
Private       0      0      0      0      0      0      0      0      0      0
-------  ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
Total         0      0      0      0      0      0      0      0      0      0

         Node 10 Node 11 Node 12 Node 13 Node 14 Node 15 Total
         ------- ------- ------- ------- ------- ------- -----
Huge           0       0       0       0       0       0     0
Heap           0       0       0       0       0       0     0
Stack          0       0       0       0       0       0     0
Private        0       0       0       0       0       0     0
-------  ------- ------- ------- ------- ------- ------- -----
Total          0       0       0       0       0       0     0

Per-node system memory usage (in MBs):
                 Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Node 8
                 ------ ------ ------ ------ ------ ------ ------ ------ ------
MemTotal         380128 381074 381074 381074 381074 381074 381074 381032 381074
MemFree          366348 376349 375194 372885 371920 360499 373289 374721 377890
MemUsed           13780   4725   5880   8188   9153  20575   7785   6311   3184
SwapCached            0      0      0      0      0      0      0      0      0
Active              456   1164   1307    199   2523    460    742    764    156
Inactive          11582   1833   2887   5545   5122  18701   5698   4295   2300
Active(anon)         83     43     76     48   2227    111    188     91     23
Inactive(anon)       33     10     22     36    102    403    128     94      4
Active(file)        373   1121   1231    151    296    349    553    673    133
Inactive(file)    11549   1823   2865   5509   5020  18298   5569   4201   2296
Unevictable           3      0      0      0      0      2      9      0      0
Mlocked               0      0      0      0      0      2      9      0      0
Dirty                 0      0      0      0      0      0      0      0      0
Writeback             0      0      0      0      0      0      0      0      0
FilePages         11963   2977   4129   5693   7449  18824   6262   4973   2433
Mapped               22      6      6     13    114     56    121      5     32
AnonPages            63     18     54     36    181    337    180     77     21
Shmem                41     33     33     33   2133    175    139     99      4
KernelStack           9      7     12      7     10     13      9      9      7
PageTables            1      0      0      0      3      4      3      2      1
SecPageTables         0      0      0      0      0      0      0      0      0
NFS_Unstable          0      0      0      0      0      0      0      0      0
Bounce                0      0      0      0      0      0      0      0      0
WritebackTmp          0      0      0      0      0      0      0      0      0
KReclaimable        351    328    293    623    601    399    379    375     93
Slab               1020    742    648   1113    969    698    731    694    280
SReclaimable        351    328    293    623    601    399    379    375     93
SUnreclaim          669    414    355    491    368    298    352    318    187
AnonHugePages        12      8     28     20    118    288     78     44      6
ShmemHugePages        0      0      0      0      0      0      0      0      0
ShmemPmdMapped        0      0      0      0      0      0      0      0      0
FileHugePages         0      0      0      0      0      0      0      0      0
FilePmdMapped         0      0      0      0      0      0      0      0      0
Unaccepted            0      0      0      0      0      0      0      0      0
HugePages_Total       0      0      0      0      0      0      0      0      0
HugePages_Free        0      0      0      0      0      0      0      0      0
HugePages_Surp        0      0      0      0      0      0      0      0      0

                 Node 9 Node 10 Node 11 Node 12 Node 13 Node 14 Node 15   Total
                 ------ ------- ------- ------- ------- ------- ------- -------
MemTotal         381074  381074  381074  381074  381074  381074  380002 6095120
MemFree          370421  377156  376475  377572  376988  378732  376280 5982718
MemUsed           10653    3918    4599    3502    4086    2342    3722  112402
SwapCached            0       0       0       0       0       0       0       0
Active              132     154     138     557     337     237     185    9511
Inactive           8641    3014    3629    1877    2879    1264    2578   81845
Active(anon)         17      37      32     190      64      96      44    3371
Inactive(anon)       18      40      20     166     188      28      79    1372
Active(file)        114     117     106     368     273     142     141    6141
Inactive(file)     8623    2974    3609    1711    2691    1236    2499   80473
Unevictable           0       0       0       0       0       0       0      14
Mlocked               0       0       0       0       0       0       0      11
Dirty                 0       0       0       0       0       0       0       0
Writeback             0       0       0       0       0       0       0       0
FilePages          8742    3095    3719    2099    3022    1382    2690   89452
Mapped               37      20      14      46      63      61      52     667
AnonPages            22      60      46     328     150     118      72    1763
Shmem                 4       4       4      20      59       4      49    2836
KernelStack           7       7       7       8       8       8       8     135
PageTables            0       1       1       2       2       1       1      24
SecPageTables         0       0       0       0       0       0       0       0
NFS_Unstable          0       0       0       0       0       0       0       0
Bounce                0       0       0       0       0       0       0       0
WritebackTmp          0       0       0       0       0       0       0       0
KReclaimable        643     105      98     220     155     174     205    5045
Slab               1220     297     294     503     360     394     509   10473
SReclaimable        643     105      98     220     155     174     205    5045
SUnreclaim          577     192     197     283     205     220     304    5428
AnonHugePages        10      30      30     286      92      82      54    1186
ShmemHugePages        0       0       0       0       0       0       0       0
ShmemPmdMapped        0       0       0       0       0       0       0       0
FileHugePages         0       0       0       0       0       0       0       0
FilePmdMapped         0       0       0       0       0       0       0       0
Unaccepted            0       0       0       0       0       0       0       0
HugePages_Total       0       0       0       0       0       0       0       0
HugePages_Free        0       0       0       0       0       0       0       0
HugePages_Surp        0       0       0       0       0       0       0       0

Cpuset

Le sous-système cpuset assigne les CPU individuels et les noeuds de mémoire à des groupes de contrôle. Chaque cpuset peut être spécifié en fonction des paramètres suivants, chacun dans un pseudo-fichier différent du système de fichiers virtuel du groupe de contrôle.

Sur jarvis , le mécanisme de cpuset permet de limiter l’exécution des processus d'un job aux seuls cœurs demandés/alloués afin d'isoler les processus appartenants à différents utilisateurs. La soumission des jobs se fait en utilisant cette fonctionnalité pour limiter les ressources demandés via slurm. Chaque calcul disposera uniquement des ressources spécifiées au moment de la soumission dans slurm par les cpuset.

GPU

Sur certains socket de la machine est attaché une carte graphique Tesla Ada de dernière génération :

[homer@jarvis]$ nvidia-smi -L
GPU 0: NVIDIA L40S (UUID: GPU-...)
GPU 1: NVIDIA L40S (UUID: GPU-...)

Ces cartes servent pour le pré/post-traitement des données et le calcul GPU en fonction des besoins et de l'utilisation de la file de calcul visu.
Il n'est pas possible d'utiliser les cartes pour réaliser des calculs sur GPU (deep learning avec tensorflow, pytorch ).

File System

Le système de fichier disponible sur jarvis est XFS, mis en place sur des disques SSD NVMe pour une volumétrie utile de 38To.
XFS est adapté pour l'exécution d'opérations d'entrée/sortie (E/S) parallèles grâce à sa conception, qui repose sur des groupes d'allocation. De ce fait, XFS permet une évolutivité extrême des threads d'E/S, de la bande passante du système de fichiers, de la taille des fichiers et du système de fichiers lui-même lorsqu'il couvre plusieurs dispositifs de stockage physiques.
3 partitions sont disponibles pour les données utilisateurs :

  • /home: espace de connexion et de mise en place des codes, librairies nécessaires aux codes ; Volume de 10To - quota par utilisateur positionné à 200Go
  • /scratch: espace de travail; Volume de 24To - quota positionné à 500Go
  • /data : espace tampon (cf Stockage additionnel)

  • NB: la partition /scratch n'est pas destiné à l'archivage! les fichiers trop anciens (plus de 90 jours) y sont nettoyés régulièrement par un système automatique!.

  • Précision: L'âge pris en compte pour la suppression automatique correspond à l'horodatage du fichier lui-même. Attention aux fichiers anciens provenant d'une archive ou transférés avec rsync.

Stockage additionnel

Pour étendre la solution en terme de stockage, une baie de stockage va prochainement être mise en production.

Utilisation d'iRODS

Un module est disponible pour accéder au système de stockage iRODS mis à disposition pour les utilisateurs du MCIA .

Usage

  • La même procédure que curta est à réaliser pour initialiser les paramètres de connexion : iinit
  • Utilisation : $ module add tools/irods $ ils