IMB > cellule > Moyens de calcul et de stockage

PlaFRIM3 - Utilisation (introduction)

Page d’introduction à l’utilisation de la plateforme de calcul PLAFRIM3

Nous donnons ici une introduction à l’utilisation de PlaFRIM3 via quelques exemples simples représentatifs d’usages courants utilisant un seul nœud de calcul.

Pour en savoir plus et nous soumettre vos petits ou gros problèmes, venez nous rencontrer : bureau 270 (Laurent et Philippe).

L’utilisation d’un cluster de calcul n’est pas trivial, beaucoup d’éléments sont à prendre en compte. Nous sommes donc là pour vous accompagner afin de trouver les solutions les plus adaptées à vos problématiques et faire en sorte que vos calculs s’exécutent le plus rapidement possible et de la manière la plus efficace possible.

Sur un cluster de calcul (groupe de machines identiques), comme il y a plusieurs utilisateurs qui veulent pouvoir faire des calculs sur des machines dédiées le temps de l’exécution, on ne peut pas se connecter librement sur les nœuds (machines). Il faut faire une "demande de ressources" ou encore "soumettre" un "job" au gestionnaire de ressources pour obtenir le droit de se connecter à des machines ou lancer des calculs dessus.

Terminologie :

  • noeud (de calcul) : machine
  • job : un travail, référencé dans le gestionnaire de ressource
  • scheduleur : sous partie du gestionnaire de ressources chargé d’ordonnancer au mieux l’exécution des "jobs" sur le cluster de calcul
  • gestionnaire de ressources : logiciel qui gère l’accès aux noeuds du cluster.
  • cœur (core en anglais) cpu : unité d’exécution. un processeur (boîtier physique) contient plusieurs unité d’exécution.

PlaFRIM3 utilise le système gestionnaire de ressource slurm. Les commandes slurm commencent par un s comme : srun, sbatch, sinfo, squeue, salloc, ...

Pour avoir la documentation précise de chaque commande, faire :

man NOM_DE_LA_COMMANDE

Une version plus compacte est accessible en utilisant la commande :

NOM_DE_LA_COMMANDE --help

PlaFRIM3 comprends plusieurs clusters de calculs avec des architectures différentes.
Principales architectures disponibles au 7/1/2020 :

  • généralistes (processeur Intel x86) :
    • bora : 40 machines intel 192Go 36 coeurs (dernière génération)
    • miriel : 80 machines intel 128Go, 24 coeurs (ancienne génération)
  • GPU (accélérateur) :
    • sirocco : 16 machines avec des cartes NVidia de diverses générations
  • ARM
    • arm01
  • machine de visualisation : visu01 (visualisation 3D avec carte accélératrice)
  • souris : machine NUMA de chez SGI
  • ... voir la documentation matérielle de PlaFRIM3

Exemple 1 : Travailler en interactif sur une machine généraliste (bora,miriel)

srun -C bora -c36   -I --time=8:0:0 --exclusive --pty bash
srun -C miriel -c24   -I --time=8:0:0 --exclusive --pty bash

  • -C miriel ou -C bora : demande des nœuds d’un certain type ("C" comme "contrainte").
  • -I : demande à ce que la réservation soit immédiate ou échoue si les ressources ne sont pas instantanément disponibles.
    • on peut aussi préciser -I10 pour attendre 10 secondes la libération des ressources.
    • ... ou ne rien préciser du tout et attendre que les ressources demandées se libèrent (adapté à un traitement batch (voir plus bas) car la session "interactive" peut très bien démarrer en pleine nuit !)
  • -c24 ou -c36 : autorise la commande lancée (ici bash : interpréteur de commande) à utiliser les 24 ou 36 cœurs de la machine.
  • --exclusive : réserve la machine entièrement. aucun autre utilisateur ne pourra venir sur cette machine pendant l’exécution du job. Utile quand on utilise tous les nœuds ou toute la mémoire ou lorsque l’on veut mesurer précisément les temps de calcul.
  • --time=8:0:0 : demande a réserver les ressources pour une durée de 8 heures, 0 minutes et 0 secondes. (walltime)
  • --pty  : paramètres technique pour que bash fonctionne correctement en mode interactif.
  • bash : nom du programme à exécuter sur les ressources sélectionnée (bash est un "shell" = interpréteur de commande)

