---
tags: elemento
---
#### Research 4 Innovation 2021 - INFN
# Sviluppo e indagine di utilizzi multi istanza di GPU moderne per task grafici e di calcolo in ambiente Linux KVM
## Motivazioni
Lo sviluppo tecnologico proposto dei produttori di schede video ha fatto registrare, negli ultimi anni, una crescita delle prestazioni di picco motlo superiore a quella delle CPU.

La crescita delle capacità di calcolo delle GPU è talmente repentina da richiedere, generazione dopo generazione, nuovi paradigmi per riuscirne a sfruttare la piena potenzialità.
Nuovi framework di programmazione nascono, crescono e, a volte, muoiono nel giro di due o tre genrazioni di GPU.
Riuscire ad usare pienamente e in maniera efficente l'hardware a disposizione non è semplice e richiede un grande sforzo di programmazione.
Vista la grande crescita di prestazioni, alcune soluzioni hardware o software di basso livello (livello kernel e driver) sono state implementate dai produttori per permettere un partizionamento delle singole GPU in modo da abilitarne un uso "à la CPU", cioè con i carichi di più sessioni coesistenti sullo stesso hardware.
Queste soluzioni (e.g. AMD MxGPU, Nvidia vGPU) sono compatibili con deployment di infrastrutture virtuali basate su prodotti payware VMware e CITRIX, grazie a suite software distribuite dai produttori stessi, mentre l'utilizzo di queste tecnologie in ambiente Linux KVM è limitato a soluzioni ad hoc create come dimostratori tecnologici, ma inadeguate ad un uso "commerciale" o a soluzioni a loro volta a pagamento.


Un protocollo hardware-agnostic aggiuntivo è il Single Root IO Virtualization (SR-IOV) promosso dal consorzio PCI Express ed attualmente utilizzabile su gran parte delle schede di rete di grado enterprise, ma per il momento disponibile su pochissimi modelli di GPU.
Malgrado le soluzioni implementative siano più di una e caratterizzate da alta specificità è chiara la direzione in cui lo sviluppo sta andando.
Infatti le potenzialità di questo paradigma di sharing delle risorse GPU ha alcuni vantaggi tangibili:
* I kernel di calcolo da eseguire in un'appliance GPGPU (General Purpose GPU) possono essere inadeguati per l'uso di GPU molto grosse e provviste di moltissima memoria, o, in alternativa, posono richiedere grandissimi sforzi di ottimizzazione. L'esecuzione di piu copie dello stesso kernel in altrettante partizioni della stessa GPU potrebbe ridurre la specificità dello stesso con un costo prestazionale accettabile.
* Per applicazioni grafiche (CAD, visualizzazione 3D, rendering) possono essere raggiunte densità di utenti molto elevate, permettendo fino a 32 utenti su una singola GPU (AMD Radeon Pro V340, pre-produzione). Questa opzione risulta interessante sia per contesti VDI (Virtual Desktop Infrastructure) che per macchine di frontend a sistemi di calcolo distribuito, nelle quali può essere utile avere un terminale grafico per la visualizzazione dei risultati dei task di calcolo (e.g. struttura di proteine, visualizzazione 3D di assorbimenti di radiazioni, event display di processi di HEP, visualizzazione attività reti neurali).
* Il partizionamento dinamico delle GPU permette di applicare un paradigma "what you need when you need it", garantendo il giusto hardware per il task specifico, riducendo la frazione di GPU inutilizzata e permettendo l'ampliamento quasi-dinamico delle risorse garantite ad una VM in caso di necessità.
Lo sviluppo di un layer software in grado di abilitare l'utilizzo di queste tecnologie in ambiente Linux KVM garantirebbe tutti questi vantaggi anche in ambiente open source, aprendo la strada all'adozione di questo nuovo paradigma sia nella ricerca che nell'industria ad alta tecnologia.
## Collaborazioni esterne
* AMD: L'interesse del comparto Cloud Graphics di AMD è stato espresso da Michael deNeffe, direttore della sezione. La fornitura di sample (anche prototipali) per lo sviluppo del progetto è stata garantita. La richiesta da parte dell'azienda è di poter accedere a eventuali pubblicazioni o tesi prodotte in questo ambito. Le GPU AMD partizionabili sono prive di un pacchetto software per Linux KVM.
* Nvidia: L'interesse di Nvidia è in via di definizione. Esistono pacchetti software ufficiali per l'uso di tali GPU in ambiente Linux KVM. Tali pacchetti richiedono il pagamento di licenze una tantum per host ed annuali per utente.
* Intel: TBD
## Obiettivi
Il progetto si sviluppa nelle seguenti tappe:
* Acquisto di una macchina server GPU-less in grado di alloggiare schede video ad alte prestazioni (fino a 500W a scheda), dotata cioè di headroom di raffreddamento ed alimentazione. La macchina sarà utilizzata come banco di prova per schede video in questo progetto e per il test di nuove GPU acquistate in futuro. La macchina deve avere sufficente potenza CPU da evitare colli di bottiglia verso le GPU. Il supporto a PCIe Gen. 4 è preferito.
* Test delle tecnologie esistenti tramite hypervisor VMware e pacchetti driver ufficiali per stabilire baseline prestazionale e per individuare punti di forza ed aspetti migliorabili passando ad approccio open source.
* Ricerca di soluzioni (parziali) open source esistenti e test in ambiente Linux KVM
* Sviluppo del layer software proprietario in grado di abilitare l'uso delle nuove tecnologie su KVM
* Test del software su vari flavour di hypervisor KVM (KVM on RHEL, Proxmox on Debian, KVM o CentOS)
* Verifica della stabilità della soluzione tramite benchmark sintetici eseguiti all'interno di VM
* Studio estensivo della scalabilità delle soluzioni tramite analisi delle performance integrate al crescere del partizionamento della GPU
* Studio comparativo delle differenze tra kernel legacy eseguiti in più copie e kernel ottimizzati per saturare acceleratori moderni
## Ricadute scientifiche
Gli studi e i test portati avanti su queste architetture potranno essere adottati in svariati ambiti relativi ai core service forniti dal Centro di Calcolo INFN Torino e dall'INFN in generale.
Tutti gli aspetti riportati sotto sono per ora possibili solo sotto gli hypervisor payware indicati sopra, pertanto le soluzioni sviluppate in questo progetto hanno il valore aggiunto di permettere una riduzione considerevole (o un azzeramento) dei costi di licenza essendo utilizzabili in Linux KVM.
Nell'ambito del calcolo scientifico sono individuabili le seguenti ricadute:
* In base ai risultati dei test sarà possibile decidere quando lo sviluppo specifico per una GPU di un kernel di calcolo sarà una strada percorribile per l'incremento delle prestazioni e quando, al contrario, sarebbe consigliabile eseguire più sessioni dello stesso in modo concorrente.
* Le GPU ad "assetto variabile" utilizzate permettono di emulare varie architetture, garantendo la possibilità di testare il comportamento di algoritmi esistenti prima della formulazione delle specifiche di nuove macchine da acquistare. Grazie a simili simulazioni è possibile massimizzare le prestazioni per Euro in modo oggettivo.
* L'adozione di GPU di questo tipo in contesti HPC o di calcolo distribuito multi-user ha due vantaggi immediati. In primo luogo la medesima infrastruttura può essere condivisa tra più carichi leggeri o dedicata a carichi più pesanti, introducendo una infrastruttura software-defined dinamica in grado di ottimizzata in base al task da eseguire. Questo stesso aspetto permette di aumentare la capacità di una macchina HPC, riducendo le risorse sprecate ed impacchettando task complementari aumentando il throughput riducendo l'idle fraction.
Nell'ambito della visualizzazione 3D e 2D si potranno avere i seguenti vantaggi:
* Usando la stessa infrastruttura di calcolo distribuito o le macchine di frontend di cluster HPC, sarà possibile istanziare sessioni dotate di accelerazione grafica. Questo permette la visualizzazione di contenuti 3D (strutture molecolari, eventi HEP, rendering, simulazioni fluidodinamiche) o 2D (CAD, elaborazione dati in formato video/immagine) richiedenti risorse non comunemente disponibili su workstation o laptop "leggeri".
* Le soluzioni introdotte dal progetto permettono di creare cluster in grado di eseguire macchine virtuali equivalenti o superiori a workstation CAD specifiche per lavori di progettazione meccanica, elettronica, fluidodinamica.
* Lo stesso approccio puo essere adotatto anche per la fornitura dei terminali amministrativi, che, pur non richiedendo specifiche particolarmente elevate, potrebbero essere oggetto di una razionalizzazione economica ed energetica tramite l'aggregazione di macchine da ufficio in un unico server (32 macchine dual core provviste di GPU light in un singolo box da 2kW e 12k€).
## Ricadute TT e commerciali
Il progetto è funzionale ad una startup in via di istituzione da parte di Gabriele Gaetano Fronzé, fellow INFN della sezione di Torino.
La startup, denominata Elemento Modular Cloud, si propone di sviluppare un framework hardware-software in grado di semplificare il deployment e la gestione di infrastrutture cloud moderne.
La modularità è strutturale nelle soluzioni Elemento, che si ripropongono non tanto di "reinventare la ruota" implementando soluzioni alternative, quanto di creare i layer necessari a connettere e coadiuvare tecnologie esistenti in maniera organica.
I prodotti Elemento saranno software e hardware.
Tra i prodotti hardware, gli Elemento Atoms sono i mattoni hardware fondamentali dell'infrastruttura e sono sviluppati by design con ridondanza e meccanismi di self-diagnosis in grado di massimizzare il tempo operativo e di minimizzare il tempo di risoluzione dei guasti.
In aggiunta, un deployment Elemento può scalare automaticamente collegando nuovi Atoms a quelli esistenti e avviando procedure automatiche di ribilanciamento.
La suite software Elemento, comprensiva di un hypervisor KVM-based, un container engine integrato nell'hypervisor, uno scheduler, un network controller e un controller dello storage, introducono in ambiente Linux paradigmi di software-designed hardware.
L'adozione di GPU partizionabili negli Elemento Atoms (Linux-based) è di cruciale importanza per garantire questa caratteristica di riconfigurabilità dell'hardware, oltre che per raggiungere le densità di potenza o di sessioni richieste.
Commercialmente, l'abilitazione di queste tecnologie in ambiente Linux, permette a
KVM di tenere il passo con soluzioni che richiedono costi di licenza ingenti e permanenti.
La suite di driver sviluppata sarebbe inclusa in alcuni prodotti Elemento e comercializzata con un costo di licenza una-tantum trascurabile rispetto a quello di un hypervisor payware.
Questo aspetto ridurrebbe ulteriormente la frizione tipica rispetto all'adozione di Linux e KVM in ambiente enterprise, appianando una delle più importanti differenze tra l'ambiente open source e quello closed source o payware.
Un progetto come questo potrebbe essere in seguito acquisito da realtà in grado di proseguirne lo sviluppo e l'ampliamento secondo i medesimi principi, o mantenuto in casa per ulteriori aggiornamenti in grado di integrare funzionalità complementari o sostitutive.
## Timeline
### Working Packages
#### WP1 - hardware setup (INFN + Elemento 1:1)
* Setup infrastruttura hardware
* Training personale coinvolto
* Test delle componenti
* Installazione hypervisor (VMWare e Linux KVM, dual boot)
#### WP2 - methodology definition (INFN + Elemento 5:1)
* Sviluppo o individuazione software di test
* Definizione della suite di benchmark da eseguire
* Definizione della strategia di analisi dei risultati
* Produzione di benchmark di riferimento
#### WP3 - state of art assessment (INFN + Elemento 5:1)
* Finalizzazione configurazione VMware
* Installazione software esistente per l'uso della tecnologia in VMware
* Esecuzione di test e benchmark con variazione della configurazione GPU
* Studio del software esistente (se open source)
* Ottimizzazione result-driven della suite di test
* Presa dati finale in ambiente VMware
#### WP4 - linux KVM compatibility layer development (INFN + Elemento 1:1)
* Setup infrastruttura CI/CD e versioning del software (build automatico e generazione installabili)
* Sviluppo di prototipo di compatibility layer
* Installazione del layer in ambiente Linux KVM
* Test preliminari del layer e ottimizzazione/miglioramento dello stesso
#### WP5 - compatibility layer performance assessment (INFN)
* Esecuzione della suite di benchmark in ambiente Linux KVM
* Confronto con i risultati ottenuti in VMware
* Ottimizzazione del layer software
* Finalizzazione delle misure
#### WP6 - HPC and Cloud integration tests (INFN)
* Test di GPU partizionabili installate nelle macchine costituenti la Cloud INFN Torino (OpenNebula, KVM-based)
* Test di GPU partizionabili in contesto HPC per la creazione di sessioni di front-end con accelerazione grafica
* Test di GPU partizionabili nel cluster ML Yoga di INFN Torino per accelerazione di task ML e visualizzazione grafica
#### WP7 - papers and patents writing (INFN + Elemento 7:3)
* Stesura di pubblicazioni sulla base delle misure ottenute
* Protezione della proprietà intellettuale tramite registrazione di brevetti
#### WP8 - testing in VDI applications (Elemento)
* Test del compatibility layer per applicazioni con interfaccia grafica
* Setup di configurazioni ad altissima densità (32 macchine light su singolo host) e alte prestazioni (2 workstation su singolo host)
* Test della gestione della concorrenza tra macchine virtuali nei due casi
* Esecuzione benchmark sintetici e confronto con sistemi non virtualizzati equivalenti
#### WP9 - realization of proprietary hardware prototype (Elemento)
* Progettazione del primo Elemento Computing Atom per applicazioni VDI
* Realizzazione e test del prototipo da usare come proof-of-concept in presentazioni e eventi