Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
SageMaker Best practice per il parallelismo dei modelli distribuiti
Utilizza le seguenti linee guida quando esegui un processo di formazione distribuito con la libreria SageMaker model parallel.
Impostazione della configurazione corretta per un determinato modello
Quando si ridimensiona un modello, si consiglia di consultare il seguente elenco in ordine. Ogni voce dell'elenco illustra i vantaggi dell'utilizzo delle tecniche della libreria insieme ai compromessi che potrebbero sorgere.
Suggerimento
Se un modello può adattarsi bene utilizzando un sottoinsieme delle funzionalità della libreria, l'aggiunta di ulteriori funzionalità di parallelismo del modello o di risparmio di memoria di solito non migliora le prestazioni.
Utilizzo di tipi di istanze GPU di grandi dimensioni
-
Nell'ambito del parallelismo dei modelli, è preferibile utilizzare istanze potenti con memorie GPU di grandi dimensioni per gestire il sovraccarico dovuto alle operazioni di parallelismo dei modelli, come il partizionamento dei modelli su più GPU. Consigliamo di utilizzare le nostre istanze
ml.p4d
oml.p3dn
per addestrare modelli DL di grandi dimensioni. Queste istanze sono inoltre dotate di Elastic Fabric Adapter (EFA), che fornisce una maggiore larghezza di banda di rete e consente un addestramento su larga scala con parallelismo dei modelli.
Ripartizione dello stato dell'ottimizzatore
-
L'impatto dello stato dell'ottimizzatore di ripartizione dipende dal numero di ranghi paralleli dei dati. In genere, un grado più elevato di parallelismo dei dati (proporzionale alla dimensione del nodo di calcolo) può migliorare l'efficienza dell'utilizzo della memoria.
Quando desideri ridimensionare un cluster, assicurati di controllare la configurazione dello stato di ripartizione dell'ottimizzatore. Ad esempio, un modello DL di grandi dimensioni con ripartizione dello stato dell'ottimizzatore che si adatta a un cluster di elaborazione con 16 GPU (ad esempio, due istanze P4d o P4de) potrebbe non adattarsi sempre a un nodo con 8 GPU (ad esempio, una singola istanza P4d o P4de). Questo perché la memoria combinata di 8 GPU è inferiore alla memoria combinata di 16 GPU e la memoria richiesta per GPU per la ripartizione di oltre 8 GPU è anche superiore alla memoria per GPU per la ripartizione nello scenario a 16 GPU. Di conseguenza, l'aumento del fabbisogno di memoria potrebbe non essere adatto al cluster più piccolo.
Per ulteriori informazioni, consulta Partizione dello stato dell'ottimizzatore.
Checkpoint di attivazione
-
L'efficienza della memoria può essere migliorata utilizzando il checkpoint di attivazione per un gruppo di moduli. Più si raggruppano i moduli, più efficiente è l'utilizzo della memoria. Quando si effettuano il checkpoint dei moduli sequenziali per i livelli, l'argomento
strategy
della funzionesmp.set_activation_checkpointing
raggruppa i livelli per il checkpoint. Ad esempio, il raggruppamento di due o più livelli per il checkpoint è più efficiente in termini di memoria rispetto al checkpoint di un livello alla volta, e ciò consente di rinunciare a un tempo di calcolo aggiuntivo con un utilizzo ridotto della memoria.Per ulteriori informazioni, consulta Checkpoint di attivazione.
Parallelismo tensoriale
-
Il grado di parallelismo tensoriale deve essere una potenza di due (2, 4, 8,..., 2n), dove il grado massimo deve essere uguale al numero di GPU per nodo. Ad esempio, se si utilizza un nodo con 8 GPU, i numeri possibili per il grado di parallelismo tensoriale sono 2, 4 e 8. Non consigliamo numeri arbitrari (come 3, 5, 6 e 7) per il grado di parallelismo tensoriale. Quando si utilizzano più nodi, una configurazione errata del grado di parallelismo tensoriale potrebbe comportare l'esecuzione del parallelismo tensoriale tra i nodi. Ciò comporta un notevole sovraccarico derivante dalla comunicazione delle attivazioni tra i nodi e può diventare costoso dal punto di vista computazionale.
Per ulteriori informazioni, consulta Parallelismo tensoriale.
Parallelismo delle pipeline tra i nodi
-
È possibile eseguire il parallelismo delle pipeline sia all'interno di un singolo nodo che su più nodi. Quando utilizzi il parallelismo delle pipeline in combinazione con il parallelismo tensoriale, ti consigliamo di eseguire il parallelismo della pipeline su più nodi e di mantenere il parallelismo tensoriale all'interno dei singoli nodi.
-
Il parallelismo della pipeline viene fornito con le seguenti tre manopole:
microbatches
,active_microbatches
eprescaled_batch
.-
Quando si utilizza il parallelismo tensoriale con il parallelismo della pipeline, si consiglia di attivare
prescaled_batch
modo da aumentare la dimensione del batch per gruppo parallelo del modello per una pipeline efficiente. Conprescaled_batch
attivato, la dimensione del batch impostata nello script di addestramento diventatp_size
moltiplicata per la dimensione del batch impostata per ogni classificazione senzaprescaled_batch
. -
L'aumento del numero di
microbatches
consente di ottenere una pipelining efficiente e prestazioni migliori. Si noti che la dimensione effettiva dei microbatch è la dimensione del batch divisa per il numero di microbatch. Se si aumenta il numero di microbatch mantenendo costante la dimensione del batch, ogni microbatch elabora un numero inferiore di campioni. -
Il numero di
active_microbatches
è il numero massimo di microbatch che vengono processati contemporaneamente durante la pipeline. Per ogni microbatch attivo in corso, le relative attivazioni e i gradienti occupano la memoria della GPU. Pertanto, l'aumento diactive_microbatches
richiede più memoria GPU.
-
-
Se sia la memoria della GPU che quella della GPU sono sottoutilizzate, aumenta
active_microbatches
per una migliore parallelizzazione durante la pipeline. -
Per ulteriori informazioni su come utilizzare il parallelismo tensoriale con il parallelismo della pipeline, consulta Parallelismo tensoriale combinato con parallelismo di pipeline.
-
Per trovare le descrizioni dei parametri sopra menzionati, consulta Parameters for
smdistributed
nella documentazionedi SageMaker Python SDK.
Trasferimento delle attivazioni sulla CPU
-
Assicurati che venga utilizzato in combinazione con il checkpoint di attivazione e il parallelismo della pipeline. Per garantire che l'offload e il preload avvengano in background, specifica un valore maggiore di 1 per il parametro microbatch.
-
Durante lo scaricamento delle attivazioni, è possibile aumentare
active_microbatches
e talvolta far corrispondere il numero totale di microbatch. Ciò dipende da quali moduli sono sottoposti a checkpoint e da come è partizionato il modello.Per ulteriori informazioni, consulta Offload di attivazione.
Configurazioni di riferimento
Il team di formazione sul parallelismo dei SageMaker modelli fornisce i seguenti punti di riferimento basati su esperimenti con il modello GPT-2, sulla lunghezza della sequenza di 512 e sulla dimensione del vocabolario di 50.000.
Il numero di parametri del modello | Tipo di istanza | Parallelismo della pipeline | Parallelismo tensoriale | Ripartizione dello stato dell'ottimizzatore | Checkpoint di attivazione | Batch pre-ridimensionato | Dimensione batch |
---|---|---|---|---|---|---|---|
10 miliardi | 16 ml.p4d.24xlarge |
1 | 4 | True | Ogni livello del trasformatore | True | batch_size=40 |
30 miliardi | 16 ml.p4d.24xlarge |
1 | 8 | True | Ogni livello del trasformatore | True | batch_size=32 |
60 miliardi | 32 ml.p4d.24xlarge |
2 | 8 | True | Ogni livello del trasformatore | True | batch_size=56 , microbatches=4 ,
active_microbatches=2 |
È possibile estrapolare le configurazioni precedenti per stimare l'utilizzo della memoria GPU per la configurazione del modello. Ad esempio, se aumenti la lunghezza della sequenza per un modello da 10 miliardi di parametri o aumenti le dimensioni del modello a 20 miliardi, potresti voler ridurre prima la dimensione del batch. Se il modello continua a non adattarsi, prova ad aumentare il grado di parallelismo tensoriale.
Modifica dello script di addestramento
-
Prima di utilizzare le funzionalità della libreria SageMaker model parallel nello script di addestramento, rivediSuggerimenti e insidie per la configurazione della SageMaker Distributed Model Parallelism Library.
-
Per avviare più rapidamente un processo di formazione, utilizzate la modalità SageMaker locale
. Ciò consente di eseguire rapidamente un processo di formazione localmente su un'istanza di SageMaker notebook. A seconda della scala dell'istanza ML su cui è in esecuzione l'istanza del SageMaker notebook, potrebbe essere necessario regolare le dimensioni del modello modificando le configurazioni del modello, ad esempio la larghezza nascosta, il numero di livelli del trasformatore e le testine di attenzione. Verifica se il modello ridotto funziona bene sull'istanza del notebook prima di utilizzare un cluster di grandi dimensioni per addestrare il modello completo.
Monitoraggio e registrazione di un job di formazione utilizzando la SageMaker console e Amazon CloudWatch
-
Nel pannello di navigazione a sinistra scegli Addestramento.
-
Scegliere Processi di addestramento.
-
Nel riquadro principale, scegli il nome del processo di addestramento per il quale desideri visualizzare ulteriori dettagli.
-
Sfoglia il pannello principale e trova la sezione Monitora per vedere la visualizzazione automatizzata.
-
Per visualizzare i log dei processi di addestramento , scegli Visualizza log nella sezione Monitora. È possibile accedere ai registri distribuiti dei lavori di formazione relativi al processo di formazione in. CloudWatch Se hai avviato l’addestramento distribuito su più nodi, dovresti vedere più flussi di log con tag nel formato algo-n-1234567890. Il flusso di log algo-1 tiene traccia dei log di addestramento dal nodo principale (0°).
Per ulteriori informazioni, consulta Amazon CloudWatch Metrics per il monitoraggio e l'analisi dei lavori di formazione.
Autorizzazioni
Per eseguire un processo di SageMaker formazione con il parallelismo dei modelli o i notebook di esempio di formazione SageMaker distribuiti
-
Per usare FSx for Lustre
, aggiungi AmazonFSxFullAccess
. -
Per utilizzare Amazon S3 come canale dati, aggiungi
AmazonS3FullAccess
. -
Per usare Docker, creare il tuo container e inviarlo ad Amazon ECR, aggiungi
AmazonEC2ContainerRegistryFullAccess
. -
Per avere accesso completo all'intera suite di funzionalità, aggiungi. SageMaker
AmazonSageMakerFullAccess