Servizi IT per l'Ateneo logo

HPC@PoliTO

HPC@PoliTO fornisce risorse di calcolo ad alte prestazioni (High-Performance Computing) a supporto delle attività di ricerca e didattiche del Politecnico di Torino. Gestito dalla Divisione Cybersecurity and IT for Research (ISIAD), il nostro obiettivo è offrire un’infrastruttura computazionale solida e centralizzata che consenta a centinaia di utenti — tra cui tesisti, dottorandi, ricercatori, docenti e gruppi studenteschi afferenti a tutti i dipartimenti — di svolgere in modo efficiente simulazioni complesse, analisi dati ed elaborazioni ad elevata intensità computazionale.

Le risorse di HPC@PoliTO contribuiscono a tutti i principali ambiti scientifici dell'Ateneo, spaziando dalla fluidodinamica computazionale alla chimica fisica, fino alla bioinformatica e all’AI generativa. Il cuore dell'infrastruttura è il cluster HPC “Legion”, a cui gli utenti accedono tramite un’interfaccia di login comune per sottomettere i propri workload su hardware specializzato. Un apposito scheduler gestisce le richieste di lavoro assegnando le risorse in modo equo e ottimizzato.

I nodi di calcolo ed i sistemi di storage sono interconnessi tramite una rete dedicata Infiniband (200 Gb/s e 100 Gb/s) ad altissime prestazioni e bassissima latenza, garantendo un ottimo scale-out anche dei carichi di lavoro più intensi.

Il cluster è complementato da un’ulteriore rete interna Ethernet con banda a 10 Gb/s per garantire la connettività degli utenti e la gestione operativa del sistema.

Architettura del sistema HPC
Schema dell’infrastruttura HPC del Politecnico di Torino. L’immagine mostra due isole di calcolo (“ISOLA 1” e “ISOLA 2”) connesse tra loro e a sistemi di archiviazione e login. Le connessioni sono rappresentate con colori diversi: rosso per InfiniBand HDR 200 Gb/s, blu per InfiniBand EDR 100 Gb/s e verde per Ethernet 10 Gb/s. Le isole sono collegate a: uno storage $SCRATCH BeeGFS da circa 800 TB, uno storage $HOME NFS da circa 1 PB, i nodi di login “hpc-legionlogin”, macchine virtuali di frontend, database utenti e provisioning. Dalla rete interna LAN PoliTO, accessibile tramite VPN PoliTO, gli utenti possono connettersi via SSH ai nodi di login e, da lì, alle risorse di calcolo.

Immagine
immagine di pc

Il cuore dell’infrastruttura HPC@PoliTO è il cluster LEGION, installato nel 2020 e notevolmente potenziato tra il 2024 e il 2025. Progettato per bilanciare le diverse ed complesse esigenze computazionali dei gruppi di ricerca dell'Ateneo, LEGION comprende 150 nodi di calcolo ad alte prestazioni, così ripartiti:

  • 98 nodi CPU-based (Intel Xeon Skylake & Sapphire Rapids)
  • 52 nodi GPU-based (NVIDIA V100, A40, A100 e H200)

I numeri chiave dell'infrastruttura:

  • 60 TB di memoria RAM complessiva
  • 13,2 TB di VRAM
  • 1,8 PB di storage flash ad alte prestazioni

Il cluster è suddiviso in due macro-partizioni (“Isole”) basate su differenti generazioni hardware:

ISOLA 1

  • 52 Nodi CPU: 2× Intel Xeon 6130 (16 core per socket) | 384 GB RAM DDR4
  • 6 Nodi GPU: 4× NVIDIA V100 SXM (32 GB) | 2× Intel Xeon 6130 | 384 GB RAM DDR4

ISOLA 2

  • 45 Nodi CPU: 2× Intel Xeon 6442Y (24 core per socket) | 512 GB RAM DDR5
  • 27 Nodi GPU A40: 4× NVIDIA A40 (48 GB) | 2× Intel Xeon 6442Y | 512 GB RAM DDR5
  • 1 Nodo GPU A100: 4× NVIDIA A100 (80 GB) | 2× Intel Xeon 6442Y | 1024 GB RAM DDR5
  • 1 Nodo GPU H200: 8× NVIDIA H200 (141 GB) | 2× Intel Xeon 8462Y (32 core per socket) | 2048 GB RAM DDR5

