Gpu computing

A.A. 2026/2027
6
Crediti massimi
48
Ore totali
SSD
INFO-01/A
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di fornire agli studenti una formazione avanzata sull'utilizzo delle GPU come piattaforme computazionali ad alte prestazioni, con un duplice focus: da un lato l'acquisizione di competenze sul modello di programmazione parallela CUDA per il calcolo general purpose, dall'altro l'applicazione di tali competenze allo sviluppo e all'ottimizzazione di modelli di deep learning mediante librerie come PyTorch. Attraverso un bilanciamento tra lezioni teoriche e attività pratiche, l'insegnamento favorisce l'integrazione tra i fondamenti architetturali delle GPU, i principali pattern di parallelismo e le strategie di accelerazione per reti neurali, generative models e modelli su strutture geometriche non-euclidee. Lo sviluppo di capacità progettuali e sperimentali su scenari applicativi concreti permette agli studenti di maturare una solida comprensione sia dei concetti teorici sia delle loro implicazioni operative, anche in connessione con le linee di ricerca attuali nel campo dell'HPC e dell'intelligenza artificiale.
Risultati apprendimento attesi
I risultati di apprendimento attesi sono i seguenti:
- Conoscere e comprendere le architetture GPU moderne e il modello di calcolo parallelo CUDA per HPC e AI.
- Conoscere i principali paradigmi di deep learning (ad es. GAN, VAE, Transformer, GNN) e le tecniche di accelerazione per il loro addestramento su GPU.
- Scrivere e ottimizzare codice CUDA C per kernel paralleli general purpose.
- Implementare e addestrare modelli di deep learning avanzati in PyTorch, sfruttando le GPU per l'accelerazione computazionale.
- Applicare tecniche di profiling e analisi delle prestazioni per migliorare l'efficienza dei processi di training e inferenza.
- Valutare criticamente soluzioni computazionali GPU-based per problemi di intelligenza artificiale e calcolo scientifico.
- Individuare scelte progettuali ottimali nell'implementazione di modelli e algoritmi su architetture parallele.
- Presentare e discutere in modo chiaro e rigoroso architetture, tecniche di accelerazione e risultati sperimentali, anche mediante relazioni scritte o presentazioni orali.
- Proseguire autonomamente nello studio di modelli e librerie software emergenti nel campo del GPU computing e dell'intelligenza artificiale applicata.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Secondo quadrimestre

Programma
L'insegnamento è articolato in tre parti e ha l'obiettivo di introdurre ed approfondire le tecniche e i paradigmi del calcolo parallelo su GPU in ambito High Performance Computing e Intelligenza Artificiale:

Parte 1: GPU Computing per HPC (18 h)
1. Il modello di calcolo parallelo CUDA per GPU di Nvidia - Multithreading gerarchico.
2. Elementi architetturali delle GPU Nvidia - Modello di memoria e deployment di processi.
3. Il modello di programmazione parallela CUDA - Uso dei linguaggi C e python.
4. Tecniche di accelerazione di kernel CUDA per il calcolo general purpose o HPC.
5. Analisi delle prestazioni e profilazione - Ottimizzazione e concorrenza.
6. Pattern di parallelismo - Scan, reduction, sorting.

Parte 2: Programmazione GPU per l'IA (9 h)
1. Gestione di modelli di deep learning su GPU - Librerie ottimizzate PyTorch e cuDNN.
2. Inizializzazione e ottimizzazione - Cross-entropy loss, stochastic gradient descent, PyTorch optimizers, grafi di operatori e autograd.
3. Tecniche di accelerazione per il deep learning - Scelte architetturali, protocolli di training, dropout e batch normalization, fine tuning dei modelli.

