Gli ultimi anni hanno visto un rapido sviluppo nel campo dell'elaborazione del linguaggio naturale (PNL). Sebbene l'hardware sia migliorato, ad esempio con l'ultima generazione di acceleratori di NVIDIA e Amazon, i professionisti dell'apprendimento automatico avanzato (ML) incontrano ancora regolarmente problemi di ridimensionamento dei loro modelli linguistici di grandi dimensioni su più GPU.
In questo post del blog, riassumiamo brevemente l'ascesa dei modelli NLP su larga e piccola scala, principalmente attraverso l'astrazione fornita da Hugging Face e con il back-end modulare di Amazon SageMaker. In particolare, segnaliamo il lancio di quattro funzionalità aggiuntive all'interno della libreria parallela del modello SageMaker che sbloccano 175 miliardi di parametri di pre-training e perfezionamento del modello NLP per i clienti.
Abbiamo utilizzato questa libreria sulla piattaforma di formazione SageMaker e ottenuto un throughput di 32 campioni al secondo su istanze da 120 ml.p4d.24xlarge e 175 miliardi di parametri. Prevediamo che se aumentassimo questo numero fino a 240 istanze, l'addestramento del modello completo richiederebbe 25 giorni.
Per ulteriori informazioni sul parallelismo del modello, vedere il documento Parallelismo del modello Amazon SageMaker: un framework generale e flessibile per la formazione di modelli di grandi dimensioni.
Puoi anche vedere il notebook GPT2 che abbiamo usato per generare questi numeri di prestazioni sul nostro Repository GitHub.
Per ulteriori informazioni su come utilizzare le nuove funzionalità all'interno del modello SageMaker in parallelo, fare riferimento a Funzionalità estese della libreria parallela modello SageMaker per PyTorche Utilizzare con SageMaker Python SDK.
NLP su Amazon SageMaker – Hugging Face e parallelismo del modello
Se non conosci Hugging Face e NLP, il punto più importante che devi sapere è che le applicazioni che utilizzano l'elaborazione del linguaggio naturale (NLP) stanno iniziando a raggiungere prestazioni a livello umano. Questo è in gran parte guidato da un meccanismo di apprendimento, chiamato attenzione, che ha dato origine a un modello di deep learning, denominato the trasformatore, che è molto più scalabile rispetto ai precedenti metodi sequenziali di deep learning. L'ormai famoso modello BERT è stato sviluppato per sfruttare il trasformatore e ha sviluppato diverse utili tattiche di PNL lungo il percorso. Transformers e la suite di modelli, sia all'interno che all'esterno di NLP, che sono stati tutti ispirati da BERT, sono il motore principale dietro i risultati di ricerca di Google, nella tua Risultati di Google Translatee una miriade di nuove startup.
SageMaker e Hugging Face hanno collaborato per rendere tutto questo più facile che mai per i clienti. Abbiamo lanciato i contenitori di deep learning (DLC) di Hugging Face per addestrare e ospitare modelli pre-addestrati direttamente da Hugging Face's repository di oltre 26,000 modelli. Abbiamo lanciato il compilatore di formazione SageMaker per accelerare la durata dei tuoi cicli di allenamento Hugging Face fino al 50%. Abbiamo anche integrato l'ammiraglia di Hugging Face Transformers SDK con le nostre librerie di formazione distribuite per rendere più facile che mai la scalabilità orizzontale dei tuoi modelli NLP.
Per ulteriori informazioni sui modelli Hugging Face Transformer su Amazon SageMaker, vedere Supporto per i modelli di Transformers che abbracciano il viso.
Nuove funzionalità per l'addestramento del modello NLP su larga scala con la libreria parallela del modello SageMaker
Ad AWS re:Invent 2020, SageMaker ha lanciato librerie distribuite che forniscono le migliori prestazioni sul cloud per l'addestramento di modelli di visione artificiale come Maschera-RCNN e modelli NLP come T5-3B. Ciò è possibile grazie a primitive di comunicazione avanzate che sono del 20-40% più veloci di NCCL su AWS e tecniche di distribuzione dei modelli che consentono a modelli di linguaggio estremamente grandi di scalare da decine a centinaia a migliaia di GPU.
La libreria parallela del modello SageMaker (SMP) ti ha sempre dato la possibilità di prendere il tuo modello NLP predefinito in PyTorch, sia attraverso Hugging Face che altrove, e partizionare quel modello su più GPU nel tuo cluster. Detto in un altro modo, SMP suddivide il tuo modello in blocchi più piccoli in modo da non riscontrare errori di memoria insufficiente (OOM). Siamo lieti di aggiungere ulteriori tecniche di risparmio di memoria che sono fondamentali per i modelli su larga scala, vale a dire:
- Parallelismo tensoriale
- Partizionamento orizzontale dello stato dell'ottimizzatore
- Checkpoint di attivazione
- Scarico di attivazione
È possibile combinare queste quattro funzionalità per utilizzare la memoria in modo più efficiente e addestrare la prossima generazione di modelli NLP su scala estrema.
Allenamento distribuito e parallelismo tensoriale
Per comprendere il parallelismo tensoriale, è utile sapere che esistono molti tipi di training distribuito o parallelismo. Probabilmente hai già familiarità con il tipo più comune, parallelismo dei dati. Il nucleo del parallelismo dei dati funziona in questo modo: aggiungi un nodo aggiuntivo al tuo cluster, ad esempio passando da una a due istanze ml.EC2 nello stimatore SageMaker. Quindi, utilizzi un framework di dati paralleli come Horovod, PyTorch Distributed Data Parallel o SageMaker Distributed. Questo crea repliche del tuo modello, una per acceleratore, e gestisce il partizionamento orizzontale dei dati su ciascun nodo, oltre a riunire tutti i risultati durante la fase di propagazione all'indietro della tua rete neurale. Pensa alla discesa a gradiente distribuito. Il parallelismo dei dati è anche popolare all'interno dei server; stai suddividendo i dati in tutte le GPU e, occasionalmente, nelle CPU, su tutti i tuoi nodi. Il diagramma seguente illustra il parallelismo dei dati.
Parallelismo modello è leggermente diverso. Invece di fare copie dello stesso modello, dividiamo il tuo modello in pezzi. Quindi gestiamo l'esecuzione, quindi i tuoi dati continuano a fluire attraverso la tua rete neurale esattamente nello stesso modo matematico, ma diversi pezzi del tuo modello si trovano su GPU diverse. Se stai usando un ml.p3.8xlarge, hai quattro NVIDIA V100, quindi probabilmente vorrai dividere il tuo modello in 4 pezzi, un pezzo per GPU. Se salti fino a due ml.p4d.24xlarge, sono 16 A100 in totale nel tuo cluster, quindi potresti spezzare il tuo modello in 16 pezzi. Questo è anche chiamato a volte parallelismo della pipeline. Questo perché il set di livelli nella rete è partizionato tra le GPU ed è eseguito in modo pipeline per massimizzare l'utilizzo della GPU. Il diagramma seguente illustra il parallelismo del modello.
Per fare in modo che il parallelismo del modello avvenga su larga scala, abbiamo bisogno di un terzo tipo di distribuzione: parallelismo tensoriale. Il parallelismo tensoriale applica gli stessi concetti a un ulteriore passo avanti: dividiamo gli strati più grandi della tua rete neurale e posizioniamo parti dei livelli stessi su dispositivi diversi. Questo è rilevante quando si lavora con 175 miliardi di parametri o più e si tenta di inserire anche pochi record nella RAM, insieme a parti del modello, per addestrare quel trasformatore. Il diagramma seguente illustra il parallelismo del tensore.
Abilitare parallelismo tensoriale, impostalo all'interno delle opzioni smp passi al tuo estimatore.
Nel codice precedente, pipeline_parallel_degree
descrive in quanti segmenti il tuo modello dovrebbe essere suddiviso in partizioni, in base al parallelismo della pipeline discusso in precedenza. Un'altra parola per questo è punteggi.
Per abilitare il parallelismo del tensore, impostare tensor_parallel_degree
al livello desiderato. Assicurati di selezionare un numero uguale o inferiore al numero di GPU per istanza, quindi non maggiore di 8 per le macchine ml.p4d.24xlarge. Per ulteriori modifiche allo script, fare riferimento a Esegui un processo di formazione parallela modello distribuito SageMaker con parallelismo tensoriale.
Il parametro ddp si riferisce a dati distribuiti parallelamente. In genere lo abiliti se usi il parallelismo dei dati o il parallelismo del tensore, perché la libreria del parallelismo del modello si basa su DDP per queste funzionalità.
Sharding dello stato dell'ottimizzatore, offload dell'attivazione e checkpoint
Se si dispone di un modello estremamente grande, è necessario anche uno stato dell'ottimizzatore estremamente grande. Preparare l'ottimizzatore per SMP è semplice: basta prelevarlo dal disco nello script e caricarlo nel file smp.DistributedOptimizer()
oggetto.
Assicurati di abilitarlo allo stimatore impostando shard_optimizer_state
a Vero nel smp_options
usi per configurare SMP:
Simile al parallelismo del tensore e della pipeline, SMP profila il tuo modello e la tua dimensione mondiale (il numero totale di GPU in tutti i tuoi nodi di addestramento), per trovare le migliori strategie di posizionamento.
Nell'apprendimento profondo gli output del livello intermedio sono anche chiamati attivazioni e devono essere archiviati durante il passaggio in avanti. Questo perché devono essere utilizzati per il calcolo del gradiente nel passaggio all'indietro. In un modello di grandi dimensioni, la memorizzazione simultanea di tutte queste attivazioni in memoria può creare notevoli colli di bottiglia nella memoria. Per affrontare questo collo di bottiglia, puoi usare checkpoint di attivazione, la terza nuova funzionalità nella libreria di parallelismo del modello SageMaker. Checkpoint di attivazione, o punto di controllo del gradiente, è una tecnica per ridurre l'utilizzo della memoria cancellando le attivazioni di determinati livelli e ricalcolandole durante un passaggio all'indietro. Questo scambia efficacemente tempo di calcolo aggiuntivo per un utilizzo ridotto della memoria.
Infine, scarico di attivazione utilizza direttamente il checkpoint di attivazione. È una strategia per mantenere solo poche attivazioni del tensore sulla RAM della GPU durante l'addestramento del modello. Nello specifico, spostiamo le attivazioni con checkpoint nella memoria della CPU durante il passaggio in avanti e le carichiamo nuovamente sulla GPU per il passaggio all'indietro di uno specifico micro-batch.
Micro-batch e strategie di collocamento
Altri argomenti che a volte creano confusione nei clienti sono i micro-lotti e le strategie di posizionamento. Entrambi sono iperparametri che puoi fornire alla libreria parallela del modello SageMaker. In particolare, i micro-batch sono rilevanti quando si implementano modelli che si basano sul parallelismo della pipeline, come quelli con dimensioni di almeno 30 miliardi di parametri o più.
I microbatch sono sottoinsiemi di minibatch. Quando il tuo modello è nel suo ciclo di addestramento, definisci un certo numero di record da raccogliere e passare avanti e indietro attraverso i livelli: questo è chiamato minibatch, o talvolta solo a partita. Un passaggio completo attraverso il tuo set di dati è chiamato an epoca. Per eseguire passaggi avanti e indietro con il parallelismo della pipeline, la libreria parallela del modello SageMaker suddivide i batch in sottoinsiemi più piccoli chiamati micro-batch, che vengono eseguiti uno alla volta per massimizzare l'utilizzo della GPU. Il risultante insieme di esempi per GPU, molto più piccolo, è chiamato micro-batch. Nel nostro esempio GPT-2, abbiamo aggiunto un valore predefinito di 1 microbatch direttamente allo script di addestramento.
Man mano che aumenti la configurazione dell'allenamento, si consiglia vivamente di modificare di conseguenza le dimensioni del batch e del micro-batch. Questo è l'unico modo per garantire buone prestazioni: quando si fa affidamento sul parallelismo della pipeline, è necessario considerare la dimensione del batch e le dimensioni del micro-batch in funzione delle dimensioni complessive del mondo.
Le strategie di posizionamento consentono di indicare fisicamente a SageMaker dove posizionare le partizioni del modello. Se stai utilizzando sia il modello parallelo che il parallelo dati, l'impostazione placement_strategy
a “cluster”
posiziona le repliche del modello negli ID dispositivo (GPU) che sono fisicamente vicini l'uno all'altro. Tuttavia, se vuoi davvero essere più prescrittivo sulla tua strategia di parallelismo, puoi scomporla in un'unica stringa con diverse combinazioni di tre lettere: D per il parallelismo dei dati, P
indica il parallelismo della pipeline e T
per il parallelismo tensoriale. In genere consigliamo di mantenere il posizionamento predefinito di "cluster"
, perché questo è più appropriato per l'addestramento di modelli su larga scala. Il posizionamento "cluster" corrisponde a "DPT
".
Per ulteriori informazioni sulle strategie di posizionamento, vedere Strategia di posizionamento con parallelismo tensoriale.
Caso d'uso di esempio
Immaginiamo che tu abbia un ml.p3.16xlarge nel tuo lavoro di allenamento. Questo ti dà 8 NVIDIA V100 per nodo. Ricorda, ogni volta che aggiungi un'istanza aggiuntiva, si verifica un sovraccarico di larghezza di banda aggiuntivo, quindi è sempre meglio avere più GP'U su un singolo nodo. In questo caso, stai meglio con un ml.p3.16xlarge che, ad esempio, due ml.p3.8xlarges. Anche se il numero di GPU è lo stesso, il sovraccarico di larghezza di banda aggiuntivo del nodo aggiuntivo rallenta il throughput.
Il diagramma seguente illustra il parallelismo del modello a quattro vie, combinato con il parallelismo dei dati a due vie. Ciò significa che in realtà hai due repliche del tuo modello (pensa ai dati in parallelo), con ciascuna di esse partizionata su quattro GPU (modello parallelo).
Se una di queste partizioni del modello è troppo grande per adattarsi a una singola GPU, puoi aggiungere un ulteriore tipo di distribuzione, il parallelismo del tensore, per sputarlo e utilizzare entrambi i dispositivi.
Conclusione
In questo post sul blog abbiamo discusso delle librerie di formazione distribuite SageMaker, concentrandoci in particolare sul parallelismo dei modelli. Abbiamo condiviso i benchmark delle prestazioni del nostro ultimo test, ottenendo 32 campioni al secondo su 120 ml.p4d.24xlarge istanze e 175B parametri su Amazon SageMaker. Prevediamo che se aumentassimo questo valore a 240 istanze p4 potremmo addestrare un modello di parametri 175B in 25 giorni.
Abbiamo anche discusso delle funzionalità più recenti che consentono l'addestramento su larga scala, vale a dire il parallelismo del tensore, il partizionamento orizzontale dello stato dell'ottimizzatore, il checkpoint di attivazione e l'offload dell'attivazione. Abbiamo condiviso alcuni suggerimenti e trucchi per abilitarlo attraverso la formazione su Amazon SageMaker.
Provalo tu stesso utilizzando lo stesso notebook che ha generato i nostri numeri, disponibile su GitHub qui. Puoi anche richiedere più GPU per il tuo account AWS tramite richiedendo un'approvazione del limite di servizio proprio qui.
Informazioni sugli autori
Emilia Webber si è unito ad AWS subito dopo il lancio di SageMaker e da allora ha cercato di parlarne al mondo! Oltre a creare nuove esperienze ML per i clienti, Emily ama meditare e studiare il buddismo tibetano.
Aditya Bindal è un Senior Product Manager per AWS Deep Learning. Lavora su prodotti che rendono più facile per i clienti l'addestramento di modelli di deep learning su AWS. Nel tempo libero, ama passare il tempo con sua figlia, giocare a tennis, leggere romanzi storici e viaggiare.
Luis Quintela è il Software Developer Manager per la libreria parallela del modello AWS SageMaker. Nel tempo libero, può essere trovato in sella alla sua Harley nell'area della baia di San Francisco.
- Coinsmart. Il miglior scambio di bitcoin e criptovalute d'Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Conoscenza amplificata. ACCESSO LIBERO.
- Criptofalco. Radar Altcoin. Prova gratuita.
- Fonte: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Chi siamo
- acceleratore
- Il mio account
- raggiunto
- operanti in
- aggiuntivo
- indirizzo
- Avanzate
- Tutti
- già
- Amazon
- Un altro
- applicazioni
- RISERVATA
- disponibile
- AWS
- Baia
- MIGLIORE
- Maggiore
- Miliardo
- Blog
- Costruzione
- Causare
- il cambiamento
- Cloud
- codice
- combinazioni
- Uncommon
- Comunicazione
- Configurazione
- confusione
- Tecnologie Container
- Nucleo
- potuto
- Clienti
- dati
- sviluppato
- Costruttori
- Mercato
- dispositivo
- dispositivi
- diverso
- distribuito
- distribuzione
- giù
- spinto
- consentendo
- particolarmente
- esempio
- esperienza
- Esperienze
- estremo
- Faccia
- più veloce
- caratteristica
- Caratteristiche
- Fantasia
- in forma
- i seguenti
- Avanti
- essere trovato
- Contesto
- pieno
- function
- Generale
- generare
- GitHub
- andando
- buono
- Google Search
- GPU
- Hardware
- utile
- Highlight
- storico
- Come
- Tutorial
- HTTPS
- centinaia
- è aumentato
- informazioni
- fonte di ispirazione
- integrato
- sicurezza
- IT
- Lavoro
- congiunto
- saltare
- conservazione
- Lingua
- grandi
- con i più recenti
- lanciare
- IMPARARE
- apprendimento
- Livello
- Biblioteca
- caricare
- macchina
- machine learning
- macchine
- Fare
- direttore
- Memorie
- ML
- modello
- modelli
- componibile
- maggior parte
- cambiano
- cioè
- Naturale
- Rete
- Nuove funzionalità
- nodi
- taccuino
- numeri
- Altro
- Carta
- collaborato
- performance
- pezzo
- piattaforma
- Popolare
- possibile
- primario
- Prodotto
- Prodotti
- Profili
- fornire
- RAM
- RE
- Lettura
- raccomandare
- record
- ridurre
- Risultati
- Correre
- running
- Suddetto
- scalabile
- Scala
- scala
- sdk
- Cerca
- servizio
- set
- regolazione
- sharding
- condiviso
- significativa
- Taglia
- So
- Software
- in particolare
- velocità
- Spendere
- dividere
- Regione / Stato
- strategie
- Strategia
- fornire
- tattica
- tecniche
- test
- il mondo
- migliaia
- Attraverso
- tempo
- suggerimenti
- trucchi e suggerimenti
- insieme
- Argomenti
- mestieri
- Training
- capire
- uso
- utilizzare
- visione
- entro
- lavoro
- lavori
- mondo
- anni