Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica # Apprendimento automatico # Informatica distribuita, parallela e in cluster

Sfide di Scalabilità nell'Addestramento delle Reti Neurali

Esaminare l'impatto dell'hardware e della comunicazione sull'efficienza dell'apprendimento profondo.

Jared Fernandez, Luca Wehrstedt, Leonid Shamis, Mostafa Elhoushi, Kalyan Saladi, Yonatan Bisk, Emma Strubell, Jacob Kahn

― 13 leggere min


Addestramento di Reti Addestramento di Reti Neurali su Grande Scala scala. comunicazione nei sistemi su larga Affrontare problemi di prestazioni e
Indice

Negli ultimi anni, abbiamo visto i modelli di reti neurali crescere sempre di più. Questo è dovuto principalmente al fatto che abbiamo aumentato le dimensioni di questi modelli, la quantità di dati di addestramento e la potenza di calcolo che utilizziamo. Per creare queste enormi reti necessarie per cose come chatbot e riconoscimento delle immagini, spesso distribuiamo il lavoro di addestramento su molti computer potenti, in particolare migliaia di GPU. Questo richiede un po' di coordinazione per garantire che tutto funzioni senza intoppi tra questi grandi gruppi di computer.

In questo lavoro, dimostriamo che è super importante pensare attentamente a come impostiamo l'hardware e come suddividiamo il carico di lavoro. Questo può fare una grande differenza in quanto siamo efficaci (e cost-effective) quando aumentiamo i nostri modelli, i dati e la potenza di calcolo complessiva.

Abbiamo fatto uno studio approfondito per vedere quanto bene si addestrano i modelli grandi quando cambiamo la dimensione del modello, l'impostazione dell'hardware e il metodo che utilizziamo per condividere il carico di lavoro. Ecco cosa abbiamo trovato:

  1. Dopo aver raggiunto una certa dimensione, il sovraccarico extra derivante da metodi di Comunicazione complessi può effettivamente rendere alcune strategie che pensavamo non avrebbero funzionato migliori del previsto.

  2. Se buttiamo solo più hardware su un problema senza aggiustare nient'altro, ci scontriamo rapidamente con rendimenti decrescenti. Questo significa che otteniamo meno e meno nuova performance aggiungendo potenza o GPU.

Gli schemi di scaling ideali mostrano che le prestazioni delle grandi reti neurali aumentano con le dimensioni del modello, la quantità di dati di addestramento e la potenza di calcolo totale (e stiamo parlando di un sacco di FLOPs qui). Questo ha portato molti a inseguire modelli più grandi per ottenere i risultati più recenti e migliori in aree come compiti di linguaggio e comprensione delle immagini.

Queste reti neurali all'avanguardia, ora contenenti centinaia di miliardi di parametri, richiedono più calcolo e memoria durante l'addestramento. In molti casi, una singola GPU non può contenere l'intero modello, il che significa che dobbiamo distribuire il carico di lavoro su molte GPU per sfruttare la loro potenza di elaborazione e memoria. Allenarsi in tali situazioni richiede alcune strategie complicate per dividere i dati e i pezzi del modello tra le GPU.

Poiché richiediamo più dispositivi per addestrare queste grandi reti neurali, i costi di comunicazione e calcolo sono cambiati notevolmente. In passato, i modelli di deep learning riguardavano principalmente il calcolo rapido, il che significava che erano limitati dalla potenza di calcolo. Ma ora, poiché abbiamo così tante GPU che lavorano insieme, la quantità di comunicazione richiesta per mantenere tutto in sincronia può rallentarci.

Questo significa che non possiamo semplicemente continuare ad aggiungere più GPU e aspettarci che le cose funzionino più velocemente. Invece, vediamo che il costo di comunicazione aumenta e può limitare quanto possiamo aumentare la dimensione del nostro modello e il carico di lavoro pur migliorando la performance. I nostri esperimenti su diverse impostazioni hardware mostrano che i miglioramenti nel calcolo hanno superato i miglioramenti nella memoria e nella velocità della rete, il che significa che sperimentiamo ancora più problemi legati alla comunicazione man mano che ci scaldiamo.

