I recenti sviluppi nel deep learning hanno portato a modelli sempre più grandi come GPT-3, BLOOM e OPT, alcuni dei quali superano già i 100 miliardi di parametri. Sebbene i modelli più grandi tendano ad essere più potenti, l'addestramento di tali modelli richiede notevoli risorse computazionali. Anche con l'utilizzo di librerie di addestramento distribuite avanzate come FSDP e DeepSpeed, è normale che i lavori di addestramento richiedano centinaia di dispositivi di accelerazione per diverse settimane o mesi alla volta.
Alla fine del 2022, AWS ha annunciato la disponibilità generale di Istanze Amazon EC2 Trn1 offerto da AWSTrainium—un acceleratore di machine learning (ML) appositamente progettato, ottimizzato per fornire una piattaforma ad alte prestazioni, conveniente e altamente scalabile per l'addestramento di modelli di deep learning nel cloud. Le istanze Trn1 sono disponibili in diverse dimensioni (vedere la tabella seguente), con un massimo di 16 acceleratori Trainium per istanza.
Dimensione istanza | Acceleratori di trainio | Memoria dell'acceleratore (GB) | CPU virtuali | Memoria di istanza (GiB) | Larghezza di banda della rete (Gbps) |
trn1.2xgrande | 1 | 32 | 8 | 32 | Fino a 12.5 |
trn1.32xgrande | 16 | 512 | 128 | 512 | 800 |
trn1n.32xlarge (prossimamente) | 16 | 512 | 128 | 512 | 1600 |
Le istanze Trn1 possono essere distribuite come istanze autonome per lavori di formazione più piccoli o in ultracluster altamente scalabili che supportano la formazione distribuita su decine di migliaia di acceleratori Trainium. Tutte le istanze Trn1 supportano la configurazione autonoma, mentre gli ultracluster Trn1 richiedono istanze trn1.32xlarge o trn1n.32xlarge. In un ultracluster, più istanze Trn1 si trovano in una determinata zona di disponibilità AWS e sono connesse con reti EFA (Elastic Fabric Adapter) ad alta velocità e bassa latenza che forniscono 800 Gbps di larghezza di banda di rete non bloccante per istanza per operazioni di calcolo collettive . Il tipo di istanza trn1n.32xlarge, che verrà lanciato all'inizio del 2023, aumenterà questa larghezza di banda a 1600 Gbps per istanza.
Molti clienti aziendali scelgono di distribuire i propri carichi di lavoro di deep learning utilizzando Kubernetes, lo standard de facto per l'orchestrazione dei container nel cloud. I clienti AWS spesso distribuiscono questi carichi di lavoro utilizzando Servizio Amazon Elastic Kubernetes (Amazon EKS). Amazon EKS è un servizio Kubernetes gestito che semplifica la creazione, la configurazione, il ciclo di vita e il monitoraggio dei cluster Kubernetes, pur offrendo la piena flessibilità di Kubernetes upstream.
Oggi siamo lieti di annunciare il supporto ufficiale per i lavori di formazione distribuiti utilizzando istanze Amazon EKS e EC2 Trn1. Con questo annuncio, ora puoi eseguire facilmente lavori di formazione containerizzati su larga scala all'interno di Amazon EKS, sfruttando appieno il rapporto prezzo-prestazioni, la scalabilità e la facilità d'uso offerti dalle istanze Trn1.
Insieme a questo annuncio, pubblichiamo anche un tutorial dettagliato che ti guida attraverso i passaggi necessari per eseguire un processo di addestramento distribuito a più istanze (pre-addestramento BERT fase 1) utilizzando istanze Amazon EKS e Trn1. In questo post imparerai a conoscere l'architettura della soluzione e rivedrai diversi passaggi chiave del tutorial. Fare riferimento al archivio tutorial ufficiale per il flusso di lavoro completo end-to-end.
A seguire, un'ampia familiarità con i principali servizi AWS come Cloud di calcolo elastico di Amazon (Amazon EC2) e Amazon EKS è implicito e sarebbe utile una familiarità di base con deep learning e PyTorch.
Architettura della soluzione
Il diagramma seguente illustra l'architettura della soluzione.
La soluzione è costituita dai seguenti componenti principali:
- Un cluster EKS
- Un gruppo di nodi EKS costituito da istanze trn1.32xlarge
- Il Neurone AWS SDK
- Plugin EKS per Neuron e EFA
- An Registro dei contenitori Amazon Elastic (Amazon ECR) Repository
- Un'immagine del contenitore di addestramento
- An Amazon FSx per Lustre file system
- Uno scheduler batch Volcano e un server etcd
- Il lanciatore di lavoro universale TorchX
- Il modulo TorchX DDP per Trainium
Al centro della soluzione c'è un cluster EKS che fornisce la funzionalità di gestione Kubernetes di base tramite un endpoint del servizio EKS. Uno dei vantaggi di Amazon EKS è che il servizio monitora e ridimensiona attivamente il piano di controllo in base al carico, garantendo prestazioni elevate per carichi di lavoro di grandi dimensioni come l'addestramento distribuito. All'interno del cluster EKS è presente un gruppo di nodi costituito da due o più istanze trn1.32xlarge basate su Trainium che risiedono nella stessa zona di disponibilità.
Il Neuron SDK è lo stack software che fornisce il driver, il compilatore, il runtime, l'integrazione del framework (ad esempio, PyTorch Neuron) e gli strumenti utente che consentono di accedere ai vantaggi degli acceleratori Trainium. Il driver del dispositivo Neuron viene eseguito direttamente sui nodi EKS (istanze Trn1) e fornisce l'accesso ai chip Trainium dall'interno dei contenitori di addestramento che vengono avviati sui nodi. I plug-in Neuron ed EFA sono installati all'interno del cluster EKS per fornire l'accesso ai chip Trainium e ai dispositivi di rete EFA necessari per la formazione distribuita.
Un repository ECR viene utilizzato per archiviare le immagini del contenitore di addestramento. Queste immagini contengono l'SDK Neuron (escluso il driver Neuron, che viene eseguito direttamente sulle istanze Trn1), lo script di addestramento PyTorch e le dipendenze richieste. Quando un processo di addestramento viene avviato sul cluster EKS, le immagini del container vengono prima estratte da Amazon ECR sui nodi EKS e i container di lavoro PyTorch vengono quindi istanziati dalle immagini.
Lo storage condiviso viene fornito utilizzando un file system FSx for Lustre ad alte prestazioni che esiste nella stessa zona di disponibilità delle istanze trn1.32xlarge. La creazione e il collegamento del file system FSx for Lustre al cluster EKS è mediato dal file system Driver Amazon FSx per Lustre CSI. In questa soluzione, l'archiviazione condivisa viene utilizzata per archiviare il set di dati di addestramento e tutti i log o gli artefatti creati durante il processo di addestramento.
La soluzione utilizza il Lanciatore di lavoro universale TorchX per lanciare lavori di formazione distribuiti all'interno di Amazon EKS. TorchX ha due importanti dipendenze: il batch scheduler Volcano e il server etcd. Volcano gestisce la pianificazione e l'accodamento dei lavori di addestramento, mentre il server etcd è un archivio di valori-chiave utilizzato da TorchElastic per la sincronizzazione e la scoperta dei peer durante l'avvio del lavoro.
Quando un lavoro di addestramento viene avviato utilizzando TorchX, il comando di avvio utilizza il modulo DDP distribuito TorchX fornito per Trainium per configurare il lavoro di addestramento generale e quindi eseguire i comandi torchrun appropriati su ciascuno dei pod di lavoro PyTorch. Quando un processo è in esecuzione, può essere monitorato utilizzando strumenti Kubernetes standard (come kubectl) o tramite set di strumenti ML standard come TensorBoard.
Panoramica della soluzione
Diamo un'occhiata ai passaggi importanti di questa soluzione. In questa panoramica, ci riferiamo al Avvia un lavoro di addestramento del neurone PyTorch multi-nodo su Trainium utilizzando TorchX ed EKS esercitazione su GitHub.
Crea un cluster EKS
Per iniziare con i processi di addestramento distribuiti in Amazon EKS con istanze Trn1, devi prima creare un cluster EKS come descritto nella tutorial su GitHub. La creazione di cluster può essere ottenuta utilizzando strumenti standard come eksctl
ed AWS CloudFormazione.
Crea un gruppo di nodi EKS
Successivamente, dobbiamo creare un gruppo di nodi EKS contenente due o più istanze trn1.32xlarge in una regione supportata. Nel tutorial, AWS CloudFormation viene utilizzato per creare un modello di lancio EC2 specifico per Trainium, che garantisce che le istanze Trn1 vengano avviate con un'Amazon Machine Image (AMI) appropriata e la configurazione di rete EFA corretta necessaria per supportare l'addestramento distribuito. L'AMI include anche il driver del dispositivo Neuron che fornisce il supporto per i chip acceleratori Trainium. Con il eksctl
Strumento di gestione Amazon EKS, puoi creare facilmente un gruppo di nodi Trainium utilizzando un manifest YAML di base che fa riferimento al modello di lancio appena creato. Per esempio:
Nel manifest precedente, diversi attributi sono configurati per consentire l'utilizzo delle istanze Trn1 nel cluster EKS. Primo, metadata.region
è impostato su una delle regioni che supporta le istanze Trn1 (attualmente us-east-1
ed us-west-2
). Successivamente, per availabilityZones, Amazon EKS richiede che vengano specificate due zone di disponibilità. Una di queste zone di disponibilità deve supportare l'utilizzo di istanze Trn1, mentre l'altra può essere scelta a caso. Il tutorial mostra come determina quali zone di disponibilità consentiranno le istanze Trn1 all'interno del tuo account AWS. Anche la stessa zona di disponibilità che supporta Trn1 deve essere specificata utilizzando il availabiltyZones
attributo associato al gruppo di nodi EKS. efaEnabled
è impostato su true
per configurare i nodi con la configurazione di rete EFA appropriata richiesta per l'addestramento distribuito. Infine il launchTemplate.id
L'attributo associato al gruppo di nodi punta al modello di lancio EC2 creato tramite AWS CloudFormation in una fase precedente.
Supponendo che tu abbia già applicato il modello CloudFormation e installato il file eksctl
strumento di gestione, è possibile creare un gruppo di nodi EKS compatibile con Trainium eseguendo il seguente codice:
Installa i plugin Kubernetes per i dispositivi Trainium e EFA
Con il gruppo di nodi in atto, il passaggio successivo consiste nell'installare i plug-in Kubernetes che forniscono supporto per gli acceleratori Trainium (tramite il plug-in Neuron) e i dispositivi EFA (tramite il plug-in EFA). Questi plug-in possono essere facilmente installati nel cluster utilizzando lo standard kubectl
strumento di gestione come mostrato nel tutorial.
Per utilizzare il programma di avvio PyTorch universale TorchX per avviare processi di formazione distribuiti, sono richiesti due prerequisiti: il pianificatore batch Volcano e il server etcd. Proprio come i plugin Neuron ed EFA, possiamo usare il file kubectl
strumento per installare Volcano e il server etcd sul cluster EKS.
Collega l'archiviazione condivisa al cluster EKS
Nel tutorial, FSx for Lustre viene utilizzato per fornire un file system condiviso ad alte prestazioni a cui è possibile accedere dai vari pod di lavoro EKS. Questa archiviazione condivisa viene utilizzata per ospitare il set di dati di addestramento, nonché eventuali artefatti e log creati durante il processo di addestramento. L'esercitazione descrive come creare e collegare l'archiviazione condivisa al cluster utilizzando il file Driver Amazon FSx per Lustre CSI.
Crea un'immagine del contenitore di addestramento
Successivamente, è necessario creare un'immagine del contenitore di addestramento che includa lo script di addestramento PyTorch insieme a eventuali dipendenze. Un Dockerfile di esempio è incluso nel tutorial, che incorpora lo script di pre-training BERT insieme alle sue dipendenze software. Il Dockerfile viene utilizzato per creare l'immagine del contenitore di addestramento e l'immagine viene quindi inviata a un repository ECR da cui i lavoratori PyTorch sono in grado di estrarre l'immagine quando viene avviato un processo di addestramento nel cluster.
Impostare i dati di allenamento
Prima di avviare un processo di addestramento, i dati di addestramento vengono prima copiati nel volume di archiviazione condiviso su FSx for Lustre. Il tutorial descrive come creare un pod Kubernetes temporaneo che ha accesso al volume di archiviazione condiviso e mostra come accedere al pod per scaricare ed estrarre il set di dati di addestramento utilizzando i comandi della shell Linux standard.
Con i vari prerequisiti software e infrastrutturali, ora possiamo concentrarci sugli aspetti Trainium della soluzione.
Precompila il tuo modello
Il Neuron SDK supporta PyTorch attraverso un livello di integrazione chiamato Neurone PyTorch. Per impostazione predefinita, PyTorch Neuron funziona con la compilazione just-in-time, in cui i vari grafici di calcolo della rete neurale all'interno di un processo di addestramento vengono compilati man mano che vengono rilevati durante il processo di addestramento. Per i modelli più grandi, può essere più conveniente utilizzare il fornito neuron_parallel_compile
strumento per precompilare e memorizzare nella cache i vari grafici di calcolo in anticipo in modo da evitare la compilazione del grafico al momento dell'addestramento. Prima di avviare il lavoro di addestramento sul cluster EKS, il tutorial mostra come avviare un lavoro di precompilazione tramite TorchX utilizzando il neuron_parallel_compile
attrezzo. Al termine del lavoro di precompilazione, il compilatore Neuron avrà identificato e compilato tutti i grafici di calcolo della rete neurale e li avrà memorizzati nella cache nel volume di archiviazione condiviso per un uso successivo durante il lavoro di pre-addestramento BERT effettivo.
Avviare il processo di formazione distribuito
Al termine della precompilazione, TorchX viene quindi utilizzato per avviare un processo di formazione distribuito di 64 lavoratori su due istanze trn1.32xlarge, con 32 lavoratori per istanza. Utilizziamo 32 worker per istanza perché ogni istanza trn1.32xlarge contiene 16 acceleratori Trainium, con ciascun acceleratore che fornisce 2 NeuronCore. È possibile accedere a ciascun NeuronCore come unico Dispositivo PyTorch XLA nel copione formativo. Un comando di avvio di TorchX di esempio dal tutorial è simile al seguente codice:
I vari argomenti della riga di comando nel precedente comando TorchX sono descritti in dettaglio nel tutorial. Tuttavia, i seguenti argomenti sono più importanti nella configurazione del lavoro di formazione:
- -cfg coda=prova – Specifica la coda Volcano da utilizzare per il processo di addestramento
- -cfg immagine_repository – Specifica il repository ECR da utilizzare per le immagini del contenitore TorchX
- –script_args – Specifica tutti gli argomenti che devono essere passati allo script di addestramento PyTorch
- –nnodes e –nproc_per_node – Il numero di istanze e worker per istanza da utilizzare per il processo di formazione
- –Script – Il nome dello script di addestramento PyTorch da avviare all'interno del contenitore di addestramento
- -Immagine – Il percorso dell'immagine del container di addestramento in Amazon ECR
- –bf16 – Se abilitare o meno il tipo di dati BF16
Monitorare il lavoro di formazione
Dopo che il lavoro di formazione è stato avviato, ci sono vari modi in cui il lavoro può essere monitorato. L'esercitazione mostra come monitorare le metriche dello script di addestramento di base sulla riga di comando utilizzando kubectl
, come monitorare visivamente l'avanzamento dello script di addestramento in TensorBoard (vedere la schermata seguente) e come monitorare l'utilizzo dell'acceleratore Trainium utilizzando il neuron-top
strumento da Neuron SDK.
Ripulire o riutilizzare l'ambiente
Quando il processo di addestramento è completo, il cluster può essere riutilizzato o riconfigurato per ulteriori processi di addestramento. Ad esempio, il gruppo di nodi EKS può essere rapidamente ridimensionato utilizzando il eksctl
comando per supportare lavori di addestramento che richiedono istanze Trn1 aggiuntive. Allo stesso modo, i comandi di avvio Dockerfile e TorchX forniti possono essere facilmente modificati per supportare ulteriori modelli di deep learning e distribuire topologie di addestramento.
Se il cluster non è più necessario, l'esercitazione include anche tutti i passaggi necessari per rimuovere l'infrastruttura EKS e le risorse correlate.
Conclusione
In questo post, abbiamo esplorato il modo in cui le istanze Trn1 e Amazon EKS forniscono una piattaforma gestita per l'addestramento distribuito ad alte prestazioni, conveniente e ampiamente scalabile di modelli di deep learning. Abbiamo anche condiviso un tutorial completo che mostra come eseguire un processo di addestramento distribuito multi-istanza nel mondo reale in Amazon EKS utilizzando istanze Trn1 e abbiamo evidenziato diversi passaggi e componenti chiave nella soluzione. Questo contenuto del tutorial può essere facilmente adattato per altri modelli e carichi di lavoro e fornisce una soluzione di base per l'addestramento distribuito di modelli di deep learning in AWS.
Per ulteriori informazioni su come iniziare con le istanze Trn1 basate su Trainium, fare riferimento a Documentazione neuronale.
Informazioni sugli autori
Scott Perry è un architetto di soluzioni nel team dell'acceleratore Annapurna ML presso AWS. Con sede in Canada, aiuta i clienti a distribuire e ottimizzare i carichi di lavoro di formazione e inferenza di deep learning utilizzando AWS Inferentia e AWS Trainium. I suoi interessi includono modelli linguistici di grandi dimensioni, apprendimento per rinforzo profondo, IoT e genomica.
Lorea Arrizabalaga è un Solutions Architect allineato al settore pubblico del Regno Unito, dove aiuta i clienti a progettare soluzioni ML con Amazon SageMaker. Fa anche parte della Technical Field Community dedicata all'accelerazione hardware e aiuta con i test e il benchmarking dei carichi di lavoro AWS Inferentia e AWS Trainium.
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- Platoblockchain. Web3 Metaverse Intelligence. Conoscenza amplificata. Accedi qui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/scaling-distributed-training-with-aws-trainium-and-amazon-eks/
- 1
- 100
- 11
- 2022
- 2023
- 7
- a
- capace
- WRI
- acceleratore
- acceleratori
- accesso
- accessibile
- raggiunto
- operanti in
- attivamente
- aggiuntivo
- avanzare
- Avanzate
- Vantaggio
- Allineati
- Tutti
- già
- Sebbene il
- Amazon
- Amazon EC2
- Amazon Sage Maker
- ed
- Annunciare
- ha annunciato
- Annuncio
- applicato
- opportuno
- architettura
- argomenti
- aspetti
- associato
- allegare
- gli attributi
- disponibilità
- disponibile
- AWS
- AWS CloudFormazione
- AWS Inferenza
- Larghezza di banda
- basato
- basic
- perché
- prima
- analisi comparativa
- vantaggi
- Miliardo
- Fioritura
- ampio
- costruire
- Cache
- detto
- Canada
- Chips
- Scegli
- scelto
- Cloud
- Cluster
- codice
- Collective
- arrivo
- presto disponibile
- Uncommon
- comunità
- completamento di una
- completamento
- componenti
- globale
- Calcolare
- Configurazione
- collegato
- Consistente
- Contenitore
- Tecnologie Container
- contiene
- contenuto
- di controllo
- Comodo
- Nucleo
- costo effettivo
- creare
- creato
- Creazione
- creazione
- CSI
- Attualmente
- Clienti
- dati
- DDP
- dedicato
- deep
- apprendimento profondo
- Predefinito
- schierare
- schierato
- descritta
- Design
- dettaglio
- dettagliati
- sviluppi
- dispositivo
- dispositivi
- direttamente
- scoperta
- distribuito
- formazione distribuita
- distribuzione
- scaricare
- autista
- durante
- ogni
- In precedenza
- Presto
- facilità d'uso
- facilmente
- o
- enable
- da un capo all'altro
- endpoint
- assicura
- Impresa
- Anche
- esempio
- eccitato
- esclusa
- esiste
- Esplorazione
- estratto
- tessuto
- Familiarità
- campo
- Compila il
- Nome
- Flessibilità
- Focus
- seguire
- i seguenti
- Contesto
- da
- pieno
- funzionalità
- Generale
- genomica
- ottenere
- GitHub
- dato
- grafico
- grafici
- Gruppo
- Guide
- Maniglie
- Hardware
- Cuore
- utile
- aiuta
- Alta
- Alte prestazioni
- Evidenziato
- vivamente
- host
- Come
- Tutorial
- Tuttavia
- HTML
- HTTPS
- centinaia
- ID
- identificato
- Immagine
- immagini
- implicito
- importante
- in
- includere
- incluso
- inclusi
- Aumento
- sempre più
- Infrastruttura
- install
- installato
- esempio
- integrazione
- interessi
- IoT
- IT
- Lavoro
- Offerte di lavoro
- Le
- Genere
- Lingua
- grandi
- larga scala
- superiore, se assunto singolarmente.
- In ritardo
- lanciare
- lanciato
- lancio
- strato
- IMPARARE
- apprendimento
- Guidato
- biblioteche
- linea
- linux
- caricare
- più a lungo
- Guarda
- SEMBRA
- macchina
- machine learning
- Principale
- gestito
- gestione
- massicciamente
- Memorie
- Metadati
- Metrica
- ML
- modelli
- modificato
- Moduli
- Monitorare
- monitorati
- monitoraggio
- monitor
- mese
- Scopri di più
- maggior parte
- multiplo
- Nome
- Bisogno
- Rete
- internazionale
- rete neurale
- GENERAZIONE
- nodo
- nodi
- numero
- offerto
- offerta
- ufficiale
- ONE
- opera
- Operazioni
- OTTIMIZZA
- ottimizzati
- orchestrazione
- minimo
- Altro
- delineato
- lineamenti
- complessivo
- panoramica
- parametri
- parte
- Passato
- sentiero
- pera
- performance
- fase
- posto
- piattaforma
- Platone
- Platone Data Intelligence
- PlatoneDati
- plug-in
- i plugin
- punti
- Post
- alimentato
- potente
- prerequisiti
- processi
- Progressi
- fornire
- purché
- fornisce
- fornitura
- la percezione
- editoriale
- spinto
- pytorch
- rapidamente
- casuale
- mondo reale
- Riferimenti
- regione
- regioni
- relazionato
- rimuovere
- deposito
- richiedere
- necessario
- richiede
- Risorse
- recensioni
- Correre
- running
- sagemaker
- stesso
- Scalabilità
- scalabile
- bilancia
- scala
- sdk
- settore
- servizio
- Servizi
- set
- alcuni
- condiviso
- Conchiglia
- dovrebbero
- mostrato
- Spettacoli
- significativa
- Allo stesso modo
- Dimensioni
- inferiore
- So
- Software
- soluzione
- Soluzioni
- alcuni
- specificato
- pila
- standalone
- Standard
- iniziato
- startup
- step
- Passi
- Ancora
- conservazione
- Tornare al suo account
- tale
- supporto
- supportato
- supporti
- dati
- sistema
- tavolo
- presa
- team
- Consulenza
- modello
- temporaneo
- Testing
- Il
- Regno Unito
- loro
- migliaia
- Attraverso
- per tutto
- tempo
- a
- strumenti
- Training
- vero
- lezione
- Uk
- unico
- universale
- uso
- Utente
- vario
- versione
- via
- volume
- modi
- Settimane
- se
- quale
- while
- volere
- entro
- lavoratore
- lavoratori
- sarebbe
- YAML
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro
- zone