Parte 3: Modelli di deep Learning e loro implementazione in PyTorch (21 h)
1. Normalizing flows ed equazioni differenziali neuronali (NODEs)
2. Modelli generativi (GAN, VAE) e modelli di diffusione (DDPM)
3. Modelli Attentivi e Architetture Transformer (BERT, GPT)
4. Geometric Deep Learning: modelli su strutture non-Euclidee con PyTorch Geometric (GNN equivarianti)
5. Cenni su principali ambiti applicativi delle GPU: ricerca scientifica e industriale, simulazioni fisiche e naturali, AI generativa e LLM.
Prerequisiti
È richiesta una buona conoscenza del linguaggio Python, con particolare riferimento alla programmazione orientata agli oggetti, alla manipolazione di array mediante NumPy e all'utilizzo di librerie per il calcolo numerico. È inoltre consigliata la conoscenza di base del linguaggio C, utile per comprendere il modello di programmazione parallela CUDA C adottato nel primo modulo del corso.
Metodi didattici
L'insegnamento si articola attraverso lezioni frontali, esercitazioni pratiche in laboratorio e discussioni guidate di articoli scientifici. Le lezioni teoriche mirano a fornire le basi concettuali e matematiche per comprendere algoritmi paralleli e modelli di apprendimento profondo su strutture non-euclidee ed equivarianti.
Le attività di laboratorio sono finalizzate allo sviluppo di competenze applicative, con particolare attenzione all'implementazione di pattern di parallelismo classici e modelli neurali su grafi, utilizzando librerie come PyTorch e PyTorch Geometric.
L'insegnamento fa ampio uso della piattaforma Ariel per la condivisione di materiali didattici, notebook e articoli di approfondimento. È fortemente consigliata la frequenza per poter trarre pieno beneficio dalle attività pratiche e interattive, che rappresentano parte integrante del percorso formativo.
Materiale di riferimento
Le slide delle lezioni, il materiale didattico integrativo e le eventuali risorse software saranno resi disponibili attraverso la piattaforma Ariel del corso.

Durante lo svolgimento delle attività didattiche potranno inoltre essere segnalati articoli scientifici, documentazione tecnica, manuali e ulteriori materiali di approfondimento utili per lo studio degli argomenti trattati e per lo sviluppo di progetti o attività di ricerca.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame è articolato in due componenti complementari: una prova teorica e un progetto di sviluppo individuale.

Parte 1 - Prova Teorica

La prova teorica ha una durata di 60 minuti e consiste in cinque domande a risposta aperta sugli argomenti trattati durante il corso.

Le domande sono finalizzate a verificare:

* la comprensione dei concetti teorici fondamentali;
* la conoscenza e la padronanza dei modelli e degli algoritmi studiati;
* la capacità di analizzare criticamente metodologie, risultati e possibili applicazioni.

Parte 2 - Progetto di Sviluppo

La seconda parte dell'esame prevede la realizzazione di un progetto individuale su tematiche coerenti con gli argomenti del corso.

Il progetto dovrà includere:

* l'applicazione e/o lo sviluppo di modelli basati su NumPy e PyTorch;
* la definizione preventiva dell'argomento in accordo con il docente;
* la consegna del codice sorgente e di una breve relazione tecnica descrittiva;
* una discussione orale del lavoro svolto.

La discussione del progetto dovrà avvenire entro un anno dal superamento della prova teorica.

Gli studenti interessati possono eventualmente sviluppare il progetto in continuità con una proposta di tesi disponibile sul sito delle Proposte di Tesi Magistrale.

Valutazione Finale

La valutazione finale è ottenuta dalla somma dei punteggi conseguiti nelle due componenti dell'esame:

* Prova teorica: fino a 25/33 punti;
* Progetto di sviluppo: fino a 8/33 punti.

Il voto finale è espresso in trentesimi e deriva dalla conversione del punteggio complessivo. La lode può essere attribuita agli studenti che conseguono una valutazione complessiva superiore a 30/30 e dimostrano una preparazione particolarmente approfondita e matura.
INFO-01/A - Informatica - CFU: 6
Lezioni: 48 ore
Docente: Grossi Giuliano
Turni:
Turno
Docente: Grossi Giuliano
Docente/i
Ricevimento:
Su appuntamento (da prendere per email)
Stanza 4016, 4° piano di via Celoria 18