Exemple 2 : Lancer rapidement un calcul non interactif sur une machine généraliste (bora,miriel)

sbatch -C bora -c36 --time=8:0:0 --exclusive ./MON_PROGRAMME
sbatch -C miriel -c24 --time=8:0:0 --exclusive ./MON_PROGRAMME

  • MON_PROGRAMME : le nom de votre programme à exécuter

La commande sbatch renvoie le n° du job que vous venez de soumettre (c.a.d d’en demander l’exécution).
Il s’exécutera dès que possible en fonction de la disponibilité des ressources.

Notez que votre job s’exécutera plus tôt si :

  • vous demandez moins temps (paramètre
    time<code> ajusté au mieux)
    -* vous n'utilisez pas l'option exclusive - mais les nœuds ne vous seront pas dédiés
    De façon générale, moins vous demandez de ressources, plus vous votre job aura des chances de s’exécuter plus tôt.

    Pour visualiser l'ensemble des {jobs} en attente ou en cours d’exécution sur la plateforme, utilisez la commande : <code>squeue

    .
    Pour ne voir que vos travaux, faites : squeue -u VOTRE_LOGIN.

Pour supprimer un job : scancel NUMERO_DU_JOB

Exemple 3.1 : S’organiser pour lancer souvent le même programme

Lorsque l’on veut relancer plusieurs fois le même programme dans les mêmes conditions, au lieu d’utiliser les commandes srun ou sbatch avec "plein" d’options, il est pratique de créer à la place des fichiers batch contenant ces options et les différents paramètres de ses jobs.

On place alors les options après le préfixe #SBATCH dans ce fichier.

Le fichier batch correspondant à l’exemple 2 (avec noeuds bora) peut ainsi se réécrire sous la forme suivante :

#! /bin/bash
# Fichier mon_job.sh

#SBATCH -C bora
#SBATCH -c36
#SBATCH --time=8:0:0
#SBATCH --exclusive

srun  ./MON_PROGRAMME

que l’on pourra soumettre (c.a.d demander l’exécution) avec la commande :

sbatch mon_job.sh

Exemple 3.2 : Exemple plus complet

D’autres options intéressantes peuvent être précisées (elles peuvent également être utilisées en ligne de commande, mais cela devient un peu fastidieux) permettant par exemple :

  • de recevoir des courriers électroniques pour être tenu au courant de l’avancée du job (démarrage, terminaison, erreur, redémarrage, taux d’execution)
  • de préciser des temps min/max
  • ...

Voici un exemple (avec noeuds miriel) où les nouvelles options sont commentées :

#! /bin/bash
# Fichier mon_job.sh


#SBATCH -C miriel
#SBATCH -c24
#SBATCH -p longq
#SBATCH --time=8:0:0            # temps max souhaité
#SBATCH --time-min=6:0:0    # temps minimum. permet de démarrer plus vite
#SBATCH --exclusive
#SBATCH --mail-user=mon_adresse_email@math.u-bordeaux.fr # mon adresse email pour recevoir les notifications  :
#SBATCH --mail-type=BEGIN,END    # pour recevoir un email au début et à la fin du job.
           # autres possibilités : FAIL,REQUEUE,TIME_LIMIT,TIME_LIMIT_50,TIME_LIMIT_80,TIME_LIMIT_90
           # ALL est équivalent à BEGIN,END,FAIL,REQUEUE
#SBATCH --error=/home/mon_login/mon_fichier_erreurs      # précise un fichier pour stocker les erreurs affichées par le programme au lieu de JOBID.e
#SBATCH --output=/home/mon_login/mon_fichier_output   # précise un fichier pour stocker les sorties classiques affichées par le programme au lieu de JOBID.o

srun  ./MON_PROGRAMME

Conclusion

Un problème ou une question se pose toujours ? passez nous voir :)