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à.
Best practice per la parallelizzazione dei modelli distribuiti di SageMaker
Utilizza le seguenti linee guida quando esegui un job di addestramento distribuito con la libreria di parallelizzazione dei modelli SageMaker v2 (SMP v2).
Impostazione della configurazione corretta per l’addestramento distribuito
Per stimare e individuare il miglior punto di partenza per applicare le tecniche di addestramento distribuito fornite da SMP v2, consulta l’elenco riportato di seguito. Ogni voce dell’elenco illustra i vantaggi e i potenziali compromessi legati all’utilizzo di Caratteristiche principali della libreria di parallelismo dei SageMaker modelli v2.
Utilizza le seguenti sezioni per saperne di più sul parallelismo dei modelli e sulla libreria parallela di modelli SageMaker.
In questa sezione vengono fornite linee guida su come stabilire le migliori configurazioni di modello ottenere per un throughput ottimale con requisiti globali relativi alle dimensioni dei batch.
Innanzitutto, indipendentemente dalle dimensioni del modello, consigliamo le configurazioni indicate di seguito.
-
Utilizza il tipo di istanza più potente disponibile.
-
Attiva sempre la precisione mista, poiché offre vantaggi sostanziali in termini di prestazioni e riduzione della memoria. Ti consigliamo di utilizzare
bfloat16, che assicura maggiore precisione rispetto afloat16. -
Attiva la libreria SageMaker Distributed Data Parallelism (anziché utilizzare NCCL) ogni volta che è applicabile, come mostrato in Compatibilità con la libreria SMDDP ottimizzata per l'infrastruttura AWS. Un’eccezione è rappresentata dai casi d’uso relativi alla sola parallelizzazione tensoriale (
hybrid_shard_degree = 1etensor_paralle_degree > 1). -
Se il tuo modello include più di 60 miliardi di parametri circa, ti consigliamo di utilizzare Inizializzazione ritardata dei parametri. È inoltre possibile ricorrere all’inizializzazione ritardata dei parametri per velocizzare l’inizializzazione di qualsiasi modello.
-
Ti consigliamo di abilitare Checkpoint di attivazione.
A seconda delle dimensioni del modello, ti consigliamo di iniziare attenendoti alle indicazioni fornite di seguito.
-
Utilizza la parallelizzazione dei dati sottoposti a sharding.
-
A seconda della dimensione del batch che intendi inserire nella memoria della GPU, scegli il grado di parallelizzazione dei dati sottoposti a sharding. Normalmente, è consigliabile iniziare con il grado più basso per inserire il modello nella memoria della GPU e ridurre al minimo il sovraccarico derivante dalla comunicazione di rete. Se viene visualizzato un avviso che segnala svuotamenti della cache, ti consigliamo di aumentare il grado di sharding.
-
Determina
world_sizein base alla dimensione massima del batch locale e alla dimensione del batch globale richiesta, se presente. -
Puoi provare ad applicare l’offload dell’attivazione. A seconda degli scenari, questo può soddisfare le esigenze di memoria senza dover aumentare il grado di sharding, riducendo così la comunicazione.
-
-
Utilizza contemporaneamente la parallelizzazione dei dati sottoposti a sharding di PyTorch FSDP e la parallelizzazione tensoriale di SMP v2, come indicato in Parallelizzazione tensoriale.
-
Quando si esegue l’addestramento su cluster di grandi dimensioni con il solo FSDP, la dimensione globale del batch può diventare eccessiva, causando problemi di convergenza per il modello. In genere, la maggior parte dei lavori di ricerca mantiene la dimensione del batch al di sotto dei 4 milioni di token. In questo caso, puoi risolvere il problema combinando PyTorch FSDP con la parallelizzazione tensoriale di SMP v2 per ridurre la dimensione del batch.
Ad esempio, in presenza di 256 nodi e una lunghezza della sequenza pari a 4096, anche se la dimensione del batch è 1 per GPU, la dimensione globale del batch sarà di 8 milioni di token. Tuttavia, quando si utilizza la parallelizzazione tensoriale con grado 2 e la dimensione del batch è 1 per gruppo parallelo di tensori, la dimensione del batch per GPU si dimezza, portando il numero dei token a 4 milioni.
-
In caso di addestramento con contesti di notevole lunghezza, ad esempio 8.000, la memoria di attivazione pari a 16.000 può diventare molto elevata. FSDP non esegue lo sharding delle attivazioni e queste possono causare l’esaurimento della memoria delle GPU. In tali scenari, è possibile ottenere un addestramento efficiente combinando PyTorch FSDP con la parallelizzazione tensoriale di SMP v2.
-
Configurazioni di riferimento
Il team di addestramento per la parallelizzazione dei modelli SageMaker fornisce i punti di riferimento indicati di seguito e basati su esperimenti con il modello Llama 2 convertito nel modello di trasformatore SMP utilizzando torch.sagemaker.transform e addestrati su una o più istanze di ml.p4d.24xlarge con lunghezza della sequenza pari a 4096 e precisione mista (FP16 o BF16).
| Modello | Dimensione del modello (il numero di parametri del modello) | Il numero di istanze | Grado di parallelizzazione dei dati sottoposti a sharding | Grado di parallelizzazione tensoriale | Checkpoint di attivazione | Offload di attivazione | Dimensione batch |
|---|---|---|---|---|---|---|---|
| Llama 2 | 7 MLD | 1 | 8 | 1 | TRUE | FALSE | 4 |
| 70 MLD | 32 | 256 | 1 | TRUE | FALSE | 2 | |
| 175 MLD | 64 | 128 | 4 | TRUE | TRUE | 6 |
È 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 parallelizzazione tensoriale.
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
-
Nel pannello di navigazione a sinistra scegli Addestramento.
-
Scegli 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. 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 job di addestramento SageMaker con parallelizzazione dei modelli, assicurati di disporre nel tuo ruolo IAM delle autorizzazioni giuste, come:
-
Per utilizzare FSx for Lustre
, aggiungi AmazonFSxFullAccess. -
Per utilizzare Amazon S3 come canale dati, aggiungi
AmazonS3FullAccess. -
Per utilizzare Docker, creare il tuo container e inviarlo ad Amazon ECR, aggiungi
AmazonEC2ContainerRegistryFullAccess. -
Per avere accesso completo all’utilizzo dell’intera suite di funzionalità di SageMaker AI, aggiungi
AmazonSageMakerFullAccess.