bioinfo@ird.fr

Trainings 2019 – Admin HPC – module 2 – slurm usage

Utilisation de Slurm

Description Savoir utiliser Slurm
Cours lié HPC Administration Module2
Auteur Ndomassi TANDO (ndomassi.tando@ird.fr)
Date de création 27/09/2019
Date de modification 27/09/2019

Summary


Objectif

Pouvoir lancer des jobs de différents types sous Slurm.

Monitorer les ressources sous Slurm


Lancer des jobs sous Slurm:

Lancer des commandes depuis la machine maître s'exécutant les ressources de calcul

La commande suivante alloue des ressources de calcul (noeuds, cpus, mémoire) et lance la commande immédiatement sur chaque ressource allouée

$ srun + commande

Exemple:

$ srun hostname

Permet d'obtenir le nom de la ressource de calcul utilisé

Réserver des ressources de calcul pour lancer des commandes avec Slurm

On utilise la commande:

$ salloc

Cette commande permet de réserver une ou pusieurs ressources de calcul tout en continuant à travailler sur la machine maître.

Les commandes à lancer sur le ressources de calcul peuvent être lancées plus tard avec la commande srun + arguments.

Il est important quand on utilise cette commande préciser un temps de réservation avec l'option --time

Exemple: On réserve 2 noeuds de calcul( options -N) à la fois pour 5 minutes et on lance plus tard la commande hostname sur ces 2 noeuds avec srun

$ salloc --time=05:00 -N 2
$ srun hostname

Nous obtiendrons une réponse du type:

$[tando@master0 ~]$ srun hostname
node21.alineos.net
node14.alineos.net

Lancer des commandes après connexion à un noeud de manière interactive:

Pour se connecter de manière intéractive pendant un temps X à un noeud, on utilise la commande:

$ srun --time=X:00 --pty bash -i

Une fois connecté sur le noeud, on peut lancer les commandes désirées sans le préfixe srunqui s'exécuteront sur le noeud

Les principales options disponibles pour lancer une analyse sous Slurm:

Toutes les commandes salloc, srun et sbatch peuvent être utilisées avec les options suivantes:

actions Option
Préciser une partition -p [queue]
Nombre de noeuds à utiliser -N [min[-max]]
Nombre de cpus à utiliser -n [count]
limite de temps -t [min] ou -t [days-hh:mm:ss]
préciser un fichier de sortie -o [file_name]
préciser un fichier d'erreur -e [file_name]
Combiner les fichiers STDOUT et STDERR files utiliser -o sans -e
Copier l'environnement --export=[ALL , NONE , variables]
Type de notifications à envoyer --mail-type=[events]
Envoi d'un email --mail-user=[address]
Nom du job --job-name=[name]
Relancer un job si problème --requeue
Preciser le répertoire de travail --workdir=[dir_name]
Taille de la mémoire à réserver --mem=[mem][M,G,T] ou-mem-per-cpu=[mem][M,G,T]
Préciser un account --account=[account]
Nombre de tâches par noeud --tasks-per-node=[count]
Nombre de cpus par tâche --cpus-per-task=[count]
Dépendance à un autre noeud --depend=[state:job_id]
Choisir des hôtes de préférence --nodelist=[nodes] ET/OU --exclude=[nodes]
Job arrays --array=[array_spec]
Heure de démarrage --begin=YYYY-MM-DD[THH:MM[:SS]]

Lancer des jobs via un script

Lancer est job est l'action de lancer une analyse dont le déroulement est décrite à l'intérieur d'un script.

Slurm permet d'utiliser des scripts de type bash, perl ou python.

Slurm alloue les ressources demandées et lance les analyses sur celles-ci en arrière plan.

Un script créé doit cependant contenir une entête afin que celui-ci soit interprété par Slurm.

Pour que chaque option du script soit interprété par Slurm, il faut les faire précéder par le mot clé #BATCH

Exemple de script slurm:

#!/bin/bash
## On définit le nom du job
#SBATCH --job-name=test
## On définit le nom du fichier de sortie
#SBATCH --output=res.txt
## On définit le nombre de tâches
#SBATCH --ntasks=1
## On définit le temps limit d'éxécution
#SBATCH --time=10:00
## On définit 100Mo de mémoire par cpu
#SBATCH --mem-per-cpu=100
sleep 00:03:00 #on lance un sleep de 3 minutes

Une analyse sera lancé grâce à la commande:

$ sbatch script.sh

Avec script.sh le nom du script à utiliser

Supprimer un job sous Slurm

$ scancel <job_id>

Avec <job_id>: le numéro du job


Superviser des ressources sous Slurm:

Avoir des informations sur les jobs :

On utilise la commande

$ squeue

Pour que les informations sur les jobs se rafraichissent toutes les 5 secondes

$ squeue -i 5

Pour avoir des infos sur un job en particulier

$ scontrol show job <job_id>

Avec <job_id>: le numéro du job

Pour avoir des infos sur les jobs d'un utilisateur en particulier

$ squeue -u <user>

Avec <user>: le login de l'utilisateur

Pour avoir des informations précises sur tous les jobs:

$ sacct --format=JobID,elapsed,ncpus,ntasks,state,node

Pour avoir des informations sur les ressources utilisées par un job terminé:

$ seff <job_id>

Avec <job_id>: le numéro du job

On peut également rajouter la commande suivante en fin de script pour obtenir des informations sur les informations utilisées dans le fichier de sortie:

$ seff $SLURM_JOB_ID

Avoir des infos sur les partitions (files d'attentes)

Taper la commande:

$ sinfo

Cette commande donne des informations sur les partitions et les noeuds qui leur sont rattachés.

Pour des informations plus précises:

$ scontrol show partitions

De manière générale scontrol show peut être utiliser avec nodes, user, account etc...

Connaitre la limite de temps par parttion:

$sinfo -o "%10P %.11L %.11l"

Avoir des infos sur le noeuds de calcul

Taper le commande:

$ sinfo -N -l

Plusieurs états sont possibles:

  • alloc : le noeud est utilisé entièrement

  • mix : le noeud est partiellement utilisé

  • idle : Aucun job ne tourne sur le noeud

  • drain :Le noeud est entrain de finir des jobs reçus mais n'en accepte pas de nouveaux ( quand le noeud va être arrêté pour maintenance).

Pour obtenir des informations encore plus précises:

$ scontrol show nodes

Commandes d'administration sous Slurm:

La commande sacctmgrsuivie d'options permet de modifier des valeurs sur différents paramètre: account, user, ressources, nodes, partitions etc

Rajouter un utilisateur à un account (group).

Sous Slurm faire appartenir un user à un account permet de gérer ses droits et ses privilèges sous slurm.

Par exemple si on veut que l'utilisateur dom appartienne au group bioinfo, on écrira:

$ sacctmgr create user dom account=bioinfo fairshare=1000

Changer les limites de ressources pour un account

On utilisera la commande

$ sacctmgr modify + options

Par exemple pour imposer une limite à 100 cpus pour le compte bioinfo:

$ sacctmgr modify  account bioinfo set GrpTRES=cpu=100

Pour supprimer la limite du nombre de cpus pour le compte bioinfo:

$ sacctmgr modify  account bioinfo set GrpTRES=cpu=-1

Links


License

The resource material is licensed under the Creative Commons Attribution 4.0 International License (here).