
News
Contenuti per la community dell'HPC e gli appassionati di innovazione: tutorial, news e press release per utenti, ingegneri e amministratori
- Tutte le news
- Aerospace & Defence
- Artificial Intelligence
- Blog
- Cloud Platform
- HPC
- Kubernetes Cluster
- Press
- Progetti Europei
- Ultime news
- Varie E4
- Video
Deep Learning con GPU Multiple

In questo articolo, dal blog del nostro partner Run:AI, si affronteranno questi temi:
- Strategie di Deep Learning con Multi GPU distribuite
- Come funziona la multi GPU nei comuni framework di Deep Learning?
- TensorFlow Multiple GPU
- PyTorch Multi GPU
- Modelli di distribuzione multi GPU
- Server GPU
- Cluster GPU
- Kubernetes con GPU
Il Deep Learning è un sottoinsieme del Machine Learning, che non si basa su dati strutturati per sviluppare modelli predittivi accurati. Questo metodo utilizza reti di algoritmi modellati su reti neurali per distillare e correlare grandi quantità di dati. Più dati vengono forniti a una rete, più accurato diventa il modello. È possibile addestrare funzionalmente i modelli di deep learning utilizzando metodi di elaborazione sequenziali. Tuttavia, la quantità di dati necessari e la lunghezza dell’elaborazione dei dati rendono poco pratico, se non impossibile, addestrare modelli senza elaborazione parallela. L’elaborazione parallela consente di elaborare più oggetti dati contemporaneamente, riducendo drasticamente i tempi di addestramento. Questa elaborazione parallela viene in genere realizzata attraverso l’uso di unità di elaborazione grafica (GPU).
Le GPU sono processori specializzati creati per calcolare in parallelo. Queste unità possono fornire vantaggi significativi rispetto alle CPU tradizionali, inclusa una velocità fino a 10 volte superiore. In genere, più GPU sono integrate all’interno di un sistema oltre alle CPU. Mentre le CPU possono gestire attività più complesse o generali, le GPU possono gestire attività di elaborazione specifiche e altamente ripetitive.
Strategie di Deep Learning con Multi GPU
Una volta aggiunte GPU multiple ai sistemi, è necessario creare il parallelismo nei processi di Deep Learning. Esistono due metodi principali per aggiungere parallelismo: modelli e dati.
Parallelismo del modello
Il parallelismo del modello è un metodo che si può usare quando i parametri sono troppo grandi per i vincoli di memoria. Utilizzando questo metodo, bisogna dividere i processi di addestramento del modello su più GPU ed eseguire ciascun processo in parallelo (come illustrato nell’immagine seguente) o in serie. Il parallelismo del modello utilizza lo stesso set di dati per ogni parte del modello e richiede la sincronizzazione dei dati tra le suddivisioni.

Parallelismo dei dati
Il parallelismo dei dati è un metodo che utilizza i duplicati del modello tra le GPU. Questo metodo è utile quando la dimensione batch utilizzata dal modello è troppo grande per adattarsi a una singola macchina o quando si desidera accelerare il processo di training. Con il parallelismo dei dati, ogni copia del modello viene addestrata su un sottoinsieme del set di dati contemporaneamente. Una volta terminato, i risultati dei modelli vengono combinati e il training continua normalmente.

