Che cos'è l'apprendimento automatico distribuito?

Autori

Ivan Belcic

Staff writer

Cole Stryker

Staff Editor, AI Models

IBM Think

Che cos'è l'apprendimento automatico distribuito?

L'apprendimento automatico (ML) distribuito è un approccio alle attività di ML su larga scala in cui i workload sono distribuiti su più dispositivi o processori invece di essere eseguiti su un singolo computer. L'apprendimento automatico distribuito viene spesso utilizzato per addestrare modelli grandi e complessi, come reti neurali profonde, dove le richieste computazionali sono particolarmente elevate. 

Poiché i modelli di intelligenza artificiale (AI) scalano in termini di dimensioni e complessità, le risorse computazionali necessarie per l'addestramento possono superare la capacità di un singolo dispositivo. Allo stesso modo, le attività complesse su larga scala possono essere troppo impegnative o richiedere più memoria di quella che un dispositivo può fornire. I sistemi distribuiti suddividono il set di dati o il modello AI su più dispositivi o nodi per migliorare prestazioni, accuratezza ed efficienza. 

L'apprendimento automatico distribuito è un sottoinsieme dell'informatica distribuita, che racchiude un più ampio impegno nel diffondere l'informatica su più sistemi di elaborazione.

Le ultime tendenze in materia di AI, proposte da esperti

Ricevi insight selezionati sulle notizie più importanti e interessanti sull'AI. Iscriviti alla nostra newsletter settimanale Think. Leggi l'Informativa sulla privacy IBM.

Grazie per aver effettuato l'iscrizione!

L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.

Tipi di apprendimento automatico distribuito

Gli approcci all'apprendimento automatico distribuito includono: 

  • Parallelismo dei dati: suddivisione del set di dati su più dispositivi 

  • Parallelismo del modello: partizione di un modello su più dispositivi 

  • Parallelismo ibrido: combinazione di aspetti dei dati e parallelismo dei modelli

Il framework per l'apprendimento automatico distribuito utilizza uno o più nodi per mantenere gli aggiornamenti dei parametri del modello, mentre i nodi gestiscono i dati e il calcolo.

Parallelismo dei dati

Il parallelismo dei dati suddivide un ampio set di dati utilizzato come dati di addestramento in un numero di gruppi pari al numero di nodi nel sistema. Ogni nodo ospita una copia dei modelli AI e le fornisce un sottoinsieme dei dati distribuiti. Le operazioni di parallelismo dei dati possono essere eseguite in modo sincrono o asincrono. L'addestramento sincrono è più comune con i modelli di deep learning perché garantisce coerenza, ma a scapito della velocità. 

Poiché ogni nodo esegue una copia completa del modello, l'hardware deve disporre di memoria sufficiente per ospitarlo. Tuttavia, il workload dell'AI per nodo è ridotto poiché ognuno elabora solo una parte del set di dati.

Apprendimento federato

L'apprendimento federato assomiglia al parallelismo dei dati in quanto più nodi addestrano copie di un modello su sottoinsiemi di dati. Tuttavia, le partizioni di dati non vengono create da un pool di dati centralizzato, ma sono costituite da dati locali per ogni nodo. Gli aggiornamenti del modello vengono aggregati tra i nodi, mentre i dati non lasciano mai l'origine originale. 

Poiché ogni set di dati è localizzato, i data scientist utilizzano spesso l'apprendimento federato per applicazioni di deep learning distribuito che implicano un'elevata sicurezza dei dati o normative legali. I pool di dati centralizzati possono esporre accidentalmente informazioni di identificazione personale (PII) durante la trasmissione. L'apprendimento federato riduce questo rischio isolando ogni set di dati nel proprio nodo.

AI Academy

Diventa un esperto di AI

Acquisisci le conoscenze necessarie per dare priorità agli investimenti nell'AI alla base della crescita aziendale. Inizia oggi stesso con la nostra AI Academy gratuita e guida il futuro dell'AI nella tua organizzazione.

Parallelismo dei modelli

Nel parallelismo dei modelli, un modello è suddiviso in parti componenti, come i livelli di una rete neurale profonda, che possono funzionare indipendentemente e simultaneamente su nodi separati. Ogni parte del modello utilizza gli stessi dati. Il parallelismo dei modelli è noto anche come parallelismo di rete

