Gpu computing

A.A. 2025/2026
6
Crediti massimi
48
Ore totali
SSD
INF/01
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 non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.

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
Materiale di riferimento I lucidi delle lezioni, i testi di riferimento e la documentazione tecnica di supporto saranno resi disponibili sulla pagina web del corso sulla piattaforma Ariel. Eventuali articoli scientifici, manuali o risorse software aggiuntive verranno indicati e discussi durante il corso.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di due parti:
- Prova scritta: domande aperte sugli argomenti trattati a lezione (fino a un massimo 24 punti)
- Progetto: sviluppo di un progetto basato sul linguaggio CUDA C (fino a un massimo 10 punti)
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Docente: Grossi Giuliano
Docente/i
Ricevimento:
Su appuntamento (da prendere per email)
Stanza 4016, 4° piano di via Celoria 18