Quindi, mentre ci sono alcuni metodi collaudati per addestrare su più dispositivi, non abbiamo ancora capito completamente come si scalano. Ecco cosa aggiungiamo alla conversazione:

  • Uno studio su larga scala dell'addestramento distribuito che copre diverse impostazioni hardware e strategie, evidenziando come la formazione sharded si scala.
  • Prove che mostrano che aggiungere più dispositivi acceleratori porta a rendimenti decrescenti nelle performance, soprattutto in quanto velocemente possiamo elaborare le parole.
  • Uno sguardo ai costi reali, rivelando che man mano che aggiungiamo più GPU, le nostre esigenze di potenza aumentano linearmente, ma la performance non sta al passo.
  • Prova che il Parallelismo del Modello può effettivamente migliorare le prestazioni, nonostante ciò che alcuni potrebbero dire.
  • Uno studio che mostra che i guadagni futuri in performance saranno probabilmente marginali a meno che non miglioriamo anche le reti di comunicazione e la dimensione della memoria.

In questa sezione, ci prendiamo un momento per introdurre idee chiave sull'uso degli acceleratori hardware nei data center e tecniche comuni per addestrare grandi modelli neurali.

Acceleratori su scala

L'addestramento di grandi reti neurali avviene spesso in cluster pieni di GPU, note per la loro potenza di calcolo e memoria. Diverse tecnologie collegano queste GPU, e ognuna ha i suoi vantaggi e svantaggi in termini di dimensioni, velocità e costi.

Quando raggruppati insieme sullo stesso nodo, le GPU NVIDIA possono utilizzare connessioni veloci come NVLink o NVSwitch, permettendo loro di comunicare tra di loro molto più velocemente di quanto possano comunicare con le GPU su altri nodi. Queste caratteristiche delle GPU-come quanto possono calcolare, quanta memoria hanno e come comunicano-si sono sviluppate a velocità variabili, il che ha plasmato il modo in cui progettiamo reti neurali nel corso degli anni.

Man mano che i modelli diventano più grandi e i set di dati si espandono, la comunicazione è diventata un collo di bottiglia, spingendo nuovi algoritmi per l'addestramento. Ciò significa che con tutto questo hardware aggiunto, il costo della comunicazione tra i dispositivi inizia a influenzare l'efficienza dell'intero sistema.

Algoritmi per l'Addestramento Distribuito

La maggior parte dei metodi di addestramento distribuito mira a mantenere le cose semplici per gli utenti mentre imita l'addestramento su un singolo dispositivo. Una grande decisione è come distribuire i componenti del modello e i dati: copiamo il modello su diverse GPU o lo suddividiamo?

Quando utilizziamo il parallelismo dei dati, copiamo le impostazioni del modello tra le GPU ma suddividiamo i batch di dati. Ogni GPU calcola output e gradienti locali, che vengono poi scambiati per creare una visione globale. Questa strategia di comunicazione è nota come AllReduce.

Se un modello è troppo grande per stare su un solo dispositivo, possiamo utilizzare tecniche come il Fully-Sharded Data Parallelism (FSDP) per suddividere i parametri del modello e gli stati dell'ottimizzatore tra le GPU. Questo richiede di portare temporaneamente i parametri a ciascun dispositivo durante i calcoli, il che può rallentare le cose.

Il parallelismo del modello entra in gioco quando suddividiamo i parametri del modello tra le GPU, con ciascuna GPU che lavora sui stessi dati di input contemporaneamente. Tuttavia, inviare dati avanti e indietro tra le GPU può portare a ritardi. Ci sono anche strategie come il Tensor Parallelism, dove suddividiamo ulteriormente parti del modello per una maggiore efficienza.

Alla fine, l'obiettivo è ottimizzare comunicazione e calcolo per rendere l'addestramento distribuito il più efficiente possibile.

Metodologia Sperimentale

