Unimore HPC Wiki

ARIES · Sottomissione job

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.