HOME| CRESCO| Guide/tutorials| Contatti| F.A.Q.

CRESCO: Descrizione del Cluster CRESCO8 di Portici


SOMMARIO:

  1. Caratteristiche del Cluster
  2. Nodi di front-end
  3. Accesso
  4. File System
  5. Compilatori e librerie numeriche
  6. Uso di Modules
  7. Flavour MPI presenti
  8. Vtune Profiler
  9. GPU Intel
  10. Come sottomettere un job

1. Caratteristiche del cluster

Il cluster CRESCO8 di Portici è un sistema di calcolo costituito da 793 nodi di calcolo, divisi in tre partizioni: In aggiunta, ogni nodo ha: Si hanno quindi a disposizione un totale di 101136 core e 68 GPU (136 GPU tiles) connessi tra loro da una rete a larga banda e bassa latenza basata su Mellanox-NDR a 200 Gb/s.

L'architettura di un nodo CPU di CRESCO8 è riconducibile al seguente schema:

Cresco project site

[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 CRESCO8 si hanno a disposizione i front-end:

[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 CRESCO8.

L'accesso ai front-end di ENEAGRID può avvenire anche via web dalla pagina di CRESCO (www.cresco.enea.it) mediante l'interfaccia legacy FARO/THINLINC o la nuova interfaccia basata su OpenOnDemand.

Il servizio di trasferimento dati da e verso gli storage LUSTRE e AFS, basato su due server di I/O, in modalità round-robin è accessibile attraverso l'alias cresco-io.portici.enea.it (alias di cresco-io1/cresco-io2), anche da rete esterna all’ENEA.
Analogamente a cresco-scp.portici.enea.it per il mondo CRESCO6/GPFS/AFS, tale servizio permette di eseguire operazioni di trasferimento dati esclusivamente attraverso i comandi:
  • scp
  • sftp
  • rsync
  • rclone
  • [sommario]


    4. File system

    I file system disponibili su CRESCO8 sono:

    5. Compilatori e librerie numeriche

    Nella tabella seguente sono riportati i compilatori e le librerie numeriche presenti su CRESCO8.


    GNU (11.4.1) Intel (OneAPI2023.2) Intel (OneAPI2025.1)
    PATH compilatori /usr/bin /opt/intel/oneapi2023.2/compiler/2023.2.0/linux/bin/intel64 /opt/intel/oneapi2025.1/compiler/2025.1/bin/
    PATH
    Librerie numeriche
    BLAS/LAPACK/ATLAS

    /usr/lib64

    /usr/lib/atlas-sse*

    /usr/lib64/atlas

    /usr/lib64/atlas-sse*
    Intel MKL

    /opt/intel/oneapi2023.2/mkl/2023.2.0/lib/intel64





    *icc e icpc sono deprecati
    Intel MKL

    /opt/intel/oneapi2025.1/mkl/2025.1/lib





    *non ha più icc e icpc

    6. Uso di Modules.

    Sul cluster CRESCO8 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: La flavour parallela impostata di default per tutti gli utenti è: Se l'utente vuole scegliere una diversa flavour dovrà utilizzare il comando: Ad esempio se si vuole scegliere la libreria OpenMPI compilata con GCC si dovrà dare il comando: 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.4.1) Intel (version OneAPI2023.2) Intel (version OneAPI2025.1)
    OpenMPI openmpi_gcc-4.1.7
    openmpi_intel-4.1.7
    Nessuna flavour
    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. GPU Intel

    Su ognuno dei nodi della partizione accelerata di CRESCO8 sono presenti 4 GPU Intel(R) Data Center GPU Max 1550 (Ponte Vecchio), ognuna con 128 Xe core e 128 GB di memoria HBM2e suddivisi su due unità di calcolo (tiles), che a tutti gli effetti possono essere viste come 8 GPU indipendenti.

    Queste GPU supportano l'esecuzione di codici OpenCL e SYCL (NB: NON supportano codice CUDA/ROCm delle GPU NVidia e AMD).

    Per visualizzare la lista e monitorare l'utilizzo e i consumi delle GPU di un nodo è possibile usare l'utility xpu-smi. Una guida rapida per lo strumento in questione si trova al seguente link.

    Di seguito alcuni link utili per la programmazione e l'esecuzione di codici che utilizzano le GPU Intel:

    [sommario]


    10. Come sottomettere un job

    Lo scheduler che gestisce le risorse di CRESCO8 e che permette la sottomissione di job batch è SLURM.

    Sotto vengono riportate le partizioni SLURM definite per CRESCO8 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).

    Partizioni definite su CRESCO8:
    Sulla partizione cresco8_cpu sono state definite delle "quality of service" che consentono agli utenti un utilizzo di risorse massimo di 250 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=cresco8_cpu
    #SBATCH --job-name=serialJOB
    #SBATCH --err=%j.err
    #SBATCH --out=%j.out

    /path/to/exe

    • Esempio per job MPI (nell'esempio riportato il job occuperà 20 nodi di CRESCO8 lanciando 128 processi MPI per nodo)

    #!/bin/bash

    #SBATCH --nodes=20
    #SBATCH --ntasks-per-node=128
    #SBATCH --partition=cresco8_cpu
    #SBATCH --job-name=jobMPI
    #SBATCH --err=%j.err
    #SBATCH --out=%j.out

    mpirun /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à 64 threads)

    #!/bin/bash

    #SBATCH --nodes=20
    #SBATCH --ntasks-per-node=2
    #SBATCH --cpus-per-task=64
    #SBATCH --ntasks-per-socket=1
    #SBATCH --partition=cresco8_cpu
    #SBATCH --job-name=jobMPI
    #SBATCH --err=%j.err
    #SBATCH --out=%j.out

    export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

    mpirun --bind-to none /path/to/exe

    • Esempio per job che utilizzano GPU (nell'esempio riportato il job occuperà 4 nodi lanciando 8 processi MPI per nodo, uno per ogni GPU tile e ognuno dei processi MPI aprirà 16 threads)

    #!/bin/bash

    #SBATCH --nodes=4
    #SBATCH --ntasks-per-node=8
    #SBATCH --cpus-per-task=16
    #SBATCH --partition=cresco8_gpu
    #SBATCH --job-name=jobMPI_GPU
    #SBATCH --gres=gpu:8
    #SBATCH --err=%j.err
    #SBATCH --out=%j.out

    export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

    mpirun /path/to/exe

    • Esempio per job con pinning esplicito delle GPU ai processi MPI (ogni processo MPI vede una GPU tile, fino a 8 processi per nodo)

    #!/bin/bash

    #SBATCH --nodes=4
    #SBATCH --ntasks-per-node=8
    #SBATCH --cpus-per-task=16
    #SBATCH --partition=cresco8_gpu
    #SBATCH --job-name=jobMPI_GPU_pinning
    #SBATCH --gres=gpu:8
    #SBATCH --err=%j.err
    #SBATCH --out=%j.out

    export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

    mpirun bash -c 'ZE_AFFINITY_MASK=$((PMI_RANK%SLURM_NTASKS_PER_NODE)) /path/to/exe'

    • Esempio di sottomissione per tutte le tipologie di job:

    • Gestione del token AFS nei job batch:

    • Esempi di sessioni interattive:

    • COMANDI UTILI:

    • LINK UTILI:



    [sommario]


    ultimo aggiornamento: 01/07/2025|e-mail: Guido Guarnieri