Jean Zay : allocation mémoire avec Slurm sur les partitions CPU

Actuellement, les options Slurm --mem et --mem-per-cpu ne permettent pas de configurer convenablement l'allocation mémoire d'un job sur Jean Zay. Celle-ci est déterminée automatiquement à partir du nombre de CPU réservé.

Pour ajuster la quantité de mémoire allouée à votre job, il faut donc ajuster le nombre de CPU réservés par tâche (ou processus) en spécifiant l'option suivante dans vos scripts batch, ou lors d'un salloc en mode interactif :

--cpus-per-task=...     # --cpus-per-task=1 par défaut 

Remarque : par défaut, --cpus-per-task=1 et la quantité de mémoire allouée est suffisante pour la plupart des travaux lancés sur les partitions CPU. La majorité des utilisateurs n'a donc pas à modifier la valeur de cette option. Cette page s'adresse aux utilisateurs qui ont un besoin en mémoire plus important.

Sur la partition cpu_p1

Les nœuds de la partition cpu_p1 donnent accès à 160 Go de mémoire utile, pour 40 cœurs CPU. L'allocation mémoire y est déterminée automatiquement à hauteur de :

  • 4 Go par cœur CPU lorsque l'hyperthreading est désactivé (option Slurm --hint=nomultithread)

Par exemple, un job spécifiant --ntasks=1 --cpus-per-task=5 sur la partition cpu_p1 aura accès à 1 x 5 x 4 Go = 20 Go de mémoire si l'hyperthreading est désactivé (comptez la moitié sinon).

Sur la partition prepost

Les nœuds de la partition prepost donnent accès à 2,88 To de mémoire utile, pour 48 cœurs CPU. L'allocation mémoire y est déterminée automatiquement à hauteur de :

  • 60 Go par cœur CPU lorsque l'hyperthreading est désactivé (option Slurm --hint=nomultithread)

Par exemple, un job spécifiant --ntasks=1 --cpus-per-task=12 sur la partition prepost aura accès à 1 x 12 x 60 Go = 720 Go de mémoire si l'hyperthreading est désactivé (comptez la moitié sinon).

Remarques

  • Vous pouvez augmenter la valeur de --cpus-per-task tant que la demande ne dépasse pas la totalité de la mémoire disponible sur le nœud. Attention, les heures de calcul seront décomptées en proportion. Par exemple, en spécifiant les options --ntasks=10 --cpus-per-task=2, 20 cœurs CPU seront réservés et donc comptabilisés pour votre travail.
  • Si vous réservez un nœud de calcul en exclusivité, vous avez accès à la totalité de la mémoire du nœud, indépendamment de la valeur donnée à --cpus-per-task. L'équivalent d'un travail sur le nœud entier vous est alors facturé.
  • Pour les codes OpenMP : si la valeur donnée à l'option --cpus-per-task ne coïncide pas avec le nombre de threads sur lequel vous souhaitez exécuter votre code, il faut spécifier la variable d'environnement :
     export OMP_NUM_THREADS=... 
  • La quantité de mémoire allouée pour votre job est visible en lançant la commande Slurm :
    scontrol show job $JOBID    # chercher la valeur de la variable mem 

    Attention, tant que le job est en queue (PENDING), Slurm estime la mémoire allouée à un job sur la base de cœurs logiques. Si vous avez réservé des cœurs physiques (avec --hint=nomultithread), la valeur indiquée peut donc être deux fois inférieure à la valeur attendue. Celle-ci est mise à jour et devient correcte lors du lancement du job.