In che modo Latent Space ha utilizzato la libreria di parallelismo dei modelli di Amazon SageMaker per spingere le frontiere dei trasformatori su larga scala

Nodo di origine: 1204406

Questo blog è scritto in collaborazione con Sarah Jane Hong CSO, Darryl Barnhart CTO e Ian Thompson CEO di Latent Space e Prem Ranga di AWS.

Lo spazio latente è una rappresentazione nascosta di idee astratte apprese dai modelli di machine learning (ML). Ad esempio, "cane", "fiore" o "porta" sono concetti o posizioni nello spazio latente. A Spazio latente, stiamo lavorando a un motore che ti consente di manipolare ed esplorare questo spazio sia con la lingua che con i suggerimenti visivi. Il team di Latent Space proviene da due campi che da tempo hanno avuto poca sovrapposizione: la grafica e l'elaborazione del linguaggio naturale (PNL). Tradizionalmente, le modalità delle immagini e del testo sono state gestite separatamente, ciascuna con la propria storia di ingegneria delle caratteristiche complesse, costose e fragili. Le attività di PNL come la comprensione dei documenti o la risposta alle domande di solito hanno poco in comune con le attività di visione come la comprensione delle scene o il rendering, e di solito utilizziamo approcci e modelli molto diversi per ogni attività. Ma questo sta cambiando rapidamente.

Questa fusione di modalità in un unico spazio latente condiviso sblocca una nuova generazione di applicazioni creative e commerciali, dal gioco alla comprensione dei documenti. Ma sbloccare queste nuove applicazioni in un unico modello apre nuove sfide di scalabilità, come evidenziato in "The Bitter Lesson" di Richard Sutton, e l'entusiasmante lavoro degli ultimi anni sulle leggi di scalabilità. Per rendere questo possibile, Latent Space sta lavorando a una ricerca all'avanguardia per fondere queste modalità in un unico modello, ma anche per ridimensionare e farlo in modo efficiente. È qui che entra in gioco il parallelismo del modello.

Amazon Sage MakerL'esclusivo partizionamento automatizzato del modello e l'approccio efficiente del pipelining hanno reso possibile la nostra adozione del parallelismo dei modelli con poco sforzo ingegneristico e abbiamo scalato la nostra formazione dei modelli oltre 1 miliardo di parametri istanze A4 p24d.100xlarge), che è un requisito importante per noi. Inoltre, abbiamo osservato che durante l'addestramento con una configurazione di addestramento a 16 nodi, otto GPU con la libreria di parallelismo del modello SageMaker, abbiamo registrato un miglioramento del 38% dell'efficienza rispetto alle nostre precedenti sessioni di addestramento.

Sfide con l'addestramento di trasformatori su larga scala

In Latent Space, stiamo fondendo linguaggio e visione in modelli di trasformatori con miliardi di parametri per supportare casi d'uso "fuori distribuzione" dall'immaginazione di un utente o che si verificherebbero nel mondo reale ma non nei nostri dati di addestramento. Stiamo gestendo le sfide inerenti alla scalabilità a miliardi di parametri e oltre in due modi diversi:

Le tecniche di recupero delle informazioni sono state a lungo una componente chiave dei motori di ricerca e delle attività di controllo qualità. Recentemente, sono stati compiuti progressi entusiasmanti combinando le tecniche IR classiche con trasformatori moderni, in particolare per le attività di risposta alle domande in cui un modello viene addestrato insieme a un retriever neurale che impara a recuperare i documenti pertinenti per aiutare a rispondere alle domande. Per una panoramica, vedere il recente lavoro di FAIR in Generazione aumentata di recupero: semplificazione della creazione di modelli di elaborazione del linguaggio naturale intelligente ed Fusione nel decodificatore, Google Brain's REGNOe di Nvidia Recupero neurale per rispondere alle domande.

Sebbene le tecniche potenziate dal recupero aiutino con i costi e l'efficienza, non siamo ancora in grado di adattare il modello su una singola GPU per il nostro modello più grande. Ciò significa che dobbiamo utilizzare il parallelismo del modello per addestrarlo. Tuttavia, a causa della natura della nostra architettura di recupero, progettare la nostra suddivisione del modello era impegnativo a causa delle interdipendenze tra i contesti recuperati tra gli input di formazione. Inoltre, anche se determiniamo come suddividere il nostro modello, l'introduzione del parallelismo del modello è stato un compito ingegneristico significativo per noi da svolgere manualmente durante il nostro ciclo di vita di ricerca e sviluppo.