A supporto dell'infrastruttura di calcolo, il cluster si avvale di due sistemi di storage distinti e complementari: 

  • $HOME: un Network Attached Storage (NAS) ad alta capacità per archiviare la cartella personale dell'utente e i suoi dati; i dati sono permanenti (vengono eliminati 6 mesi dopo la scadenza dell'account). Quota predefinita = 1,5 TB per utente.
  • $SCRATCH: un file system parallelo BeeGFS temporaneo, ad alte prestazioni e con capacità inferiore, che offre spazio per carichi di lavoro ad alto traffico di I/O; i file con più di 30 giorni vengono eliminati automaticamente. Quota predefinita = 5 TB per utente.

     

Copiare file nella propria home di HPC@PoliTO ($HOME)

Per copiare file da e verso il cluster Legion si consiglia di utilizzare il protocollo scp. Per copiare un file o una cartella dalla propria cartella home su Legion al computer locale, utilizzare il seguente comando:

                       scp -r username@hpc-legionlogin.polito.it:/home/username/file /path/locale/

dove /home/username è la home del proprio account (accessibile anche come $HOME), file è il file (o la cartella) che si desidera copiare e /path/locale/ è la cartella sul computer locale in cui si vuole copiare il file.

 

Copiare file dalla propria home di HPC@PoliTO ($HOME)

Per copiare un file o una cartella dal computer locale alla propria cartella home su Legion, utilizzare il seguente comando:

                     scp -r /path/locale/file username@hpc-legionlogin.polito.it:/home/username/cartella

dove username è il nome utente del proprio account, /path/locale/file è il file (o la cartella) da copiare e /home/username/cartella è la destinazione sul cluster.

 

Utilizzare il file system ad alte prestazioni BeeGFS ($SCRATCH)

$SCRATCH è uno spazio di archiviazione temporaneo ad alte prestazioni a cui gli utenti possono accedere per eseguire i propri job (maggiori informazioni sul file system $SCRATCH e su BeeGFS sono disponibili nel manuale). Per sfruttare le migliori prestazioni di I/O del file system BeeGFS, è opportuno prima spostare i propri file (es. i dataset) dalla cartella home a una cartella dedicata su $SCRATCH. Tipicamente, i job accederanno a questi dati e produrranno nuovi file contenenti i risultati delle simulazioni. Al termine delle simulazioni, è necessario ricopiare i dati rilevanti (evitando i file temporanei) nella propria home per una conservazione più sicura e a lungo termine. Si possono semplicemente copiare i dati (file e cartelle) da $HOME a $SCRATCH usando cp:

                                        cp -r $HOME/cartella_job/file $SCRATCH/cartella_job/

e viceversa da $SCRATCH a $HOME con:

                                        cp -r $SCRATCH/cartella_job/file $HOME/cartella_job/

oppure usando rsync se si desidera ricopiare nella home soltanto i nuovi dati prodotti. Nel manuale è anche descritto come integrare lo spostamento dei dati da $HOME a $SCRATCH (e viceversa) direttamente all'interno di uno script di sottomissione SLURM.

Per una panoramica completa sull'argomento si rimanda al manuale in fondo nei documenti in allegato: si raccomanda di leggerlo!

Risorse condivise

Poiché le risorse computazionali sono limitate, è di fondamentale importanza garantire un accesso equo a tutti gli utenti e un uso efficiente dell'infrastruttura. Questo aspetto viene gestito tramite lo scheduler SLURM, che raccoglie le richieste di job inviate da tutti gli utenti e assegna loro le risorse di calcolo richieste non appena risultano disponibili.

Sottomissione dei job