Come funziona la multi GPU nei comuni framework di Deep Learning?
Quando si lavora con modelli di Deep Learning, è possibile utilizzare diversi framework, tra cui Keras, PyTorch e TensorFlow. A seconda del framework scelto, esistono diversi modi per implementare sistemi multi GPU.
TensorFlow GPU multiple
TensorFlow è un framework open source, creato da Google, che è possibile utilizzare per eseguire operazioni di Machine Learning. La libreria include una varietà di algoritmi e modelli di Machine Learning e Deep Learning da utilizzare come base per il training. Include anche metodi integrati per il training distribuito tramite GPU.
Tramite l’API, si può utilizzare il metodo tf.distribute.Strategy per distribuire le operazioni su GPU, TPU o sulle macchine. Questo metodo consente di creare e supportare più segmenti di utenti e di passare facilmente da una strategia distribuita a un’altra.
Due strategie aggiuntive che estendono il metodo di distribuzione sono MirroredStrategy e TPUStrategy. Entrambi consentono di distribuire i carichi di lavoro, il primo su più GPU e il secondo su più Tensor Processing Unit (TPU). Le TPU sono unità disponibili tramite Google Cloud Platform, specificamente ottimizzate per il training con TensorFlow.
Entrambi questi metodi utilizzano all’incirca lo stesso processo parallelo di dati, riassunto come segue:
- Il set di dati è segmentato in modo che i dati siano distribuiti nel modo più uniforme possibile.
- Le repliche del modello vengono create e assegnate a una GPU. Quindi, a una certa replica viene assegnato un sottoinsieme del set di dati.
- Il sottoinsieme per ogni GPU viene elaborato e vengono prodotti i gradienti.
- Viene calcolata la media dei gradienti di tutte le repliche del modello e il risultato viene utilizzato per aggiornare il modello originale.
- Il processo si ripete finché il modello non è completamente addestrato.
PyTorch Multi GPU
PyTorch è un framework di calcolo scientifico open source basato su Python. Si può utilizzare per addestrare modelli di Deep Learning utilizzando calcoli tensoriali e GPU. Questo framework supporta la formazione distribuita tramite il backend torch.distributed. Con PyTorch, ci sono tre classi di parallelismo (o distribuzione) che puoi eseguire con le GPU. Questi sono:
- DataParallel: consente di distribuire repliche di modelli su più GPU in un’unica macchina. Si possono quindi utilizzare questi modelli per elaborare diversi sottoinsiemi del set di dati.
- DistributedDataParallel: estende la classe DataParallel per consentire di distribuire le repliche del modello tra le macchine oltre alle GPU. Si può anche usare questa classe in combinazione con model_parallel per eseguire il parallelismo del modello e dei dati.
- model_parallel: consente di suddividere modelli di grandi dimensioni su più GPU con un training parziale su ciascuna. Ciò richiede la sincronizzazione dei dati di addestramento tra le GPU poiché le operazioni vengono eseguite in sequenza.
Modelli di distribuzione multi GPU
Esistono tre principali modelli di distribuzione che è possibile utilizzare durante l’implementazione di operazioni di Machine Learning che utilizzano più GPU. Il modello da utilizzare dipende da dove sono ospitate le risorse e dalla dimensione delle operazioni.
Server GPU
I server GPU sono server che incorporano GPU in combinazione con una o più CPU. Quando i carichi di lavoro vengono assegnati a questi server, le CPU fungono da hub di gestione centrale per le GPU, distribuendo le attività e raccogliendo gli output disponibili.
Cluster GPU
I cluster GPU sono cluster di elaborazione con nodi che contengono una o più GPU. Questi cluster possono essere formati da duplicati della stessa GPU (omogenei) o da GPU diverse (eterogenei). Ogni nodo in un cluster è connesso tramite un’interconnessione per consentire la trasmissione dei dati.
Kubernetes con GPU
Kubernetes è una piattaforma open source che per orchestrare e automatizzare le distribuzioni di container. Questa piattaforma offre supporto per l’uso di GPU in cluster per consentire l’accelerazione del carico di lavoro, incluso il Deep Learning. Quando si utilizzano le GPU con Kubernetes, è possibile distribuire cluster eterogenei e specificare le risorse, come i requisiti di memoria. E’ possibile anche monitorare questi cluster per garantire prestazioni affidabili e ottimizzare l’utilizzo della GPU.
Multi GPU con Run:AI
Il nostro partner Run:AI automatizza la gestione delle risorse e l’orchestrazione del carico di lavoro per l’infrastruttura di Machine Learning. Con Run:AI, si possono eseguire automaticamente tutti gli esperimenti di Deep Learning necessari su un’infrastruttura multi-GPU.
Ecco alcune delle capacità che si ottengono con Run:AI:
- Visibilità avanzata: una pipeline efficiente di condivisione delle risorse mettendo in comune le risorse di elaborazione GPU.
- Niente più colli di bottiglia: è possibile impostare quote garantite di risorse GPU, per evitare colli di bottiglia e ottimizzare il business.
- Un livello di controllo più elevato: Run:AI consente di modificare dinamicamente l’allocazione delle risorse, assicurando che ogni lavoro riceva le risorse di cui ha bisogno in un dato momento.
Run:AI semplifica le pipeline dell’infrastruttura di Machine Learning, aiutando i data scientist ad accelerare la loro produttività e la qualità dei loro modelli.
Per approfondire contattaci!
Ti può interessare anche:
- https://www.e4company.com/2021/04/ridurre-i-costi-del-75-con-le-gpu-frazionarie-per-linferenza-deep-learning/
- https://www.e4company.com/aumenta-la-potenza-di-calcolo-dellia-per-accelerare-linnovazione-nella-scienza-dei-dati/
- https://www.e4company.com/2021/05/e4-computer-engineering-and-run-ai-annunciano-la-loro-partnership-per-accelerare-lintelligenza-artificiale/