Quando un singolo modello di apprendimento automatico è troppo grande per essere gestito da una singola macchina, il parallelismo dei modelli consente al modello di funzionare su più nodi. Ogni nodo gestisce una parte del modello, quindi i suoi requisiti di calcolo e memoria sono inferiori rispetto a quelli che si avrebbero se una singola macchina dovesse eseguire il modello completo. 

Il parallelismo dei modelli è in genere più difficile da implementare rispetto al parallelismo dei dati. L'algoritmo di apprendimento automatico distribuito selezionato influisce direttamente sulla scalabilità del metodo, con alcuni che si prestano alla tecnica più di altri. Il sistema deve essere costruito in modo da ridurre al minimo la quantità di condivisione dei dati tra i nodi. I sistemi di parallelismo dei modelli ad alte prestazioni richiedono progettazione e ottimizzazione di livello esperto. 

Il parallelismo dei modelli è spesso combinato con il parallelismo dei dati in modo che ogni segmento del modello elabori una porzione diversa dei dati di input. I risultati vengono aggregati in tutta la rete.

Parallelismo delle pipeline 

Il parallelismo delle pipeline è un tipo di parallelismo dei modelli che partiziona un modello in sequenza. Ogni fase del modello è ospitata sul proprio nodo. Le batch di dati vengono elaborate in ordine attraverso le fasi, in modo simile a come i pompieri di una volta si passavano un secchio d'acqua l'un l'altro, dalla fonte d'acqua al fuoco. 

Il parallelismo della pipeline può migliorare la produttività, ovvero il volume di dati che un modello può elaborare contemporaneamente. Tuttavia, questo incremento comporta un aumento della latenza, ovvero il tempo necessario per generare un risultato dopo aver ricevuto un input. 

L'aumento della latenza è dovuto alla fase di ramp-up durante la quale le micro-batch iniziali di dati vengono fatte passare attraverso la sequenza. Le fasi successive della pipeline di apprendimento automatico non possono essere inizializzate finché le prime micro-batch di dati non superano le fasi precedenti.

Parallelismo tensoriale

Il parallelismo tensoriale entra in gioco quando anche un singolo strato di una rete neurale profonda richiede troppa potenza di calcolo o occupa troppo spazio per un singolo dispositivo. L'attenzione personale e i livelli di embedding (due pilastri dell'architettura trasformativa) possono diventare molto grandi, il che significa che praticamente tutto lo sviluppo di modelli linguistici di grandi dimensioni (LLM) implica il parallelismo tensoriale. Senza il parallelismo tensoriale, sarebbe praticamente impossibile addestrare i modelli LLM perché gli strati sono troppo grandi per qualsiasi dispositivo. 

Nel parallelismo tensoriale, i parametri di un singolo strato sono ospitati su più GPU (unità di elaborazione grafica) o TPU (unità di elaborazione tensoriale). Ogni dispositivo calcola parte delle operazioni di un singolo livello e i risultati parziali vengono aggregati per produrre l'output del livello. 

Rispetto al parallelismo dei dati e a molti altri tipi di parallelismo tra modelli, i workflow del parallelismo tensoriale richiedono molta più comunicazione tra i nodi. Le reti a larghezza di banda elevata possono contribuire a ridurre i colli di bottiglia della comunicazione.

Parallelismo ibrido

Raramente le tecniche di parallelismo dei dati e dei modelli vengono utilizzate in modo isolato. Spesso sono combinate in varie configurazioni di parallelismo ibrido. I framework open source di deep learning PyTorch e TensorFlow, che supportano entrambi Python, sono comunemente usati per costruire sistemi di apprendimento automatico distribuiti. 

La maggior parte dei modelli linguistici su larga scala, inclusa la famiglia GPT, si basa sul parallelismo ibrido per addestrare su larga scala.

Come funziona l'apprendimento automatico distribuito