La libreria di parallelismo del modello SageMaker

Il parallelismo del modello è il processo di suddivisione di un modello tra più dispositivi o nodi (come le istanze dotate di GPU) e la creazione di una pipeline efficiente per addestrare il modello su questi dispositivi per massimizzare l'utilizzo della GPU. Il libreria di parallelismo del modello in SageMaker rende il parallelismo del modello più accessibile fornendo la suddivisione automatica del modello, nota anche come partizionamento automatico del modello e sofisticata pianificazione dell'esecuzione della pipeline. Gli algoritmi di suddivisione del modello possono ottimizzare la velocità o il consumo di memoria. La libreria utilizza un algoritmo di partizionamento che bilancia la memoria, riduce al minimo la comunicazione tra i dispositivi e ottimizza le prestazioni.

Partizionamento automatico del modello

Per il nostro caso d'uso PyTorch, la libreria parallela del modello esegue internamente una fase di tracciamento (nella prima fase di addestramento) che costruisce il grafico del modello e determina le forme del tensore e dei parametri. Quindi costruisce un albero, che consiste nel nidificato nn.Module oggetti nel modello, nonché dati aggiuntivi raccolti dalla traccia, come la quantità di dati archiviati nn.Parameterse runtime per ciascuno nn.Module.

La libreria quindi attraversa questo albero dalla radice ed esegue un algoritmo di partizionamento che bilancia il carico di calcolo e l'utilizzo della memoria e riduce al minimo la comunicazione tra le istanze. Se più nn.Modules condividono lo stesso nn.Parameter, questi moduli vengono posizionati sullo stesso dispositivo per evitare di mantenere più versioni dello stesso parametro. Dopo aver deciso di partizionare, i moduli e i pesi assegnati vengono caricati sui loro dispositivi.

Pianificazione dell'esecuzione della pipeline

Un'altra caratteristica fondamentale della libreria parallela del modello distribuito di SageMaker è condutture pipeline, che determinano l'ordine in cui vengono effettuati i calcoli e i dati vengono elaborati tra i dispositivi durante l'addestramento del modello. Il pipelining si basa sulla suddivisione di un mini-batch in microbatch, che vengono inseriti nella pipeline di formazione uno per uno e seguono una pianificazione di esecuzione definita dal runtime della libreria.

La pipeline di microbatch garantisce che tutte le GPU siano completamente utilizzate, che è qualcosa che dovremmo costruire da soli, ma con la libreria di parallelismo del modello ciò avviene ordinatamente dietro le quinte. Infine, possiamo usare AmazonFSx, che è importante per garantire che le nostre velocità di lettura siano elevate dato il numero di file letti durante l'addestramento di un modello multimodale con recupero.

Architettura della formazione

Il diagramma seguente rappresenta il modo in cui impostiamo la nostra architettura di formazione. I nostri obiettivi primari erano migliorare la velocità di formazione e ridurre i costi. I trasformatori di immagine e linguaggio che stiamo addestrando sono estremamente complessi, con un numero notevolmente elevato di livelli e pesi all'interno, che corrono fino a miliardi di parametri, il che li rende incapaci di adattarsi alla memoria di un singolo nodo. Ogni nodo trasporta un sottoinsieme del modello, attraverso il quale i flussi di dati e le trasformazioni vengono condivisi e compilati. Abbiamo impostato 16 p4d.24xgrande istanze ciascuna con otto GPU utilizzando la seguente rappresentazione dell'architettura:

