Etat des ressources
Partitions
La commande sinfo
permet de lister l'état des partitions. L'option -s
permet d'avoir une vue résumée des files d'attentes et l'option -l
permet d'obtenir plus d'informations. La partition par défaut est repérée par une astérisque. Par exemple:
[user1@hpc2 ~]$ sinfo -s
PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST
normal* up 1-00:00:00 22/13/0/35 hpcnode[01-35]
long up 7-00:00:00 20/0/0/20 hpcnode[01-20]
debug up 1:00:00 0/1/0/1 hpcnode36
[user1@hpc2 ~]$ sinfo -l
Fri Aug 28 12:38:26 2020
PARTITION AVAIL TIMELIMIT JOB_SIZE ROOT OVERSUBS GROUPS NODES STATE NODELIST
normal* up 1-00:00:00 1-infinite no NO all 1 draining hpcnode20
normal* up 1-00:00:00 1-infinite no NO all 10 drained hpcnode[08-12,14-15,17-19]
normal* up 1-00:00:00 1-infinite no NO all 3 mixed hpcnode[01,05,21]
normal* up 1-00:00:00 1-infinite no NO all 21 allocated hpcnode[02,04,06-07,13,16,22-36]
normal* up 1-00:00:00 1-infinite no NO all 1 idle hpcnode03
long up 7-00:00:00 1-6 no NO all 1 draining hpcnode20
long up 7-00:00:00 1-6 no NO all 10 drained hpcnode[08-12,14-15,17-19]
long up 7-00:00:00 1-6 no NO all 3 allocated hpcnode[07,13,16]
smp up 3-00:00:00 1 no NO all 1 mixed hpcsmp01
debug up 1:00:00 1 no NO all 1 idle hpcphi01
gpu up 1-00:00:00 1-infinite no NO piaf,gpu,i 1 mixed iccfgpu01
gpu up 1-00:00:00 1-infinite no NO piaf,gpu,i 1 allocated piafgpu01
gpu up 1-00:00:00 1-infinite no NO piaf,gpu,i 2 idle hpcdgx01,hpcgpu01
fast up 2:00:00 1-infinite no NO all 9 draining hpcnode20,simatlabnode[01-02,04-06,08,10-11]
fast up 2:00:00 1-infinite no NO all 12 drained hpcnode[08-12,14-15,17-19],simatlabnode[03,07]
fast up 2:00:00 1-infinite no NO all 5 mixed hpcnode[01,05,21],hpcsmp01,iccfgpu01
fast up 2:00:00 1-infinite no NO all 23 allocated hpcnode[02,04,06-07,13,16,22-36],piafgpu01,simatlabnode09
fast up 2:00:00 1-infinite no NO all 1 idle hpcnode03
Les états les plus courants sont: idle (totalement disponible), mix (partiellement alloué), alloc (complétement alloué), down (inaccessible), drain (vidange des jobs en cours), maint (maintenance en cours).
La configuration détaillée des partitions peut être visualisée à l'aide de la commande scontrol show partition
:
[user1@hpc2 ~]$ scontrol show partition normal
PartitionName=normal
AllowGroups=ALL AllowAccounts=ALL AllowQos=ALL
AllocNodes=ALL Default=YES
DefaultTime=NONE DisableRootJobs=NO GraceTime=0 Hidden=NO
MaxNodes=UNLIMITED MaxTime=1-00:00:00 MinNodes=1 LLN=NO MaxCPUsPerNode=UNLIMITED
Nodes=hpcnode[01-12]
Priority=1 RootOnly=NO ReqResv=NO Shared=NO PreemptMode=OFF
State=UP TotalCPUs=320 TotalNodes=12 SelectTypeParameters=N/A
DefMemPerCPU=3000 MaxMemPerNode=UNLIMITED
Nœuds de calcul
La commande sinfo -Nle
permet d'avoir une vision centrée sur les nœuds plutôt que sur les partitions. Cela permet de voir rapidement la configuration CPU et RAM des nœuds.
[user1@hpc2 ~]$ sinfo -Nle
Tue Apr 7 14:32:18 2015
NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT FEATURES REASON
hpcnode[01-04] 4 normal* idle 16 2:8:1 64364 0 1 noht,san none
hpcnode[05-08] 4 normal* idle 32 2:8:2 95634 0 1 ht,ivy none
hpcnode[09-10] 2 normal* mixed 32 2:8:2 129001 0 1 ht,ivy none
hpcnode[11-12] 2 normal* idle 32 2:8:2 129001 0 1 ht,ivy none
hpcphi01 1 debug idle 32 2:8:2 96695 0 1 ht,ivy,p none
Tout comme pour les partitions, la configuration détaillée d'un nœud peut être obtenue avec la commande scontrol show node
. Cela permet d'avoir notamment la liste des features des nœuds. Par exemple, pour hpcnode05 (processeur Ivy Bridge avec hyperthreading):
[user1@hpc2 ~]$ scontrol show node hpcnode05
NodeName=hpcnode05 Arch=x86_64 CoresPerSocket=8
CPUAlloc=0 CPUErr=0 CPUTot=32 CPULoad=0.00 Features=ht,ivy
Gres=(null)
NodeAddr=hpcnode05 NodeHostName=hpcnode05 Version=14.11
OS=Linux RealMemory=95634 AllocMem=0 Sockets=2 Boards=1
State=IDLE ThreadsPerCore=2 TmpDisk=0 Weight=1
BootTime=2015-04-01T13:53:51 SlurmdStartTime=2015-04-01T13:54:06
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Jobs
La commande squeue
permet de lister les jobs en cours d'exécution. La colonne ST permet notamment de connaitre l'état du job: R (Running), PD (Pending), S (Suspended), F (Failed), CD (Completed) entre autres.
Dans l'exemple suivant, il y a un job en cours d'exécution sur 4 nœuds et un job en attente de ressources:
[user1@hpc2 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
460 normal ray_vird user1 PD 0:00 2 (Resources)
455 long ray_k30_ user2 R 22:15:20 4 hpcnode[09-12]
Le détail d'un job est obtenu avec la commande scontrol show job
. Dans l'exemple précédent, on peut voir que le job 460 a demandé explicitement des nœuds (cf. attribut ReqNodeList) qui sont déjà alloués au job 455:
[user1@hpc2 ~]$ scontrol show job 460
JobId=460 JobName=ray_virdna1004_new.sh
UserId=user1(5000) GroupId=infra(5000)
Priority=3230 Nice=0 Account=infra QOS=normal
JobState=PENDING Reason=Resources Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
RunTime=00:00:00 TimeLimit=1-00:00:00 TimeMin=N/A
SubmitTime=2015-04-10T13:58:26 EligibleTime=2015-04-10T13:58:26
StartTime=2015-04-12T15:43:08 EndTime=Unknown
PreemptTime=None SuspendTime=None SecsPreSuspend=0
Partition=normal AllocNode:Sid=hpc2:1019
ReqNodeList=hpcnode[09-10] ExcNodeList=(null)
NodeList=(null)
NumNodes=2 NumCPUs=16 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
Socks/Node=* NtasksPerN:B:S:C=0:0:*:1 CoreSpec=*
MinCPUsNode=1 MinMemoryCPU=4000M MinTmpDiskNode=0
Features=(null) Gres=(null) Reservation=(null)
Shared=OK Contiguous=0 Licenses=(null) Network=(null)
Command=/home/user1/tests/ray/ray_virdna1004_new.sh
WorkDir=/home/user1/tests/ray
StdErr=/home/user1/tests/ray/slurm-460.out
StdIn=/dev/null
StdOut=/home/user1/tests/ray/slurm-460.out
Pour avoir des informations comptables sacct
:
sur tous les jobs lancés à compter d'une date pour un utilisateur :
[user1@hpc2 ~]$ sacct -u user1 --format=JobID,JobName,MaxRSS,Elapsed -S 2021-01-18
ou bien sur l'exécution d'un job particulier :
[user1@hpc2 ~]$ sacct -a -o JobID,State,ReqCPUS,ReqMem,Elapsed,CPUTime,MaxRSS,Start,Partition -j 32191
JobID State ReqCPUS ReqMem Elapsed CPUTime MaxRSS Start Partition
------------ ---------- -------- ---------- ---------- ---------- ---------- ------------------- ----------
32191 COMPLETED 1 10000Mn 00:00:25 00:00:50 2021-01-11T13:45:28 normal
32191.ba+ COMPLETED 2 10000Mn 00:00:25 00:00:50 1628K 2021-01-11T13:45:28
Espace de travail des jobs
Sur le cluster de calcul, chaque noeud possède son propre espace de travail pour les jobs situé dans /storage/scratch/
. À la soumission d'un job, on indique la quantité d'espace disque nécessaire dans cet espace de travail pour que le job se déroule correctement. Cela permet d'éviter l'exécution du job sur un noeud de calcul où tout l'espace de travail serait déjà occupé par un autre job. Le paramètre de soumission sbatch/srun est --tmp=10G
par exemple pour demander 10 Go d'espace de travail.
Conjointement à cela, il faut donc s'assurer que le job dépose ses fichiers temporaires de travail dans un répertoire situé sous /storage/scratch/
et non pas dans /tmp/
. Deux cas de figure se présentent alors :
- soit les outils utilisés dans le job permettent cette configuration via un paramètre sur leur ligne de commande lors du lancement ;
- soit les outils utilisés par le job ne le permettent pas et une astuce avec des variables d'environnement permet de modifier le comportement de l'outil.
Pour répondre à cela, le modèle suivant est proposé :
#!/bin/bash
#SBATCH --job-name=simple-example
#SBATCH --partition=normal
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16g
#SBATCH --mail-type=ALL
#SBATCH --mail-user=user.email@uca.fr
#SBATCH --time=02:00:00
#SBATCH --tmp=10G
# Prepare working directory on node
WORKDIR=/storage/scratch/$LOGNAME/$SLURM_JOB_ID
TMPDIR=$WORKDIR/tmp
mkdir -p $WORKDIR
mkdir -p $TMPDIR
# Tell programs to use $TMPDIR instead of /tmp/ when creating temporary files
# (/tmp/ is small, /storage/scratch/ offers more space)
export TMPDIR
# Reminder : we requested 10GB as scratch space, the total amount of data in
# $WORKDIR should not exceed that size.
# Manage data, perform whatever the job is supposed to compute.
...
mytool --input-data=... --output-directory=... --working-directory=$TMPDIR ...
...
# Don't forget to copy selected output files into a durable storage
# Clean-up the working directory
rm -rf $WORKDIR
# end of script
De cette manière, le système répondra aux outils demandant un espace ou un fichier temporaire avec le stockage /storage/scratch/
. On peut même créer un espace pour les données en entrée du job, et inclure une phase de récupération des données avant l'exécution de l'outil, ainsi qu'un espace de sortie :
#!/bin/bash
#SBATCH --job-name=simple-example
#SBATCH --partition=normal
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16g
#SBATCH --mail-type=ALL
#SBATCH --mail-user=user.email@uca.fr
#SBATCH --time=02:00:00
#SBATCH --tmp=10G
# Prepare working directory on node
WORKDIR=/storage/scratch/$LOGNAME/$SLURM_JOB_ID
TMPDIR=$WORKDIR/tmp
INPUTDIR=$WORKDIR/input
OUTPUTDIR=$WORKDIR/output
mkdir -p $WORKDIR
mkdir -p $TMPDIR
mkdir -p $INPUTDIR
mkdir -p $OUTPUTDIR
# Tell programs to use $TMPDIR instead of /tmp/ when creating temporary files
# (/tmp/ is small, /storage/scratch/ offers more space)
export TMPDIR
# Manage input data, from a web source, your HOME directory, or the Mesocentre S3 storage service
INPUTFILE=$INPUTDIR/genome.fasta
wget "http://biodatabanks.example/files/genome.fasta" -O $INPUTFILE
...
# Reminder : we requested 10GB as scratch space, the total amount of data in
# $WORKDIR should not exceed that size.
# Perform whatever the job is supposed to compute.
mytool --input-data=$INPUTFILE --output-directory=$OUTPUTDIR --working-directory=$TMPDIR ...
# Copy selected output files into a durable storage, for instance the user HOME directory,
# an external storage service, or the Mesocentre S3 storage facility
cp $OUTPUTDIR/genome.analysis.txt $HOME/output/
...
# Clean-up the working directory
rm -rf $WORKDIR
# end of script
Dans cet exemple précédent :
- un job multithread avec 4 CPU est demandé
- avec 16Go de RAM
- 10Go d'espace de travail
- sur la partition
normal
- ne durant pas plus de 2h
- avec notifications par mail sur tous les événements liés au job