Calculons !

Principe

Lancer un calcul sur la plateforme, c’est soumettre un « job » dans la file d’attente parmi celles disponibles. Cela implique la procédure suivante :

  1. Connexion au cluster
  2. Transfert de données
  3. Création d’un script SBATCH de paramétrage
  4. Lancement du job

Les nœuds

Les files d’attentes

Commandes de gestion de vos « jobs »

Exemple job monocore : monocore.slurm

Demande d’un cœur de calcul sur un nœud et de 5 Mo pour 10 minutes. Envoi d’un mail à chaque étape de la vie du job.

Créer un fichier sbatch ici nommé monocore.slurm

#!/bin/bash                                                                                                      
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --time=00:10:00
#SBATCH --mail-type=ALL
#SBATCH --job-name=my_serial_job
#SBATCH --output=job_seq-%j.out
#SBATCH --mail-user=votre.mail@domain.précis
#SBATCH --mem=5M
time sleep 30
hostname

Soumettre le job

La commande « sbatch monocore.slurm » mettra dans la file par défaut le job car aucune file n’est spécifiée dans le fichier. Le job s’exécutera dès que les ressources seront disponibles.

Options possibles du script

  • #SBATCH --partition=nom de la partition (normal ou long…)
  • #SBATCH --job-name=nom du job au choix
  • #SBATCH --output=nom du fichier dans lequel sera enregistré la sortie standard
  • #SBATCH --error=nom du fichier pour stocker les erreurs
  • #SBATCH --input=nom du fichier de l’entrée standard
  • #SBATCH --open-mode=mettre "append" pour écrire dans le fichier existant, "truncate" pour réinitialiser les fichiers de sortie
  • #SBATCH --mail-user=votre@mail
  • #SBATCH --mail-type=<BEGIN,END,FAIL,TIME_LIMIT,TIME_LIMIT_50,...> Cas d’envoi d’un mail
  • #SBATCH --sockets-per-node=1 ou 2 possible
  • #SBATCH --threads-per-core nombre de thread par coeur, sans effet sur la plateforme MatriCS, les nœuds ne sont pas multithreadé (demande possible.)
  • #SBATCH --cores-per-socket= Nombre de cœurs par socket
  • #SBATCH --cpus-per-task=nombre de CPU attribuée à chaque tâche
  • #SBATCH --ntasks=nombre de tâche
  • #SBATCH –mem-per-cpu=mémoire vive attribué à chaque cœur
  • #SBATCH --ntasks-per-node=nombre de tâche par nœud.

Variable d’environnement SBATCH

  • SLURM_JOB_ID : identifiant du job
  • SLURM_JOB_NAME : Nom du job
  • SLURM_JOB_NODELIST : Liste des nœuds utilisés
  • SLURM_SUBMIT_HOST : serveur à partir le job a été lancé
  • SLURM_SUBMIT_DIR : Répertoire dans lequel le job a été lancé
  • SLURM_JOB_NUM_NODES : Nombre de nœuds demandés
  • SLURM_NTASKS_PER_NODE : Nombre de cœurs demandés par nœuds
  • SLURM_JOB_CPUS_PER_NODE : Nombre de thread par nœud

Exemple d’un job MPI : jobMPI.slurm

Demande de 2 nœuds et 16 cœurs, 8 Mo sur chacun pour 10 minutes.

#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=16
#SBATCH --time=00:10:00
#SBATCH --job-name=my_mpi_job
#SBATCH --output=mpi_job-%j.out
#SBATCH --mem=8M
#SBATCH --mail-type=ALL
#SBATCH --mail-user=laurent.renault@u-picardie.fr
ml gnu12 openmpi4
mpiexec time sleep 30

Example d’un job openMP : job_openMP.slurm

#!/bin/bash                                                                                                 

#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=8
#SBATCH --time=04:00:00
#SBATCH --job-name=my_openmp_job
#SBATCH --mem=96M

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
./my_program

Utiliser les GPUs de la plateforme

Pour utiliser les GPUs, préciser le paramètre suivant –gres=gpu:X avec X le nombre de GPUs.

Voici un script sbatch mon_script.sh pour demander les 2 GPUs et les 28 coeurs d’un serveur bigpu.

#!/bin/sh
#SBATCH --job-name=tensor 
#SBATCH --partition=bigpu 
#SBATCH --gres=gpu:2 
#SBATCH --time=0:10:00 
#SBATCH --mail-type=ALL 
#SBATCH --output=job-%j.out 
#SBATCH --mem=60G 
#SBATCH --nodes=1 
#SBATCH --ntasks-per-node=28

hostname
python hello.py
  • Pour soumettre le job, lancer avec la commande suivante :
sbatch mon_script.sh
  • Exemple en interactif cela donne
    srun --ntasks=1 --mem=4G --gres=gpu:1 --time=1:00:00 --partition=bigpu --pty /bin/bash
  • La commande nvidia-smi est permet de voir l’usage des GPUs.