Man mano che aumentiamo i nostri modelli, una tendenza comune è quella di avere tutto memorizzato nei pesi della rete. Tuttavia, per scopi pratici, vogliamo aumentare i nostri modelli per imparare a cercare contesti rilevanti per aiutare con il compito di rendering. Questo ci consente di mantenere bassi i nostri costi di servizio senza compromettere la qualità dell'immagine. Usiamo un grande modello PNL basato su trasformatore e, come accennato prima, abbiamo osservato un aumento del 38% nell'efficienza dell'addestramento con la libreria di parallelismo del modello SageMaker, come mostrato di seguito:

  • Abbiamo bisogno di una riduzione totale per ogni calcolo nel caso di parallelismo a livello tensoriale. Questo richiede O (log_2 n) passaggi paralleli. Ovvero n macchine che eseguono O (n) passaggi, per O (n log_2 n) operazioni totali.
  • Per il parallelismo della pipeline, sono necessari O (1) passaggi paralleli per il passaggio dei dati lungo la pipeline
  • Dati 16 macchine con otto GPU, abbiamo O (1) costo per pipeline parallela e O (log_2 (8)) = O (3) costo per modello parallelo in profondità.
  • In questo caso, vediamo che il costo della rete viene ridotto a 1/3 passando alla pipeline parallela rispetto a ciò che utilizziamo con il parallelismo del modello SageMaker e il costo di formazione complessivo si riduce a 1/2 + 1/2 * 1 / log_2 (16 ) = 0.625 del costo originale che porta a un corrispondente miglioramento dell'efficienza.

In generale, quando la necessità garantisce una formazione distribuita (problemi di ridimensionamento delle dimensioni del modello o dei dati di addestramento), possiamo seguire una serie di best practice per determinare quale approccio funziona meglio.

Best practice per la formazione distribuita

Sulla base della nostra esperienza, suggeriamo di iniziare con un approccio parallelo ai dati distribuiti. Parallelismo dei dati distribuiti come Libreria parallela di dati distribuita SageMaker risolve la maggior parte dei problemi di rete con le repliche dei modelli, quindi è necessario adattare i modelli al minor numero di nodi, quindi replicarli per ridimensionare le dimensioni del batch secondo necessità.

Se si esaurisce la memoria durante l'addestramento, come abbiamo fatto in questo scenario, è possibile passare a un approccio parallelo modello. Tuttavia, considera queste alternative prima di provare l'addestramento parallelo del modello:

  • Su hardware dotato di NVIDIA Tensor Core, usa allenamento a precisione mista per aumentare la velocità e ridurre il consumo di memoria.
  • Riduci le dimensioni del batch (o riduci la risoluzione dell'immagine o la lunghezza della sequenza NLP, se possibile).

Inoltre, preferiamo progetti di modelli che non hanno la normalizzazione batch come descritto in Riconoscimento delle immagini su larga scala ad alte prestazioni senza normalizzazione. Se non può essere evitato, assicurati che la normalizzazione batch sia sincronizzata su tutti i dispositivi. Quando si utilizza la formazione distribuita, il batch viene suddiviso tra le GPU, quindi statistiche batch accurate richiedono la sincronizzazione su tutti i dispositivi. Senza questo, la normalizzazione aumenterà gli errori e quindi comprometterà la convergenza.

Inizia con l'addestramento parallelo del modello quando hai i seguenti vincoli:

  • Il tuo modello non si adatta a un singolo dispositivo
  • A causa delle dimensioni del modello, stai affrontando limitazioni nella scelta di batch di dimensioni maggiori, ad esempio se i pesi del modello occupano la maggior parte della memoria della GPU e sei costretto a scegliere una dimensione batch inferiore e non ottimale

Quando esegui l'ottimizzazione per le prestazioni, procedi come segue:

Quando ottimizzi i costi, utilizza le istanze Spot gestite da SageMaker per la formazione. Ciò può ottimizzare il costo dei modelli di addestramento fino al 90% rispetto alle istanze on demand. SageMaker gestisce le interruzioni Spot per tuo conto.

Altri fattori da considerare:

  • All'interno di un nodo quando c'è un'interconnessione veloce, è più sfumato. Se è disponibile un'ampia capacità di rete all'interno del nodo, il rimescolamento dei dati per un calcolo più ottimale può mostrare un vantaggio.
  • Se le attivazioni sono molto più grandi dei tensori di peso, può essere utile anche un ottimizzatore frammentato. Per favore riferisci a Zero per ulteriori dettagli.

La tabella seguente fornisce alcuni scenari di scaleup di formazione comuni e come configurarli in AWS.

Scenario Quando si applica? Soluzione
Scalabilità da una singola GPU a molte GPU Quando la quantità di dati di addestramento o la dimensione del modello è troppo grande Passa a un'istanza multi-GPU come p3.16xlarge, che ha otto GPU, con i dati e l'elaborazione suddivisi tra le otto GPU e producendo un aumento della velocità quasi lineare nel tempo necessario per addestrare il tuo modello.
Scalabilità da una singola istanza a più istanze Quando il ridimensionamento deve andare oltre la modifica delle dimensioni dell'istanza Ridimensiona il numero di istanze con la funzione di stima dell'SDK SageMaker Python impostando il tuo instance_type su p3.16xlarge e instance_count su 2. Invece delle otto GPU su un singolo p3.16xlarge, hai 16 GPU su due istanze identiche. Considera l'idea di utilizzare il Libreria parallela di dati distribuita SageMaker.
Selezione di un approccio parallelo al modello per la formazione Quando si verificano errori di memoria insufficiente durante l'allenamento Passare a un approccio parallelo modello utilizzando il Libreria parallela di modelli distribuiti SageMaker.
Prestazioni di rete per comunicazioni tra nodi Per l'addestramento distribuito con più istanze (ad esempio, comunicazione tra i nodi nel cluster quando si esegue un'operazione AllReduce) Le tue istanze devono trovarsi nella stessa regione e nella stessa zona di disponibilità. Quando usi SageMaker Python SDK, questo viene gestito per te. Anche i dati di allenamento dovrebbero trovarsi nella stessa zona di disponibilità. Considera l'idea di utilizzare il Libreria parallela di dati distribuita SageMaker.
GPU, rete e archiviazione ottimizzati Per esigenze di formazione distribuita su larga scala Il tipo di istanza p4d.24xlarge è stato progettato per l'archiviazione locale veloce e un backplane di rete veloce con un massimo di 400 gigabit e lo consigliamo vivamente come l'opzione più performante per l'addestramento distribuito.