Nelle sezioni seguenti, ci immergeremo negli effetti dello scaling dei carichi di lavoro sia sulla velocità di calcolo che sulla comunicazione. Analizzeremo come questi fattori influenzano le prestazioni complessive del sistema attraverso diverse strategie, dispositivi GPU e dimensioni del modello.

Ci concentreremo principalmente sul modello Llama-2, un tipo di trasformatore, poiché rappresenta un modello di alta gamma. I nostri test coinvolgeranno l'impostazione di ambienti con nodi NVIDIA DGX e l'analisi di più tecniche di parallelizzazione.

Misureremo cose come Throughput, che ci dice quanti esempi possiamo elaborare alla volta, oltre a metriche di efficienza per potenza e prestazioni di calcolo.

Effetti dello Scaling: Parallelizzazione, Hardware, Dimensioni del Modello

Ora vediamo come lo scaling influisce su diversi tipi di architettura delle reti neurali, sull'hardware utilizzato e sui modi in cui condividiamo il carico.

Scaling del Parallelismo dei Dati

Possiamo vedere come l'aumento del numero di GPU (da 8 a 2048) influisce sulla velocità di addestramento parallelo dei dati. Con più dispositivi, possiamo aumentare il throughput complessivo man mano che cresce la dimensione del batch globale.

Quando utilizziamo l'addestramento parallelo dei dati FSDP con un modello Llama-7B, notiamo che mentre aggiungere più nodi aumenta linearmente l'uso totale della potenza, l'efficienza diminuisce. C'è un aumento del sovraccarico di comunicazione, che tiene indietro il throughput.

Curiosamente, a scale più piccole, il costo della comunicazione è abbastanza basso. Ma man mano che ci scaldiamo, quei costi di comunicazione più grandi iniziano a pesare. Osserviamo che man mano che aumentiamo il numero di GPU, il tempo per la comunicazione aumenta significativamente.

Questo significa che mentre aggiungere dispositivi dovrebbe idealmente accelerare le cose, in realtà vediamo meno guadagni. A causa di questo costo di comunicazione, le GPU rimangono inattive, incapaci di fare lavori utili. Questo porta a una performance complessiva inferiore, che è l'opposto di ciò che speravamo.

Scaling del Parallelismo del Modello

Il parallelismo del modello è utile quando i nostri modelli non stanno su una GPU. Ci permette di suddividere gli strati tra i diversi dispositivi per rendere l'addestramento più efficiente. Quando addestriamo il modello Llama-7B utilizzando questo metodo, possiamo aumentare throughput ed efficienza riducendo al minimo i costi di comunicazione.

Anche se alcuni potrebbero sostenere che il parallelismo del modello riduce l'utilizzo dell'hardware, abbiamo scoperto che strategie intelligenti possono effettivamente migliorare le prestazioni minimizzando la comunicazione che rallenta le cose.

Scaling della Dimensione Hardware

Passiamo ora a vedere cosa succede quando scaldiamo il nostro hardware. Mantenendo il carico di lavoro invariato ma aggiungendo più dispositivi, ci aspetteremmo di vedere guadagni. Invece, scopriamo che man mano che aumentiamo il numero di dispositivi, il carico di lavoro effettivo per dispositivo diminuisce.

Quindi, quando l'hardware si espande troppo rapidamente senza aggiustare il carico di lavoro, vediamo rendimenti decrescenti sia nel throughput globale che nell'utilizzo locale dell'hardware. Questo è particolarmente vero quando alleniamo modelli più grandi, dove le esigenze di comunicazione possono dominare le performance.

Quando spingiamo la scala troppo in alto-come aumentare da 512 a 2048 GPU-le prestazioni per dispositivo possono diminuire significativamente. Vediamo uno schema simile anche quando testiamo modelli di varie dimensioni; più grande non significa sempre meglio.

Scaling della Generazione Hardware

Confrontando le generazioni precedenti di hardware, come A100 e H100, troviamo che anche se acceleriamo le cose, l'utilizzo effettivo può subire una battuta d'arresto. Ci sono sfide di comunicazione man mano che scaldiamo le cose, portando a tassi di esposizione più elevati e meno efficienza.

