Best practice per il parallelismo dei modelli distribuiti di SageMaker - Amazon SageMaker AI

Best practice per il parallelismo dei modelli distribuiti di SageMaker

Utilizza le seguenti linee guida quando esegui un processo di addestramento distribuito con la libreria parallela del modello SageMaker.

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 o ml.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 funzione smp.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 e prescaled_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. Con prescaled_batch attivato, la dimensione del batch impostata nello script di addestramento diventa tp_size moltiplicata per la dimensione del batch impostata per ogni classificazione senza prescaled_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 di active_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 citati, consulta Parametri per smdistributed nella documentazione di 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 addestramento sul parallelismo dei modelli SageMaker fornisce i seguenti punti di riferimento basati su esperimenti con il modello GPT-2, la lunghezza della sequenza di 512 e la 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 parallela del modello SageMaker nello script di addestramento, rivedi Suggerimenti e insidie per la configurazione della libreria del parallelismo dei modelli distribuiti di SageMaker.

  • Per avviare più velocemente un job di addestramento, utilizza la modalità locale di SageMaker AI. Ciò consente di eseguire rapidamente un processo di addestramento localmente su un'istanza di notebook SageMaker. A seconda della scala dell'istanza ML su cui è in esecuzione l'istanza del notebook SageMaker, potrebbe essere necessario regolare le dimensioni del modello modificando le configurazioni del modello, come la larghezza nascosta, il numero di strati 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 log di un job di addestramento utilizzando la console SageMaker AI e Amazon CloudWatch

Per monitorare le metriche a livello di sistema, ad esempio utilizzo della memoria CPU, della memoria GPU e della GPU, ricorri alla visualizzazione fornita tramite la console SageMaker AI.

  1. Nel pannello di navigazione a sinistra scegli Addestramento.

  2. Scegliere Processi di addestramento.

  3. Nel riquadro principale, scegli il nome del processo di addestramento per il quale desideri visualizzare ulteriori dettagli.

  4. Sfoglia il pannello principale e trova la sezione Monitora per vedere la visualizzazione automatizzata.

  5. Per visualizzare i log dei processi di addestramento , scegli Visualizza log nella sezione Monitora. Puoi accedere ai log dei processi di addestramento distribuito relativi al processo di addestramento 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 Metriche Amazon CloudWatch per il monitoraggio e l’analisi dei job di addestramento.

Autorizzazioni

Per eseguire un processo di addestramento SageMaker con parallelismo dei modelli o i notebook di esempio di addestramento distribuito SageMaker, assicurati di disporre delle autorizzazioni giuste nel tuo ruolo IAM, come le seguenti: