CRESCO: Descrizione del
Cluster CRESCO7 di Portici
SOMMARIO:
- Caratteristiche del Cluster
- Nodi di front-end
- Accesso
- File System
- Compilatori e librerie numeriche
- Uso di Modules
- Flavour MPI presenti
- Vtune Profiler
- Come sottomettere un job
1. Caratteristiche del cluster
Il cluster CRESCO7 di Portici è un sistema di calcolo costituito da
144 nodi. Ogni nodo ha:
- 2 socket da 24 core con processore Intel(R) Xeon(R) Platinum
8160 con frequenza di clock pari 2.10GHz e 192 GB di RAM
- Una interfaccia Mellanox-EDR
- Due interfacce GbE
- Supporto BMC/IPMI e software per la gestione remota della
console
Si hanno quindi a disposizione 6912 core connessi tra loro da una
rete a larga banda e bassa latenza basata su Mellanox-EDR a 100 Gb/s.
L'architettura di un nodo di CRESCO7 è riconducibile al seguente
schema:
[sommario]
2. Nodi di front-end
L'utilizzo del cluster avviene facendo il login su uno dei nodi di
front-end. I nodi di front-end servono semplicemente per il lancio
delle applicazioni tramite SLURM, per editare i propri script di
lancio o per le compilazioni. I nodi di calcolo sono raggiungibili
solo tramite SLURM.
Per il cluster CRESCO7 si hanno a disposizione i front-end:
- cresco7x001.portici.enea.it
- cresco7x002.portici.enea.it (anche per applicazioni
interattive)
[sommario]
3. Accesso
Per accedere al sistema tramite "SSH" è sufficiente collegarsi
direttamente ad uno dei nodi di front-end indicati in precedenza se
il proprio PC è collegato alla LAN di uno dei Centri ENEA.
Dall'esterno collegarsi invece ad uno dei nodi di front-end di
ENEAGRID (meglio se uno di Portici) elencati QUI, e poi ai front-end di CRESCO7.
L'accesso ai front-end di ENEAGRID può avvenire anche via web dalla
pagina di
CRESCO (www.cresco.enea.it) mediante la interfaccia FARO/THINLINC.
[sommario]
4. File system
I file system disponibili su CRESCO7 sono:
-
AFS il file system geograficamente distribuito comune a
tutta ENEAGRID.
Informazioni sulla struttura comune della HOME per tutti gli
utenti di ENEAGRID/CRESCO si trovano nella sezione "File
space and user HOME directory" consultabile qui.
Informazioni di base su AFS per gli utenti di ENEAGRID/CRESCO si
trovano qui.
-
Lustre il file system ad alte prestazioni per l'I/O
parallelo.
Informazioni generali di base su Lustre per gli utenti di
ENEAGRID/CRESCO si trovano qui.
-
GPFS il file system di IBM ad alte prestazioni per l'I/O
parallelo. (NB: montato solo sui frontend e da utilizzare solo per spotare i dati da e verso LUSTRE ).
Informazioni generali di base su GPFS per gli utenti di
ENEAGRID/CRESCO si trovano qui.
5. Compilatori e librerie numeriche
Nella tabella seguente sono riportati i compilatori e le librerie
numeriche presenti su CRESCO7.
|
GNU (11.3.1) |
Intel (17.0.4) |
Intel (18.0.2) |
Intel (OneAPI2023) |
Intel (OneAPI2024) |
PATH compilatori |
/usr/bin |
/opt/intel17/bin |
/opt/intel18/bin |
/afs/enea.it/software/intel_compiler/alma9_2/oneapi2023/compiler/2023.1.0/linux/bin/intel64 |
/afs/enea.it/software/intel_compiler/alma9_2/oneapi2024/compiler/2024.0/bin/compiler |
PATH
Librerie numeriche |
BLAS/LAPACK/ATLAS
/usr/lib64
/usr/lib/atlas-sse*
/usr/lib64/atlas
/usr/lib64/atlas-sse* |
Intel MKL
/opt/intel17/mkl/lib/intel64
|
Intel MKL
/opt/intel18/mkl/lib/intel64 |
Intel MKL
/afs/enea.it/software/intel_compiler/alma9_2/oneapi2023/mkl/latest/lib/intel64
*icc e icpc sono deprecati
|
Intel MKL
/afs/enea.it/software/intel_compiler/alma9_2/oneapi2024/compiler/2024.0/lib
*non ha più icc e icpc
|
6. Uso di Modules.
Sul cluster CRESCO7 l'inizializzazione dell'ambiente per il singolo
utente viene effettuata grazie al software Modules.
Per i dettagli sull'implementazione, sulle scelte fatte e sull'uso
del software è possibile consultare la relativa
documentazione.
Per listare l'elenco degli ambienti disponili si potrà utilizzare il
comando:
- module avail (questo comando elenca, tra gli altri, i
moduli disponibili per gli ambienti paralleli)
La flavour parallela impostata di default per tutti gli utenti è:
- mpi_flavour/openmpi_intel-4.1.5
Se l'utente vuole scegliere una diversa flavour dovrà utilizzare il
comando:
- module switch flavour_attuale flavour_desiderata
Ad esempio se si vuole scegliere la libreria OpenMPI compilata con
GCC si dovrà dare il comando:
- module switch mpi_flavour/openmpi_gcc-4.1.5
A questo punto l'ambiente risulta impostato coerentemente con la
scelta della nuova flavour.
N.B. Per gli utenti che chiamano bash o ksh, affinché Modules riesca
ad impostare correttamente l'ambiente, è necessario
creare nella propria HOME AFS i file .bashrc o .kshrc (oppure
modificarli se giá esistenti) inserendo in testa ad essi delle
opportune righe di codice.
Per il file .bashrc:
if [ -f /usr/share/Modules/init/bash ]
then
. /usr/share/Modules/init/bash
fi
Per il file .kshrc:
if [ -f /usr/share/Modules/init/ksh ]
then
. /usr/share/Modules/init/ksh
fi
[sommario]
7. Flavour MPI presenti.
Le flavour MPI presenti, distinte per compilatore, sono elencate
nella seguente tabella:
|
GNU (version 11.3.1) |
Intel (version 17.0.4/18.0.2) |
Intel (version OneAPI2023) |
OpenMPI |
openmpi_gcc-1.10.4-hfi
openmpi_gcc-4.1.5
openmpi_gcc-4.1.6
|
Nessuna flavour
|
openmpi_intel-4.1.5
|
Intel MPI |
Nessuna flavour |
IntelMPI |
IntelMPI |
[sommario]
8. Vtune Profiler
Per tutti i compilatori Intel si ha a disposizione lo strumento Vtune Amplifier.
Per poter avviare l'applicazione si possono usare i comandi:
amplxe-gui (interfaccia grafica)
amplxe-cl (riga di comando)
Una guida rapida per lo strumento in questione si trova al seguente
link.
[sommario]
9. Come sottomettere un job
Lo scheduler che gestisce le risorse di CRESCO7 e che permette la sottomissione di job batch è SLURM.
Sotto viene riportata la sola partizione SLURM definita per CRESCO7 e vengono proposti alcuni esempi di wrapper di sottomissione per job seriali e job paralleli validi sia per OpenMPI che per IntelMPI. Vengono proposti, altresì, esempi di sottomissione per job ibridi (MPI+openMP).
Partizione definita su CRESCO7:
cresco7 - Sulla partizione si possono sottomettere sia job seriali che paralleli che abbiano un tempo massimo di RUNNING pari a 24 ore.
Sulla partizione per CRESCO7 sono state definite delle "quality of service" che consentono agli utenti un utilizzo di risorse massimo di 40 nodi di calcolo.
La priorità dei job è gestita da un meccanismo di "fairshare" che la abbassa ai job degli utenti che hanno già utilizzato intensamente il sistema.
Di seguito vengono riportati degli esempi di script di sottomissione
per job seriali, job parallei e job ibridi.
•
Esempio per job seriali (nell'esempio riportato il job occuperà un solo core su un nodo)
#!/bin/sh
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --partition=cresco7
#SBATCH --job-name=seriaJOB
#SBATCH --auks=yes
#SBATCH --err=%j.err
#SBATCH --out=%j.out
#SBATCH --account=your_account
/path/to/exe
|
•
Esempio per job MPI (nell'esempio riportato il job occuperà 20 nodi di cresco7 lanciando 48 processi MPI per nodo)
#!/bin/bash
#SBATCH --nodes=20
#SBATCH --ntasks-per-node=48
#SBATCH --partition=cresco7
#SBATCH --job-name=jobMPI
#SBATCH --auks=yes
#SBATCH --err=%j.err
#SBATCH --out=%j.out
#SBATCH --account=your_account
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
mpirun --bind-to none /path/to/exe
|
• Esempio per job ibridi (nell'esempio riportato il job occuperà 20 nodi lanciando due processi MPI per nodo, uno per socket ed ognuno dei 2 processi MPI aprirà 24 threads)
#!/bin/bash
#SBATCH --nodes=20
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=24
#SBATCH --ntasks-per-socket=1
#SBATCH --partition=cresco7
#SBATCH --job-name=jobMPI
#SBATCH --auks=yes
#SBATCH --err=%j.err
#SBATCH --out=%j.out
#SBATCH --account=your_account
echo $SLURM_CPUS_PER_TASK
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
mpirun --bind-to none /path/to/exe
|
• Esempio di sottomissione per tutte le tipologie di job:
sbatch script_di_sottomissione
• Gestione del token AFS nei job batch:
Per usufruire del filesystem AFS durante l'esecuzione dei job batch, il token viene generato sui nodi remoti dai demoni di SLURM grazie all'integrazione con AUKS ed all'utilizzo all'interno di AUKS di un "helper script" (eventuale link alla documentazione di AUKS).
AUKS si occupa della generazione del ticket Kerberos sui nodi remoti prelevando le credenziali dell'utente dalla cache dei nodi di login e l'helper script a suo corredo, attraverso una chiamata ad aklog, genera sul ticket Kerberos il relativo token AFS.
Per proteggere il token generato sui nodi remoti si consiglia l'esecuzione degli script di sottomissione all'interno di una pagsh.
Il token generato all'interno di una pagsh, difatti, è "visibile/utilizzabile" dai soli processi figli della pagsh stessa.
Agendo in tal modo si proteggono e distinguono i token generati su un dato nodo di calcolo da più job di uno stesso utente.
Un eventuale comando di unlog eseguito per un dato job distruggerebbe il token generato solo per quel job, se invece il token non fosse protetto in una pagsh il comando di unlog priverebbe di autorizzazione tutti i job dello stesso utente in esecuzione sullo stesso nodo.
Per far questo, negli esempi sopra riportati, va sostituita la riga #!/bin/bash con la riga #!/usr/bin/pagsh ed aggiunto il comando aklog a valle delle direttive #SBATCH.
A titolo di esempio viene riportato lo script di sottomissione per job ibridi che diventerebbe:
#!/usr/bin/pagsh
#SBATCH --nodes=20
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=24
#SBATCH --ntasks-per-socket=1
#SBATCH --partition=cresco7
#SBATCH --job-name=jobMPI
#SBATCH --auks=yes
#SBATCH --err=%j.err
#SBATCH --out=%j.out
#SBATCH --account=your_account
aklog
echo $SLURM_CPUS_PER_TASK
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
mpirun --bind-to none /path/to/exe
|
• Esempi di sessioni interattive:
Sessione Console:
$ srun --account=hpc --nodes=1 --ntasks-per-node=2 -p cresco7 --pty /bin/bash
Sessione Grafica (NB! aggiungere la flag " X" al comando ssh per entrare nel frontend):
$ srun --x11 --account=hpc --nodes=1 --ntasks-per-node=2 -p cresco7 octave
• COMANDI UTILI:
squeue #mostra la lista di job al momento in coda nel cluster
scancel #cancella il job <job_id> dalla coda di sottomissione
sattach <job_id>.0 #mostra l'output del job <job_id> in tempo reale
sacct #mostra lista dei job recenti dell'utente
scontrol show job <job_id> #mostra info dettagliate sul job <job_id>
sinfo #mostra info sul numero e lo stato dei nodi del cluster
• LINK UTILI:
[sommario]