Quando diamo un'occhiata più da vicino, vediamo che mentre facciamo miglioramenti, l'equilibrio tra calcolo e comunicazione continua a ostacolare le nostre prestazioni.

Scaling dell'Architettura del Modello

Quando esaminiamo modelli di dimensioni diverse, siamo sorpresi di scoprire che man mano che i modelli crescono, anche le esigenze di comunicazione aumentano. Questo significa che aumentare non impatta solo la velocità di calcolo, ma influisce anche su come otteniamo i dati dentro e fuori.

Man mano che andiamo più in alto, dobbiamo essere intelligenti riguardo al nostro parallelismo del modello, poiché alcune strategie funzionano meglio di altre su diverse dimensioni. I risultati mostrano che possiamo aumentare sia l'utilizzo che il throughput trovando il giusto equilibrio tra dimensione e comunicazione.

Scaling del Carico di Calcolo

Aumentare la quantità di dati con cui lavoriamo porta a un migliore utilizzo delle GPU. Questo perché il lavoro più grande significa che possiamo tenere le GPU impegnate mentre minimizziamo i ritardi di comunicazione.

Tuttavia, cambiare il carico di lavoro non è sempre semplice. Le impostazioni di addestramento devono spesso tenere conto di vari fattori, inclusi quelli che influenzano le prestazioni complessive.

Tendenze nello Scaling e Implicazioni

Possiamo suddividere le impostazioni di addestramento in due tipi distinti. In uno, la dimensione del modello è grande rispetto alla dimensione del mondo, consentendo a ciascun dispositivo di funzionare efficacemente. Nell'altro, quando il numero di dispositivi cresce troppo rispetto al modello, la comunicazione prende il sopravvento, portando a inefficienze.

Quello che abbiamo imparato è che non tutti i FLOPs sono creati uguali. Le misure tradizionali di performance basate sui FLOPs spesso mancano il bersaglio perché non tengono conto delle esigenze di comunicazione che sorgono con le impostazioni distribuite.

La comunicazione collettiva può davvero rallentare tutto su scala, il che ci spinge a riflettere su strategie diverse. Se non aggiustiamo i nostri metodi per adattarci a questo, potremmo vedere rendimenti decrescenti nelle performance man mano che aumenta la dimensione del modello.

Non solo, ma cercare di addestrare un modello enorme può essere addirittura meno efficiente in termini di potenza rispetto ad addestrare diversi modelli più piccoli contemporaneamente. Questo fornisce una solida motivazione per seguire strategie di ensemble, che potrebbero offrire migliori performance senza dover scalare l'hardware a livelli assurdi.

Rendimenti Decrescenti nelle Prestazioni e nella Potenza su Scala

Anche se partiamo con tantissime promesse, scalare l'hardware può portarci a risultati indesiderati. Anche se la necessità di potenza può aumentare con più GPU, le performance attese spesso non seguono il passo, portando a rapporti potenza-performance che non sono ideali.

Di conseguenza, vediamo problemi con l'efficacia dello scaling. Ad esempio, aggiungere più risorse può portare solo a lievi aumenti nel throughput, mentre i costi continuano a salire.

Sebbene aggiornare le connessioni interne dei nodi possa aiutare, costruire nodi con più acceleratori e velocità più elevate è anche un modo efficace per affrontare problemi di comunicazione su scale maggiori.

Il Benchmarking delle Prestazioni Fallisce nel Fare Derivazioni tra Scale e Generazioni Hardware

Mentre esaminiamo nuove tecnologie e le loro prestazioni, scopriamo che le vecchie metriche non si applicano più. Le dinamiche cambiano significativamente con scale e configurazioni hardware diverse, portando a grandi sfide nella valutazione delle prestazioni.

Alla fine, notiamo che semplicemente misurare throughput o FLOPs non offre un quadro completo delle prestazioni. Una chiara comprensione di come la comunicazione influisce sui tempi di esecuzione nei grandi sistemi è cruciale per il successo.