Conclusione

Con la libreria parallela del modello in SageMaker, otteniamo molti vantaggi immediatamente, come il partizionamento automatico del modello e il pipelining efficiente. In questo post, abbiamo condiviso le nostre sfide con il nostro caso d'uso ML, le nostre considerazioni su diversi approcci di formazione e come abbiamo utilizzato la libreria di parallelismo del modello Amazon SageMaker per accelerare la nostra formazione. Soprattutto, ora possono essere necessarie solo poche ore per adottare le best practice per il parallelismo dei modelli e i miglioramenti delle prestazioni descritti qui. Se questo post ti aiuta o ti ispira a risolvere un problema, ci piacerebbe saperlo! Per favore condividi i tuoi commenti e feedback.

Riferimenti

Per ulteriori informazioni, vedere quanto segue:


Informazioni sugli autori

Prem Ranga è un Enterprise Solutions Architect con sede ad Atlanta, GA. Fa parte della community del settore tecnico del machine learning e ama lavorare con i clienti nel loro percorso di machine learning e intelligenza artificiale. Prem è appassionato di robotica, è un ricercatore di veicoli autonomi e ha anche costruito Beer Pours controllati da Alexa a Houston e in altre località.

Sarah Jane Hong è il co-fondatore e Chief Science Officer di Latent Space. Il suo background si trova all'incrocio tra l'interazione uomo-computer e l'apprendimento automatico. In precedenza ha guidato la ricerca sulla PNL presso Sonar (acquisita da Marchex), che serve le aziende nello spazio dell'IA conversazionale. È anche una stimata sviluppatrice AR / VR, avendo ricevuto premi e borse di studio da Oculus, Mozilla Mixed Reality e Microsoft Hololens.

Daryl Barnhart è il co-fondatore e Chief Technology Officer di Latent Space. È uno sviluppatore esperto con esperienza in accelerazione GPU, computer grafica, dati su larga scala e apprendimento automatico. Altre passioni includono la matematica, lo sviluppo di giochi e lo studio delle informazioni.

Ian Thompson è il fondatore e CEO di Latent Space. Ian è un ingegnere e ricercatore ispirato dal "possibile adiacente" - tecnologie che stanno per avere un grande impatto sulle nostre vite. Attualmente incentrato sulla semplificazione e il ridimensionamento dell'apprendimento della rappresentazione multimodale per aiutare a costruire un'IA sicura e creativa. In precedenza ha aiutato a creare aziende nel campo della grafica / realtà virtuale (AltspaceVR, acquisito da Microsoft) e dell'istruzione / PNL (HSE).

Fonte: https://aws.amazon.com/blogs/machine-learning/how-latent-space-used-the-amazon-sagemaker-model-parallelism-library-to-push-the-frontiers-of-large- trasformatori di scala /

Timestamp:

Di più da Blog di apprendimento automatico AWS