Direction du numérique (DN)


Utilisation de Slurm

À savoir avant de démarrer...
Partitions
Commandes utilisateur
Variables d'environnement
Paramètres d'exécution
Exemples de scripts de soumission avec Slurm
Les calculs interactifs et les applications graphiques
Suivi des jobs et analyse d'erreur
Statistiques

 

À savoir avant de démarrer...

ATTENTION ! si votre job atteint la limite, il est automatiquement arrêté et vous perdez votre travail. Il existe des techniques de redémarrage des programmes : n'hésitez pas à ouvrir une demande d'assistance sur le portail de l'établissement pour analyser vos contraintes avec les ingénieurs du pôle.

  • Astuces pour passer plus vite !
Le cluster de calcul étant partagé, il peut être très sollicité. Afin de réduire le délai de prise en compte de vos jobs, vous pouvez :
- précisez la durée maximum du job et vous pourrez bénéficier du backfilling
- utilisez la partition "procs12" pour les petits jobs parallèles (jusqu'à 12 cœurs) et les jobs séquentiels
- utilisez la partition "compute" et plutôt votre account de priorité U2 ipra ou iprem (si vous y avez accès) pour les calculs parallèles de plus de 12 cœurs et les gros calculs.
 

Partitions

La répartition des nœuds est effectuée sous forme de partitions :

Ils sont à utiliser pour le calcul parallèle au delà de 12 cœurs.

  • procs12 : cette partition regroupe des nœuds 2010. Elle est destinée à deux types de traitements :
    • les jobs séquentiels
    • les jobs parallèles jusqu'à 12 cœurs
  • interac: cette partition est composée de nœuds de 2010. Elle est destinée uniquement aux logiciels interactifs et graphiques. On ne peut plus soumettre de jobs avec sbatch sur cette partition. De la même façon, les salloc ne sont plus acceptés sur les partitions compute et procs12.
     

Commandes utilisateur

  • soumettre un job : sbatch script_file [param]
  • supprimer un job : scancel job_id
  • statut du job d'un user : squeue -u user_name
  • statut d'un job : squeue job_id
  • statut des jobs : squeue
  • état d'occupation des nœuds du cluster : sinfo

La commande sinfo renvoie les états suivants pour les nœuds :

STATE=alloc : le nœud est entièrement utilisé

STATE=mix : le nœud est en partie utilisé

STATE=idle : aucun job ne tourne sur le nœud

STATE=drain : le nœud termine les jobs qui lui ont été soumis mais n'en accepte plus d'autres (comportement préalable à une opération de maintenance sur le nœud par exemple).

 

Variables d'environnement 

  • job ID : $SLURM_JOBID
  • répertoire de soumission : $SLURM_SUBMIT_DIR
  • liste des nœuds : $SLURM_JOB_NODELIST

 

Paramètres d'exécution

Ces paramètres définissent les conditions d'exécution du job. On les utilise dans le job de soumission avec le préfixe #SBATCH.

Ex :

#SBATCH --partition=compute
#SBATCH --account=ipra
...

Ces paramètres peuvent être obligatoires ou optionnels. Certains ont une valeur par défaut.

Obligatoires : attention, si vous ne définissez rien, Slurm affectera des valeurs par défaut qui pourraient ne pas convenir !

  • choix de la partition : --partition=[partition]
    valeur par défaut = procs12

  • choix de l'account : --account=[account]
    valeur par défaut = uppa

  • nombre de nœuds : --nodes=XX
    valeur par défaut = 1

  • nombre de processus : --ntasks=YY
    valeur par défaut = 1

  • nombre de cœurs par processus : --cpus-per-task=ZZ
    valeur par défaut = 1

  • temps de calcul demandé (wall time) indépendant du nombre de cœurs demandés : --time [dd-hh:mm:ss]
    valeur par défaut = 30-0:0:0 (30 jours)

  • mémoire demandée par cœur : --mem-per-cpu=XXXX[M|G|T]
    valeur par défaut = 1024M
    valeur max : dépend des nœuds sur lesquels les jobs vont tourner. Pour connaître les caratéristiques des nœuds :
    sinfo -a --format=%P,%n,%X,%Y,%m,%t

 

Optionnels :

  • nom du job : --job-name=[name]

  • nom du fichier de sortie : --output=[filename]

  • nature des notifications par mail (début, fin, échec d'un job) : --mail-type

  • adresse du destinataire des mails : --mail-user=[email]

Ce qui donne la matrice de soumission.

 

Exemples de scripts de soumission avec Slurm

 

Les calculs interactifs et les applications graphiques

Slurm permet de soumettre des jobs interactifs et graphiques. Le gestionnaire les traitera comme des jobs batch et leur affectera un cœur dans la partition "interac" avec l'account "uppa" pour une durée de 1h.

Exemple :

salloc: Granted job allocation 3364
$ module load MATLAB/R2014b
$ matlab
$ exit

Pour un job sur interac :

  • le nombre de cœurs maximal est de 4 ;
  • la durée maximale est de 12h.

Il est possible de modifier la durée de l'allocation de ressources avec un paramètre de temps de la forme "minutes",  "minutes:seconds",  "hours:minutes:seconds",  "days-hours",  "days-hours:minutes"  and  "days-hours:minutes:seconds".

Par exemple, pour obtenir une allocation de 2h :

$ salloc --time=120
salloc: Granted job allocation 3365
$ module load gaussview/5.0
$ gaussview
$ exit

Attention ! le temps consommé dans l'allocation est compté dans votre temps de calcul et peut influer sur le calcul de priorité de vos futurs jobs. Ne laissez pas tourner inutilement une allocation.

L'allocation se termine lorsque vous tapez la commande "exit". On peut également procéder comme pour un job pour arrêter une allocation :

squeue -u user (pour identifier le n° de l'allocation)
scancel JOB_ID (pour supprimer l'allocation)
 

Suivi des jobs

  • Quand on tape squeue avec ou sans paramètre, le résultat s'affiche sous forme de colonnes.
    La colonne "ST" donne le statut du job. Il existe de nombreuses valeurs mais les deux plus fréquentes sont :
    • PD = pending : le job est en attente
    • R = running : le job est en cours d'exécution
  • Accès aux calculs intermédiaires sur les nœuds

    • en lecture : les espaces scratch de dnas-node51 à 74 sont accessibles sur pyrene dans /scratch/dnas-nodeXX

    • récupération des fichiers : utiliser la commande
      $ sudo /opt/cluster/bin/recup_tmp.sh <job_id>

Analyse d'erreur

Dans le résultat de la commande squeue, la dernière colonne s'intitule "NODELIST(REASON)" :

  • Pour les jobs en cours d'exécution ST=R, les nœuds utilisés pour le job sont affichés
  • Pour les jobs en attente ST=PD, le mot entre parathèses donne la raison de la mise en attente
    • Resources : le cluster est complètement chargé; il faut attendre que des ressources (cœurs ou mémoire) se libèrent
    • Priority : il y a des jobs plus prioritaires que le votre
    • JobHeldUser : le job a été bloqué par le système. Il se peut que plusieurs jobs soient bloqués en même temps. Dans ce cas, vous pouvez débloquer les jobs en utilisant la commande
      $ srelease
  • Pour les jobs en erreur avec les raisons "AssocGrpCPUMinsLimit" ou "AssociationJobLimit", le problème est que le job demande un temps CPU supérieur au temps CPU disponible restant pour l'account sur le mois courant. Pour connaître le temps restant disponible sur le mois en cours pour un account faire :
    $ actime.sh <account>

Outre la commande squeue, on peut obtenir des informations détaillées sur un job en cours ou terminé depuis peu en utilisant la commande scontrol :

$ scontrol show job job_id

Statistiques

Slurm est connecté à une base de données qui enregistre toute l'activité des jobs.

Il est possible d'en extraire de l'information à l'aide des commandes sacct et sreport. Voici quelques exemples :

  • Afficher des informations sur le job n° job_id, format court et format long

$ sacct -j job_id

$ sacct -l -j job_id

  • Afficher les jobs qui ont tourné sur le nœud dnas-node51 entre le 1er janvier et le 1er février 2015

$ sacct --nodelist=dnas-node51 --starttime=2015-01-01 --endtime=2015-02-01

  • Afficher la liste et le temps CPU consommé en heures des plus "gros" utilisateurs depuis le 1er mars 2015

$ sreport -t hours user TopUsage Start=2015-03-01 Users=user_id

  • Compter le nombre d'heures calculées par un user entre le 1er et le 15 mars 2015

 $ sreport -t hours user TopUsage Start=2015-03-01 End=2015-03-15 Users=user_id