L'apprendimento automatico distribuito può aumentarne ogni fase della pipeline: il processo di creazione, addestramento e distribuzione di modelli di apprendimento automatico. Pre-elaborazione, addestramento, messa a punto, convalida, inferenza e implementazione 

  • Pre-elaborazione distribuita dei dati 

  • Addestramento distribuito

  • Messa a punto distribuita 

  • Convalida distribuita 

  • Inferenza distribuita 

  • Distribuzione distribuita 

Pre-elaborazione distribuita dei dati

La pre-elaborazione distribuita dei dati utilizza reti di nodi collegati, i processori o dispositivi multipli, non i singoli neuroni della rete neurale, che a volte vengono anche chiamati "nodi", per preparare set di dati di grandi dimensioni da analizzare e utilizzare ulteriormente. 

Un nodo centrale gestisce il workflow, suddividendo i dati e assegnandoli ai nodi di lavoro. La decentralizzazione del lavoro tramite l'elaborazione parallela aumenta la scalabilità e l'efficienza rispetto ai modelli tradizionali che utilizzano un singolo dispositivo.

Addestramento distribuito

L'addestramento distribuito utilizza le tecniche di apprendimento automatico distribuite per diffondere l'addestramento dei modelli su tutti i dispositivi. Ad esempio, questa tecnica viene spesso utilizzata con grandi reti neurali. Quando la rete, il set di dati di addestramento o entrambi sono troppo grandi per un processore, l'addestramento distribuito invia il workload su più server, GPU o macchine. 

La discesa stocastica del gradiente (SGD) è un algoritmo di apprendimento che divide il set di dati in mini-batch e calcola il gradiente della funzione di perdita dopo ogni batch. L'uso di mini-batch anziché del set di dati completo rende l'addestramento più efficiente. 

La funzione di perdita misura l'errore nelle previsioni del modello e l'obiettivo dell'SGD è quello di abbassare il gradiente per ridurre al minimo il valore della funzione. Come per l'addestramento del modello standard, il processo di addestramento è considerato completo quando il modello raggiunge la convergenza: quando l'algoritmo SGD riduce con successo il valore della funzione. 

I nodi elaborano le mini-batch in parallelo, il che è possibile perché ogni batch viene elaborata indipendentemente dalle altre all'interno di ogni iterazione. Ogni nodo calcola il proprio gradiente, quindi invia il valore del gradiente aggiornato agli altri nodi della rete. Gli altri nodi di lavoro implementano gli aggiornamenti che ricevono nei propri modelli, contribuendo a garantire che tutte le copie del modello rimangano identiche durante tutto il processo di addestramento. 

La funzione AllReduce è un'operazione di comunicazione collettiva che consente a ciascun nodo di condividere i propri risultati e propagare i risultati aggregati attraverso la rete. AllReduce consente a tutti i nodi di sincronizzare gli aggiornamenti dei parametri del modello e mantenere la coerenza. Questa funzione, utilizzata a lungo nell'elaborazione ad alte prestazioni, è stata reso popolare in framework di apprendimento automatico come Horovod. 

L'SGD può essere eseguita in modo sincrono o asincrono. L'SGD sincrono aggiorna tutti i nodi contemporaneamente, il che mantiene la coerenza a scapito di potenziali ritardi in caso di ritardo di alcuni nodi. L'SGD asincrono aggiorna i parametri non appena un aggiornamento è pronto, ma alcuni nodi potrebbero ricevere aggiornamenti che non includono i valori più recenti. 

Riducendo le risorse computazionali necessarie per dispositivo, l'addestramento distribuito può accelerare i tempi. Poiché richiede così tante risorse di calcolo, l'addestramento è uno dei principali casi d'uso dell'apprendimento automatico distribuito.

Messa a punto distribuita 

Gli stessi principi e vantaggi dell'addestramento distribuito si applicano alla messa a punto distribuita. La messa a punto consente di addestrare ulteriormente un modello già addestrato affinché si specializzi in attività più specifiche. L'applicazione di tecniche di apprendimento automatico distribuito rende il processo più rapido, efficiente e scalabile.

Convalida distribuita 

La convalida è il processo di valutazione delle prestazioni di un modello addestrato. Distribuire il set di dati di convalida o un modello di grandi dimensioni su più nodi offre gli stessi vantaggi del resto del processo di addestramento distribuito. 