Per eseguire un job sul cluster, gli utenti devono inviare una richiesta allo scheduler SLURM. Non eseguire mai un programma direttamente dalla shell: si tratta di una violazione delle nostre regole ed è una mancanza di rispetto nei confronti dei colleghi! Le richieste allo scheduler SLURM vengono inviate tramite uno script batch composto da 3 sezioni:

  • Parametri del job (ovvero: quale partizione, quanti nodi, quante CPU e GPU, quanto tempo, durata).
  • Configurazione del software (ovvero: definire il software necessario e impostare le relative variabili d'ambiente).
  • Esecuzione della simulazione (ovvero: eseguire il programma ed effettuare la simulazione vera e propria).

Dopo aver preparato lo script di sottomissione per SLURM, il job si invia semplicemente allo scheduler digitando:

                                                                              sbatch nome_script

Monitorare lo stato del job

Una volta inviata la richiesta di un job allo scheduler SLURM, è possibile monitorarne l'avanzamento o controllarne lo stato all'interno della coda. È sufficiente utilizzare il seguente comando:

                                                                            squeue -u username

dove username è il proprio nome utente.

L'output di questo comando mostrerà se il job è in attesa in coda in attesa di risorse (stato=PD) o se è in esecuzione (stato=R), da quanto tempo e su quali nodi di calcolo.

È possibile copiare semplicemente dati (file e cartelle) da $HOME a $SCRATCH usando cp:

                                               cp -r $HOME/cartella_job/file $SCRATCH/cartella_job/

e viceversa da $SCRATCH a $HOME con:

                                              cp -r $SCRATCH/cartella_job/file $HOME/cartella_job/

oppure usando rsync se si desidera ricopiare nella home soltanto i nuovi dati prodotti. Nel manuale è anche descritto come integrare lo spostamento dei dati da $HOME a $SCRATCH (e viceversa) direttamente all'interno di uno script di sottomissione SLURM.

Altri numeri

0
CPU cores
0
NVIDIA V100
0
NVIDIA A100
0
NVIDIA A40

Soluzioni su cui si basa il sistema

Immagine
logo di intel xeon
Immagine
logo di nvidia
Immagine
logo di mellanox
Immagine
logo di rocky linux
Immagine
logo di bee gfs
Immagine
logo di slurm workload manager

Questa sezione contiene alcuni esempi di script che puoi adattare per eseguire i tuoi lavori. Fai sempre riferimento al manuale in fondo per una panoramica completa sull'argomento.

ESEMPIO 1 

L'esempio seguente sottomette allo scheduler una richiesta di job MPI parallelo, richiedendo 1 nodo di calcolo (-N 1), l'esecuzione di 48 task MPI (--ntasks-per-node=48), senza parallelizzazione a memoria condivisa (--cpus-per-task=1) e senza hyperthreading (--threads-per-core=1). 

#!/usr/bin/env bash 

#SBATCH -N 1 

#SBATCH --ntasks-per-node=48 

#SBATCH --cpus-per-task=1 

#SBATCH --threads-per-core=1 

#SBATCH --time 0-00:30:00 

#SBATCH --partition=cpu_sapphire 

#SBATCH --mail-type=ALL 

#SBATCH --mail-user=nome.cognome@polito.it

ESEMPIO 2 

L'esempio seguente sottomette allo scheduler una richiesta di job MPI parallelo, richiedendo 2 nodi di calcolo (-N 2), l'esecuzione di 48 task MPI per nodo (--ntasks-per-node=48), senza parallelizzazione a memoria condivisa (--cpus-per-task=1) e senza hyperthreading (--threads-per-core=1). Richiede esplicitamente specifici nodi di calcolo per il job (--nodelist=compute-X-Y). L'eseguibile viene quindi lanciato utilizzando un totale di 96 task MPI.

 #!/usr/bin/env bash 

#SBATCH -N 2 

#SBATCH --ntasks-per-node=48 

#SBATCH --cpus-per-task=1 

#SBATCH --threads-per-core=1 

#SBATCH --time 0-00:30:00 

#SBATCH --partition=cpu_sapphire 

#SBATCH --mail-type=ALL 

#SBATCH --mail-user=nome.cognome@polito.it 

#SBATCH --nodelist=compute-X-Y,compute-K-Z

ESEMPIO 3 

L'esempio seguente sottomette allo scheduler una richiesta di job MPI parallelo, richiedendo 2 nodi di calcolo (-N 2), l'esecuzione di 48 task MPI per nodo (--ntasks-per-node=48), senza parallelizzazione a memoria condivisa (--cpus-per-task=1) e senza hyperthreading (--threads-per-core=1). Esclude esplicitamente specifici nodi di calcolo per il job (--exclude=compute-X-Y). L'eseguibile viene quindi lanciato utilizzando un totale di 96 task MPI. 

#!/usr/bin/env bash 

#SBATCH -N 2 

#SBATCH --ntasks-per-node=48 

#SBATCH --cpus-per-task=1 

#SBATCH --threads-per-core=1

 #SBATCH --time 0-00:30:00 

#SBATCH --partition=cpu_sapphire 

#SBATCH --mail-type=ALL 

#SBATCH --mail-user=nome.cognome@polito.it 

#SBATCH --exclude=compute-X-Y,compute-K-Z

ESEMPIO 4 

L'esempio seguente sottomette allo scheduler una richiesta di job ibrido MPI-OpenMP (consultare il manuale per ulteriori dettagli), richiedendo 1 nodo di calcolo (-N 1), l'esecuzione di 12 task MPI per nodo (--ntasks-per-node=12), con 4 thread OpenMP per task (--cpus-per-task=4) e senza hyperthreading (--threads-per-core=1). 

#!/usr/bin/env bash 

#SBATCH -N 1 

#SBATCH --ntasks-per-node=12

 #SBATCH --cpus-per-task=4 

#SBATCH --threads-per-core=1

 #SBATCH --time 0-00:30:00

 #SBATCH --partition=cpu_sapphire

 #SBATCH --mail-type=ALL 

#SBATCH --mail-user=nome.cognome@polito.it 

#SBATCH --exclude=compute-X-Y,compute-K-Z

ESEMPIO 5 

L'esempio seguente sottomette allo scheduler un job MPI con GPU, richiedendo 1 nodo di calcolo (-N 1), l'esecuzione di 4 task MPI (--ntasks-per-node=4), su 4 GPU senza parallelizzazione a memoria condivisa (--cpus-per-task=1) e senza hyperthreading (--threads-per-core=1). 

#!/usr/bin/env bash 

#SBATCH -N 1 

#SBATCH --ntasks-per-node=4 

#SBATCH --cpus-per-task=1 

#SBATCH --threads-per-core=1 

#SBATCH --time 0-00:30:00 

#SBATCH --gres=gpu:4 

#SBATCH --partition=gpu_a40

 #SBATCH --mail-type=ALL 

#SBATCH --mail-user=nome.cognome@polito.it

ESEMPIO 6

L'esempio seguente mostra una modalità di utilizzo del file system ad alte prestazioni BeeGFS. Trasferisce automaticamente i dati di simulazione su $SCRATCH, esegue la simulazione parallela e infine ritrasferisce i dati su$HOME.

#!/usr/bin/env bash

#SBATCH -N 1

#SBATCH --ntasks-per-node=48

#SBATCH --cpus-per-task=1

#SBATCH --threads-per-core=1

#SBATCH --time 0-00:30:00

#SBATCH --partition=cpu_sapphire

#SBATCH --mail-type=ALL

#SBATCH --mail-user=nome.cognome@polito.it

 

module purge 

module load openmpi/5.0.7_gcc12 

module load {mio_modulo} ## sostituisci {mio_modulo} con quello effettivo 

 

mkdir $SCRATCH/percorso-directory-simulazione cp $HOME/percorso-directory-lavoro/*$SCRATCH/percorso-directory-simulazione cd $SCRATCH/percorso-directory-simulazione 

mpirun -np 4 eseguibile_mio_modulo [ALTRI PARAMETRI] 

rsync $SCRATCH/percorso-directory-simulazione/*$HOME/percorso-directory-lavoro/

 

Il software sul cluster Legion può essere gestito e utilizzato in tre modi diversi:

  • centrale: gli amministratori di sistema forniscono installazioni centralizzate delle suite software più frequentemente utilizzate. Gli utenti possono caricare i pacchetti necessari tramite gli Environment Modules e utilizzarli direttamente per le loro simulazioni;
  • locale: agli utenti è consentito compilare e installare software nella propria directory home, senza privilegi elevati. HPC@PoliTO fornisce Spack, che gestisce comodamente i percorsi e le variabili d'ambiente del software installato localmente;
  • container: agli utenti è consentito eseguire i propri container, senza la necessità di privilegi elevati, utilizzando Apptainer. 

Environment Modules

 Il pacchetto Environment Modules consente di modificare dinamicamente le variabili d'ambiente durante una sessione utente. Per gli utenti, appare come se stessero installando questi pacchetti su richiesta. L'uso dei moduli è consigliato se il pacchetto e la versione necessari sono disponibili. 

COMANDI BASE:

  • module avail: mostra i moduli attualmente disponibili sul cluster; 
  • module load {nome modulo}: carica il modulo specificato; 
  • module show {nome modulo}: mostra informazioni sul modulo specificato; 
  • module list: mostra i moduli caricati in questa sessione utente; 
  • module unload {nome modulo}: scarica il modulo specificato; 
  • module purge: scarica tutti i moduli in questa sessione utente.

Come richiedere le risorse

Contatti

 
Immagine
icone ufficiali (1).png

Indirizzo email

hpc@polito.it

Chi troverà utile questo articolo

 
Immagine
icona docenti

Docenti

 
Immagine
icona studenti

Ricercatori