Lavori Correlati

Durante questa esplorazione del deep learning, ci siamo resi conto che il mondo dell'addestramento su larga scala è diverso dal calcolo tradizionale. Le ricerche passate hanno aiutato a far luce su quanto possiamo essere efficienti, ma è cruciale continuare a far evolvere la nostra comprensione e le nostre strategie.

Tutto, dalle esigenze di memoria alla velocità di comunicazione, può cambiare drasticamente il nostro modo di pensare ai sistemi di deep learning. Il nostro lavoro mira ad ampliare le ricerche passate esaminando come lo scaling influisce sulle prestazioni, in particolare in relazione alle esigenze di comunicazione.

Per concludere, vorremmo ringraziare coloro che ci hanno aiutato a plasmare le nostre idee e a mettere insieme questo lavoro. È un impegno di squadra fino in fondo, e non vediamo l'ora di ricerche future che continueranno a spingere questi confini.

Limitazioni e Futuri Lavori

Sebbene ci siamo sicuramente concentrati sulle tecniche fondamentali di parallelizzazione per addestrare reti neurali, c'è ancora tantissimo da esplorare. Altri metodi per ridurre la memoria e il carico di lavoro potrebbero davvero scuotere le cose, e i lavori futuri probabilmente si espanderanno su ciò che abbiamo coperto qui.

Man mano che andiamo avanti, vogliamo anche esaminare come diverse velocità di comunicazione possano cambiare i nostri risultati. È un'opportunità per immergerci ancora più a fondo in come le diverse impostazioni influenzano le prestazioni.

E mentre le nostre scoperte si concentrano su alcuni tipi di hardware, crediamo che tendenze simili appariranno anche su altre piattaforme. Quindi, la strada davanti è piena di opportunità per esplorazioni e nuove intuizioni.

Dettagli Software e Hardware

Per il nostro addestramento, abbiamo utilizzato un framework speciale e applicato varie ottimizzazioni. I nostri esperimenti principali sono stati condotti con configurazioni specifiche di GPU e abbiamo preso il tempo per misurare una serie di metriche che contano quando si valuta la performance.

In sintesi, mentre continuiamo a spingere i confini di ciò che è possibile nell'addestramento di reti neurali profonde, è chiaro che comunicazione e calcolo devono andare di pari passo. Il viaggio è in corso, e possiamo solo immaginare dove ci porterà la prossima volta.

Fonte originale

Titolo: Hardware Scaling Trends and Diminishing Returns in Large-Scale Distributed Training

Estratto: Dramatic increases in the capabilities of neural network models in recent years are driven by scaling model size, training data, and corresponding computational resources. To develop the exceedingly large networks required in modern applications, such as large language models (LLMs), model training is distributed across tens of thousands of hardware accelerators (e.g. GPUs), requiring orchestration of computation and communication across large computing clusters. In this work, we demonstrate that careful consideration of hardware configuration and parallelization strategy is critical for effective (i.e. compute- and cost-efficient) scaling of model size, training data, and total computation. We conduct an extensive empirical study of the performance of large-scale LLM training workloads across model size, hardware configurations, and distributed parallelization strategies. We demonstrate that: (1) beyond certain scales, overhead incurred from certain distributed communication strategies leads parallelization strategies previously thought to be sub-optimal in fact become preferable; and (2) scaling the total number of accelerators for large model training quickly yields diminishing returns even when hardware and parallelization strategies are properly optimized, implying poor marginal performance per additional unit of power or GPU-hour.

Autori: Jared Fernandez, Luca Wehrstedt, Leonid Shamis, Mostafa Elhoushi, Kalyan Saladi, Yonatan Bisk, Emma Strubell, Jacob Kahn

Ultimo aggiornamento: 2024-11-20 00:00:00

Lingua: English

URL di origine: https://arxiv.org/abs/2411.13055

Fonte PDF: https://arxiv.org/pdf/2411.13055

Licenza: https://creativecommons.org/licenses/by/4.0/

Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.

Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.

Altro dagli autori

Articoli simili