Inferenza distribuita

L'inferenza è il processo mediante il quale un modello AI addestrato elabora nuovi dati per riconoscere modelli e generare output o previsioni. Distribuendo il workload su più dispositivi è possibile gestire modelli AI troppo grandi per una singola macchina. L'inferenza distribuita può anche facilitare una maggiore produttività e una minore latenza.

Implementazione distribuita 

L'implementazione distribuita gestisce il funzionamento di un'applicazione software su una rete di nodi. Il bilanciamento del carico tra i nodi di lavoro aiuta a ridurre i colli di bottiglia e ottimizzare l'efficienza delle risorse, aumentando la produttività e riducendo la latenza.

Benefici dell'apprendimento automatico distribuito

I benefici dell'apprendimento automatico distribuito includono: 

  • Efficienza 

  • Scalabilità

  • Ridondanza

Efficienza

L'automazione e la suddivisione del workload tra più dispositivi riduce il carico su un singolo dispositivo. I nodi possono lavorare in parallelo per completare più rapidamente le attività a lungo termine, quindi aggregare i loro output nel risultato finale. 

L'addestramento di un modello di riconoscimento delle immagini su ImageNet (un set di dati con oltre 14 milioni di immagini etichettate) richiederebbe settimane su una singola GPU. Con l'apprendimento automatico distribuito, anche una piccola startup potrebbe eseguire questa attività in poche ore.

Scalabilità

Le aziende non hanno bisogno di investire in computer ultrapotenti per gestire LLM e altri sistemi ad alto consumo di risorse. Il calcolo distribuito consente ai fornitori di servizi cloud di coordinare una vasta infrastruttura su molti server e data center, rendendola disponibile ai clienti aziendali su richiesta.

Le attività intensive di data science, come il trattamento dei dati con big data possono essere completate senza investimenti infrastrutturali significativi. Il trattamento dei dati su larga scala consente anche alle startup più piccole di offrire ai propri utenti servizi come sistemi di raccomandazione o chatbot

Al contempo, i data center iperscalabili si trovano all'altra estremità dello spettro della scalabilità. Dove le risorse lo consentono, le organizzazioni stanno costruendo enormi cluster di server per eseguire le reti neurali più avanzate. Senza l'apprendimento automatico distribuito, non sarebbe possibile utilizzare modelli così grandi su migliaia di GPU.

Ridondanza

Molti sistemi del mondo reale si basano sulla tolleranza ai guasti, la capacità di continuare a funzionare anche in caso di guasto dei singoli nodi. I fornitori di modelli devono garantire che i singoli utenti e le applicazioni connesse alle API possano usufruire di un accesso ininterrotto. Nell'apprendimento automatico distribuito, la ridondanza preserva il tempo di attività replicando i processi tra i nodi in modo che i guasti non interrompano il servizio.

Sfide dell'apprendimento automatico distribuito

Le sfide di un'efficace implementazione dell'apprendimento automatico distribuito includono: 

  • Colli di bottiglia di rete

  • Sovraccarico di sincronizzazione 

  • Consumo energetico

Colli di bottiglia di rete

La larghezza di banda insufficiente tra i nodi è una causa frequente di colli di bottiglia nelle reti di apprendimento automatico distribuite. Metodi come il parallelismo tensoriale che richiedono una maggiore comunicazione sono i più esigenti in termini di larghezza di banda. Se la rete non è in grado di fornire la larghezza di banda richiesta, i progetti di apprendimento automatico distribuito dovranno far fronte a tempi di addestramento più lunghi e una ridotta scalabilità.

Sovraccarico di sincronizzazione

Il sovraccarico di sincronizzazione è un ritardo che si verifica quando un'attività non può iniziare fino al completamento di un'altra attività. In un sistema sincrono, tutti i nodi di lavoro devono caricare i dati condivisi prima di passare alla fase successiva dell'addestramento. Questo momento è noto come barriera di sincronizzazione perché la fase successiva non inizia finché tutti i nodi non sono sincronizzati. 

I nodi Straggler, lavoratori che impiegano più tempo degli altri per completare il proprio compito, rallentano così l'intero processo. I sistemi asincroni rimuovono la barriera con il rischio che alcuni nodi funzionino con configurazioni di parametri obsolete.

