Questa tesi esplora nuove strategie di early stopping per ridurre l'impatto ambientale (e dunque le emissioni di CO2) durante l'addestramento di modelli di raccomandazione, senza cercare di compromettere in modo sostanziale le performance (rispetto al metodo "classico" di early stopping).
Il lavoro è ereditato dalla seguente repository: sustainability-of-recsys
L’obiettivo principale di questo lavoro è analizzare e migliorare il trade-off tra emissioni e performance nei sistemi di raccomandazione, concentrandosi sulla tecnica dell’early stopping.
Il sistema tiene traccia delle emissioni di un determinato algoritmo di raccomandazione e su un determinato dataset.
Esegue il modello di raccomandazione applicando il set di iperparametri predefiniti (o in alternativa si potrebbe eseguire una Grid Search per fare il tuning degli iperparametri grazie allo script src/tuning_tracker.py
, più informazioni sono presenti nella Repo citata).
Vengono salvate durante l'esecuzione di ogni modello: le metriche, le emissioni e la configurazione dei parametri usati.
I modelli, i dataset e le metriche fanno riferimento all'implementazione di @Recbole.
Il tracciamento delle emissioni è stato reso possibile attraverso la libreria @CodeCarbon.
Ambiente di sviluppo usato in fase sperimentale:
python/3.10.8--gcc--8.5.0
+ (opzionale) cuda/12.1
Requisiti di sistema: requirements.txt
pip install -r requirements.txt
├── data/ # Sono contenuti i dataset usati
├── deps/ # Directory contenente dipendenze specifiche
│ ├── __other/ # Contiene script utili per visualizzare funzionamento delle tecniche sviluppate
│ ├── codecarbon/ # File e configurazioni relativi alla libreria CodeCarbon
│ ├── ema_files/ # File inerenti alla strategia di early stopping EMA (con limite superiore)
│ ├── ema_no_cap_files/ # File inerenti alla strategia di early stopping EMA (SENZA limite superiore)
│ └── utility_files/ # File inerenti alla strategia di early stopping Utility
├── experiment_results/ # Directory per i risultati dettagliati di ciascun esperimento
├── graphs/ # Contiene tutti i grafici relativi ai risultati ottenuti
├── log/ # Directory per i file di log relativi all'esecuzione degli script.
├── log_tensorboard/ # Directory per i log di TensorBoard
├── results/ # Directory principale per il salvataggio dei risultati
├── saved/ # Directory per salvare i modelli addestrati
├── src/ # Contiene il codice sorgente del progetto
│ ├── . . .
│ ├── graphs.py # Script Python per generare i grafici presenti nella cartella "graphs/"
│ ├── ema_no_cap_files/ # File inerenti alla strategia di early stopping EMA (SENZA limite superiore)
│ └── utility_files/ # File inerenti alla strategia di early stopping Utility
├── LICENSE.md
├── README.md
└── requirements.txt # Elenco delle dipendenze Python
Spostare la cartella codecarbon/
presente nella cartella deps/
nella cartella delle dipendenze dell'ambiente di lavoro.
Selezionare una delle strategie di Early Stopping sviluppata, presente nalla cartella deps/
[ema_files/, ema_no_cap_files/, utility_files/] e spostare i file contenuti della cartella della strategia nelle cartelle corrispondenti:
deps/<nome_strategia>/recbole
nelle dipendenze dell'ambiente di lavorodeps/<nome_strategia>/src
nella cartella root del progetto [verranno sostituiti dunque i filerun.py
etracker.py
]
Di default nella cartella src/
presente nella root del progetto sono presenti i file run.py
e tracker.py
inerenti alla strategia Utility.
Per eseguire l'intero programma è possibile runnare direttamente il run.py
presente nella cartella src
:
python src/run.py
Oppure se si volesse eseguire un modello/i e dataset in particolare (specificando debitamente i paramentri della metodo early stopping in uso), ecco dei "template" del codice da eseguire:
[Utility]
python src/tracker.py --dataset={dataset} --model={model} --max_emission_step={max_emission_step} --trade_off={trade_off}
[EMA]
python src/tracker.py --dataset={dataset} --model={model} --tolerance_step={tolerance_step} --smoothing_factor={smoothing_factor}
Esperimenti effettutati sul seguente hardware:
- CPU: 1 x Intel Xeon Platinum 8358
- GPU: 1 x NVIDIA A100
- RAM: 512GB DDR4 (3200 MHz)
Gli esperimenti sono stati effettuati su i seguenti dataset e modelli di raccomandazione SOTA:
- Dataset: amazon_books_60core e movielens_1m
- Modelli: BPR, CFKG, CKE, DMF, KGCN, KGNNLS, LINE, MultiDAE, LightGCN, NFCF e DGCF
Vincenzo Monopoli
Corso di Laurea in Informatica
Università degli Studi di Bari “Aldo Moro”
Tesi triennale in "Metodi per il Ritrovamento dell’Informazione"
Anno Accademico 2023/2024
📫 Contatti: monovinci@gmail.com
🔗 GitHub: github.com/Vincy02