Esempi di job Slurm con sbatch - ARIES
Introduzione
sbatch invia a Slurm uno script batch. Gli esempi seguenti utilizzano le partizioni e le QoS ARIES documentate nei dati forniti.
Le richieste devono rispettare contemporaneamente partizione, QoS, associazione/account e relativi limiti.
Job CPU standard su low
La partizione low ammette low, normal e high e ha MaxTime=3-00:00:00.
#!/bin/bash -l
#SBATCH --job-name=cpu_normal
#SBATCH --partition=low
#SBATCH --qos=normal
#SBATCH --time=01:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
hostname
srun ./programma
Invio:
sbatch job_cpu.sh
Job sulla partizione high
La partizione high ha MaxTime=1-12:00:00 ed è associata alla QoS high.
#!/bin/bash -l
#SBATCH --job-name=high_job
#SBATCH --partition=high
#SBATCH --qos=high
#SBATCH --time=12:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
srun ./programma
Job sulla partizione ulow
ulow è la partizione predefinita nei dati ARIES forniti e ha tempo massimo di 14 giorni.
#!/bin/bash -l
#SBATCH --job-name=ulow_job
#SBATCH --partition=ulow
#SBATCH --time=2-00:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
srun ./programma
Job breve su user-debug
user-debug ha un tempo massimo di 30 minuti.
#!/bin/bash -l
#SBATCH --job-name=debug_job
#SBATCH --partition=user-debug
#SBATCH --time=00:15:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=2
srun ./programma
Job GPU sulla partizione ice4hpc
Nei dati ARIES forniti, ice4hpc comprende gnode01 e utilizza la QoS gpus. La QoS gpus ha MaxTRES=cpu=8,gres/gpu=4,mem=100G e MaxTRESPU=cpu=24,gres/gpu=4,mem=303G,node=1.
#!/bin/bash -l
#SBATCH --job-name=gpu_job
#SBATCH --partition=ice4hpc
#SBATCH --qos=gpus
#SBATCH --gres=gpu:1
#SBATCH --cpus-per-task=8
#SBATCH --mem=100G
#SBATCH --time=01:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
nvidia-smi
srun ./programma_gpu
Job sulla partizione grumo_pnrr
Nei dati forniti grumo_pnrr ammette gli account lab e grumo_pnrr e la QoS nolimits.
#!/bin/bash -l
#SBATCH --job-name=grumo_job
#SBATCH --partition=grumo_pnrr
#SBATCH --qos=nolimits
#SBATCH --account=grumo_pnrr
#SBATCH --time=1-00:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
srun ./programma
Job sulla partizione ecosister
#!/bin/bash -l
#SBATCH --job-name=ecosister_job
#SBATCH --partition=ecosister
#SBATCH --qos=nolimits
#SBATCH --account=ecosister
#SBATCH --time=1-00:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
srun ./programma
Monitoraggio
squeue -u $USER
scontrol show job <jobid>
scancel <jobid>
Esempi MPI generici
ARIES espone tramite Slurm i plugin MPI none, pmix, cray_shasta e pmi2; è inoltre disponibile il plugin specifico pmix_v4. Gli esempi sono intenzionalmente generici perché non è stato specificato quale modulo/implementazione MPI venga utilizzato per compilare le applicazioni.
MPI multinodo con sbatch
#!/bin/bash -l
#SBATCH --job-name=mpi_test
#SBATCH --partition=low
#SBATCH --qos=normal
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
#SBATCH --time=01:00:00
# Caricare il modulo MPI utilizzato per compilare il programma.
# module load <modulo_mpi>
srun --mpi=pmix ./programma_mpi
MPI + OpenMP sui nodi da 52 core
Un esempio che utilizza 52 CPU Slurm per nodo è costituito da 4 task MPI per nodo e 13 thread OpenMP per task:
#!/bin/bash -l
#SBATCH --job-name=mpi_openmp
#SBATCH --partition=low
#SBATCH --qos=normal
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=13
#SBATCH --time=01:00:00
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
srun --mpi=pmix ./programma_mpi_openmp
Su ciascun nodo: 4 x 13 = 52 CPU Slurm.
PMIx v4
Se l'implementazione MPI caricata è compatibile con PMIx v4, ARIES espone anche:
srun --mpi=pmix_v4 ./programma_mpi
PMI2
srun --mpi=pmi2 ./programma_mpi
Esempi di job Slurm interattivi con srun - ARIES
Introduzione
srun permette di richiedere risorse a Slurm e avviare direttamente un comando o una shell interattiva.
Gli esempi sono costruiti sui limiti di partizioni e QoS ARIES forniti. Le autorizzazioni effettive dipendono anche dall'associazione Slurm dell'utente.
Shell CPU sulla partizione low
srun --partition=low --qos=normal --time=01:00:00 --nodes=1 --ntasks=1 --cpus-per-task=4 --pty bash -l
Shell sulla partizione high
srun --partition=high --qos=high --time=12:00:00 --nodes=1 --ntasks=1 --cpus-per-task=8 --pty bash -l
Shell sulla partizione ulow
srun --partition=ulow --time=02:00:00 --nodes=1 --ntasks=1 --cpus-per-task=4 --pty bash -l
Debug interattivo
La partizione user-debug ha un massimo di 30 minuti.
srun --partition=user-debug --time=00:15:00 --nodes=1 --ntasks=1 --cpus-per-task=2 --pty bash -l
Sessione GPU su ice4hpc
La QoS gpus limita il singolo job a cpu=8,gres/gpu=4,mem=100G.
Esempio con una GPU:
srun --partition=ice4hpc --qos=gpus --gres=gpu:1 --cpus-per-task=8 --mem=100G --time=01:00:00 --nodes=1 --ntasks=1 --pty bash -l
Dopo l'allocazione:
nvidia-smi
Avvio diretto di un programma CPU
srun --partition=low --qos=normal --time=01:00:00 --cpus-per-task=4 ./programma
Avvio diretto di un programma GPU
srun --partition=ice4hpc --qos=gpus --gres=gpu:1 --cpus-per-task=8 --mem=100G --time=01:00:00 ./programma_gpu
Sessione sulla partizione grumo_pnrr
srun --partition=grumo_pnrr --qos=nolimits --account=grumo_pnrr --time=01:00:00 --nodes=1 --ntasks=1 --cpus-per-task=8 --pty bash -l
Sessione sulla partizione ecosister
srun --partition=ecosister --qos=nolimits --account=ecosister --time=01:00:00 --nodes=1 --ntasks=1 --cpus-per-task=8 --pty bash -l
Esempi MPI generici con srun
ARIES rende disponibili pmix, pmi2, cray_shasta, none e, nell'output fornito, il plugin specifico pmix_v4.
MPI su due nodi
srun --partition=low --qos=normal --nodes=2 --ntasks-per-node=4 --time=01:00:00 --mpi=pmix ./programma_mpi
MPI + OpenMP su nodi da 52 core
export OMP_NUM_THREADS=13
srun --partition=low --qos=normal --nodes=2 --ntasks-per-node=4 --cpus-per-task=13 --time=01:00:00 --mpi=pmix ./programma_mpi_openmp
La richiesta utilizza 4 x 13 = 52 CPU Slurm per nodo.
PMIx v4
srun --partition=low --qos=normal --nodes=2 --ntasks-per-node=4 --time=01:00:00 --mpi=pmix_v4 ./programma_mpi
PMI2
srun --partition=low --qos=normal --nodes=2 --ntasks-per-node=4 --time=01:00:00 --mpi=pmi2 ./programma_mpi
La scelta del plugin deve essere compatibile con l'implementazione MPI con cui l'applicazione è stata compilata.