Consumo energetico

Le reti distribuite possono essere ad alto consumo di energia, non solo per i nodi ma anche per la comunicazione tra di essi. Il consumo di energia può variare a seconda dell'implementazione e dell'architettura del sistema di apprendimento automatico distribuito. 

  • Requisiti computazionali: le GPU ad alte prestazioni necessarie per molte attività di apprendimento automatico impegnative sono energeticamente intensive. 

  • Comunicazione: i nodi hanno bisogno di reti ad alta velocità per comunicare in modo efficace e minimizzare il sovraccarico di sincronizzazione. 

  • Cloud o edge computing: i data center iperscalabili centralizzati su cui si basano i principali modelli AI consumano enormi quantità di energia. L'edge computing può aiutare a ridurre i costi di rete. 

  • Algoritmo e scelte di trattamento dei dati: scegliere l'algoritmo giusto e seguire buone pratiche di trattamento dei dati come l'ingegneria delle caratteristiche può rendere i modelli più efficienti.

Framework di apprendimento automatico distribuiti

I framework di apprendimento automatico distribuiti lo implementano ottimizzando l'uso della memoria e delle risorse di calcolo. Possono anche aiutare a scalare le implementazioni di apprendimento automatico, ridurre i tempi di addestramento e controllare i costi.

Tra i framework di apprendimento automatico distribuiti più noti figurano:

  • PyTorch distribuito
     

  • Apache Spark
     

  • TensorFlow distribuito
     

  • Ray Train
     

  • InstructLab

PyTorch distribuito

Disponibile nel popolare framework di apprendimento automatico PyTorch, PyTorch Distributed è un set di strumenti per creare e scalare modelli di deep learning su più dispositivi. Il pacchetto torch.distributed copre la comunicazione tra nodi, come con AllReduce. Il supporto integrato per il parallelismo dei dati e il parallelismo dei modelli consente una gamma di approcci di addestramento distribuiti.

Apache Spark

Apache Spark è un framework di lunga data con supporto per l'addestramento distribuito. Gli utenti possono creare pipeline di apprendimento automatico end-to-end che si integrano con l'ecosistema Spark, incluso Spark SQL per la manipolazione dei database. Spark offre due librerie: l'originale MLlib e la più recente SparkML.

TensorFlow distribuito

L'API tf.distribute.Strategy all'interno di TensorFlow apre le porte all'apprendimento automatico distribuito e contiene il supporto per una serie di schemi: più GPU su una macchina, più GPU su più macchine e altro ancora. Ad esempio, ParameterServerStrategy memorizza i parametri su server dedicati, da cui i nodi di lavoro vi accedono.

Ray Train

Ray Train è la libreria di addestramento distribuito e scalabile all'interno del framework di apprendimento automatico Ray per l'elaborazione distribuita. Ray Train è compatibile sia con PyTorch che con TensorFlow. La libreria Ray Tune supporta l'ottimizzazione distribuita degli iperparametri su più dispositivi.

InstructLab

Il nuovo approccio di InstructLab all'apprendimento automatico distribuito evita il tradizionale cluster di GPU a favore di un approccio basato sulla comunità, quasi come la raccolta fondi in crowdsourcing. I membri della comunità contribuiscono con gli aggiornamenti dei parametri a un archivio centralizzato e possono mettere a punto i modelli sui propri dispositivi personali.

Soluzioni correlate
IBM watsonx.ai

Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e con una minima quantità di dati.

Scopri watsonx.ai
Soluzioni di intelligenza artificiale

Metti l'AI al servizio della tua azienda grazie all'esperienza leader di settore e alla gamma di soluzioni di IBM nel campo dell'AI.

Esplora le soluzioni AI
Consulenza e servizi sull'AI

Reinventa i flussi di lavoro e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.

Esplora i servizi AI
Fai il passo successivo

Ottieni l'accesso completo a funzionalità che coprono l'intero ciclo di vita dello sviluppo dell'AI. Crea soluzioni AI all'avanguardia con interfacce intuitive, workflow e accesso alle API e agli SDK standard di settore.

Esplora watsonx.ai Prenota una demo live