Formazione distribuita in Amazon SageMaker - Amazon SageMaker

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à.

Formazione distribuita in Amazon SageMaker

SageMaker fornisce librerie di formazione distribuite e supporta varie opzioni di formazione distribuite per attività di deep learning come la visione artificiale (CV) e l'elaborazione del linguaggio naturale (NLP). Con le librerie SageMaker di formazione distribuite, puoi eseguire in parallelo dati personalizzati altamente scalabili ed economici e modellare lavori di formazione paralleli di deep learning. Puoi anche utilizzare altri framework e pacchetti di formazione distribuiti come PyTorch DistributedDataParallel (DDP)torchrun, MPI () e parameter server. mpirun In tutta la documentazione, le istruzioni e gli esempi si concentrano su come configurare le opzioni di formazione distribuite per le attività di deep learning utilizzando SageMaker Python SDK.

Suggerimento

Per conoscere le migliori pratiche per il calcolo dei processi di addestramento distribuito ed elaborazione del machine learning (ML) in generale, consulta Elaborazione distribuita con SageMaker best practice.

Prima di iniziare

SageMaker La formazione supporta la formazione distribuita su una singola istanza e su più istanze, in modo da poter eseguire corsi di formazione di qualsiasi dimensione su larga scala. Ti consigliamo di utilizzare le classi di stima del framework come PyTorche TensorFlownell'SDK SageMaker Python, che sono i lanciatori di lavori di formazione con varie opzioni di formazione distribuite. Quando crei un oggetto estimatore, l'oggetto configura un'infrastruttura di formazione distribuita, esegue l'CreateTrainingJobAPI nel backend, trova la regione in cui è in esecuzione la sessione corrente e richiama uno dei contenitori di AWS deep learning predefiniti preconfezionati con una serie di librerie tra cui framework di deep learning, framework di formazione distribuiti e il driver EFA. Se desideri montare un file system FSx sulle istanze di addestramento, devi trasmettere l'ID della sottorete VPC e del gruppo di sicurezza allo strumento di valutazione. Prima di eseguire il processo di formazione distribuito, leggi le seguenti linee guida generali sulla configurazione di base dell' SageMakerinfrastruttura.

Zone di disponibilità e backplane di rete

Quando si utilizzano più istanze (chiamate anche nodi), è importante comprendere la rete che collega le istanze, come queste leggono i dati di addestramento e come condividono le informazioni tra di loro. Ad esempio, quando esegui un processo di addestramento distribuito di parallelismo dei dati, diversi fattori, come la comunicazione tra i nodi di un cluster di calcolo per l'esecuzione dell'operazione AllReduce e il trasferimento dei dati tra i nodi e l’archiviazione di dati in Amazon Simple Storage Service o Amazon FSx per Lustre, svolgono un ruolo cruciale per ottenere un uso ottimale delle risorse di elaborazione e una maggiore velocità di addestramento. Per ridurre il sovraccarico di comunicazione, assicurati di configurare le istanze, la sottorete VPC e lo storage dei dati nella stessa zona di disponibilità. Regione AWS

Istanze GPU con rete più veloce e archiviazione ad alto throughput

Dal punto di vista tecnico, è possibile utilizzare qualsiasi istanza per l'addestramento distribuito. Nei casi in cui è necessario eseguire lavori di formazione distribuiti su più nodi per addestrare modelli di grandi dimensioni, come modelli di linguaggio di grandi dimensioni (LLM) e modelli di diffusione, che richiedono una commutazione tra nodi più rapida, consigliamo le istanze GPU abilitate EFA supportate da. SageMaker In particolare, per ottenere il massimo delle prestazioni di formazione distribuita, consigliamo le istanze P4d e P4de dotate di GPU NVIDIA SageMaker A100. Queste sono inoltre dotate di archiviazione di istanze locale ad alto throughput e bassa latenza e di una rete intra-nodo più veloce. Per l’archiviazione di dati, consigliamo Amazon FSx per Lustre, che offre un throughput elevato per l'archiviazione di set di dati di addestramento e checkpoint dei modelli.

Inizia con la formazione distribuita in Amazon SageMaker

Se conosci già l'addestramento distribuito, per iniziare scegli una delle seguenti opzioni corrispondente alla tua strategia o al tuo framework preferito. Se vuoi saperne di più sull'addestramento distribuito in generale, consulta Concetti di addestramento distribuito di base.

Le librerie di formazione SageMaker distribuite sono ottimizzate per l'ambiente di SageMaker formazione, aiutano ad adattare i lavori di formazione distribuiti e migliorano la velocità e la produttività della formazione. SageMaker Le librerie offrono strategie di addestramento con parallelismo dei dati e parallelismo dei modelli. Combinano tecnologie software e hardware per migliorare le comunicazioni tra GPU e tra nodi ed estendono le funzionalità SageMaker di formazione con opzioni integrate che richiedono modifiche minime al codice degli script di formazione. 

Utilizza la libreria SageMaker Distributed Data Parallelism (SMDDP)

La libreria SMDDP migliora la comunicazione tra i nodi con implementazioni AllReduce e operazioni di comunicazione AllGather collettiva ottimizzate per l'infrastruttura di AWS rete e la topologia delle istanze Amazon SageMaker ML. È possibile utilizzare la libreria SMDDP come backend di pacchetti di formazione distribuiti PyTorch basati su: distributed PyTorch data parallel (DDP), PyTorch Fully Sharded DataParallelism (FSDP) e Megatron-. DeepSpeedDeepSpeed Il seguente esempio di codice mostra come impostare uno stimatore per l'avvio di un processo di formazione distribuito su due istanzePyTorch. ml.p4d.24xlarge

from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=2, instance_type="ml.p4d.24xlarge", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather )

Per informazioni su come preparare lo script di formazione e avviare un processo di formazione distribuito in parallelo ai dati SageMaker, consulta. Esegui corsi di formazione distribuiti con la libreria di parallelismo dei dati SageMaker distribuiti

Usa la SageMaker Model Parallelism Library (SMP)

SageMaker fornisce la libreria SMP e supporta varie tecniche di formazione distribuite, come il parallelismo dei dati condivisi, il pipelining, il parallelismo tensoriale, lo sharding dello stato dell'ottimizzatore e altro ancora. Per saperne di più su ciò che offre la libreria SMP, consulta Caratteristiche principali della SageMaker Model Parallelism Library.

Per utilizzare la libreria di parallelismo dei modelli, configura SageMaker il parametro degli stimatori del framework. distribution SageMaker Gli stimatori di framework supportati sono e. PyTorchTensorFlow L'esempio di codice seguente mostra come costruire uno strumento di valutazione del framework per l'addestramento distribuito con la libreria di parallelismo dei modelli su due istanze ml.p4d.24xlarge.

from sagemaker.framework import Framework distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # enter parameter key-value pairs here } }, }, "mpi": { "enabled" : True, ... # enter parameter key-value pairs here } } estimator = Framework( ..., instance_count=2, instance_type="ml.p4d.24xlarge", distribution=distribution )

Per informazioni su come adattare lo script di formazione, configurare i parametri di distribuzione nella estimator classe e avviare un processo di formazione distribuito, consulta la libreria SageMaker di parallelismo dei modelli (vedi anche le API di formazione distribuita nella documentazione di SageMaker Python SDK).

Utilizzo di framework di addestramento distribuito open source

SageMaker supporta anche le seguenti opzioni operative mpirun e nel backend. torchrun

  • Per utilizzare PyTorch DistributedDataParallel (DDP) nel SageMaker mpirun backend, aggiungilo distribution={"pytorchddp": {"enabled": True}} al tuo estimatore. PyTorch Per ulteriori informazioni, consulta anche l'distributionargomento di PyTorch Distributed Training ed SageMaker PyTorch Estimator nella documentazione di SageMaker Python SDK.

    Nota

    Questa opzione è disponibile per PyTorch 1.12.0 e versioni successive.

    from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=2, instance_type="ml.p4d.24xlarge", distribution={"pytorchddp": {"enabled": True}} # runs mpirun in the backend )
  • SageMaker supporta il PyTorch torchrunlauncher per la formazione distribuita su istanze Amazon EC2 basate su GPU, come P3 e P4, oltre a Trn1 alimentato dal dispositivo Trainium.AWS

    Per utilizzare PyTorch DistributedDataParallel (DDP) nel backend, aggiungilo allo stimatore. SageMaker torchrun distribution={"torch_distributed": {"enabled": True}} PyTorch

    Nota

    Questa opzione è disponibile per PyTorch 1.13.0 e versioni successive.

    Il seguente frammento di codice mostra un esempio di costruzione di uno SageMaker PyTorch stimatore per eseguire l'addestramento distribuito su due ml.p4d.24xlarge istanze con l'opzione di distribuzione. torch_distributed

    from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=2, instance_type="ml.p4d.24xlarge", distribution={"torch_distributed": {"enabled": True}} # runs torchrun in the backend )

    Per ulteriori informazioni, consulta l'distributionargomento di Distributed PyTorch Training and SageMaker PyTorch Estimator nella documentazione di SageMaker Python SDK.

    Note per l'addestramento distribuito su Trn1

    Un'istanza Trn1 è composta da un massimo di 16 dispositivi Trainium e ogni dispositivo Trainium è composto da due. NeuronCores Per le specifiche dei dispositivi Trainium, consulta AWS Trainium Architecture nella documentazione di Neuron.AWS

    Per eseguire l'addestramento sulle istanze basate su Trainium, è sufficiente specificare il codice dell'istanza Trn1, in stringaml.trn1.*, all'argomento della classe estimator. instance_type SageMaker PyTorch Per trovare i tipi di istanza Trn1 disponibili, consulta AWS Trn1 Architecture nella documentazione di AWS Neuron.

    Nota

    SageMaker La formazione sulle istanze Amazon EC2 Trn1 è attualmente disponibile solo per il PyTorch framework nei AWS Deep Learning Containers for Neuron a partire dalla versione 1.11.0. PyTorch Per trovare un elenco completo delle versioni supportate di PyTorch Neuron, consulta Neuron Containers nel repository AWS Deep Learning Containers GitHub .

    Quando avvii un processo di formazione su istanze Trn1 utilizzando l'SDK SageMaker Python, preleva ed esegue SageMaker automaticamente il contenitore giusto da Neuron Containers fornito da Deep Learning Containers. AWS I Neuron Containers sono preconfezionati con impostazioni e dipendenze dell'ambiente di formazione per adattare più facilmente il lavoro di formazione alla piattaforma di formazione e alle istanze SageMaker Amazon EC2 Trn1.

    Nota

    Per eseguire il processo di PyTorch formazione su istanze Trn1 con SageMaker, è necessario modificare lo script di formazione per inizializzare i gruppi di processi con il backend e utilizzare /XLA. xla PyTorch Per supportare il processo di adozione di XLA, l'SDK Neuron fornisce AWS PyTorch Neuron che utilizza XLA per effettuare la conversione delle operazioni in istruzioni Trainium. PyTorch Per informazioni su come modificare lo script di allenamento, consulta la Guida per gli sviluppatori per l'allenamento con PyTorch Neuron () nella documentazione di Neuron. torch-neuronxAWS

    Per ulteriori informazioni, consulta Distributed Training with PyTorch Neuron sulle istanze Trn1 e l'argomento di SageMaker PyTorch Estimator distribution nella documentazione di Python SDK. SageMaker

  • Per utilizzare MPI in, aggiungilo al tuo estimatore. SageMaker distribution={"mpi": {"enabled": True}} L'opzione di distribuzione MPI è disponibile per i seguenti framework: MXNet e. PyTorch TensorFlow

  • Per utilizzare un server di parametri in SageMaker, aggiungilo distribution={"parameter_server": {"enabled": True}} al tuo estimatore. L'opzione del server dei parametri è disponibile per i seguenti framework: MXNet e. PyTorch TensorFlow

    Suggerimento

    Per ulteriori informazioni sull'utilizzo delle opzioni MPI e del server dei parametri per framework, utilizzate i seguenti collegamenti alla documentazione di SageMaker Python SDK.

Concetti di addestramento distribuito di base

SageMakerLe librerie di formazione distribuite utilizzano i seguenti termini e funzionalità di formazione distribuiti.

Set di dati e batch

  • Set di dati di addestramento: tutti i dati utilizzati per addestrare il modello.

  • Dimensione globale del batch: il numero di record selezionati dal set di dati di addestramento in ogni iterazione da inviare alle GPU del cluster. Questo è il numero di record su cui viene calcolato il gradiente a ogni iterazione. Se viene utilizzato il parallelismo dei dati, esso è uguale al numero totale di repliche del modello moltiplicato per la dimensione del batch per replica: global batch size = (the number of model replicas) * (per-replica batch size). Un singolo batch di dimensioni globali viene spesso definito mini-batch nella letteratura sul machine learning.

  • Dimensione del batch per replica: quando si utilizza il parallelismo dei dati, si tratta del numero di record inviati a ciascuna replica del modello. Ogni replica del modello esegue un passaggio avanti e indietro con questo batch per calcolare gli aggiornamenti del peso. Gli aggiornamenti di peso risultanti vengono sincronizzati (ne viene calcolata la media) su tutte le repliche prima dell'elaborazione del set successivo di batch per replica.

  • Microbatch: un sottoinsieme del mini-batch o, se si utilizza un modello ibrido e il parallelismo dei dati, si tratta di un sottoinsieme del batch delle dimensioni di una singola replica. Quando si utilizza SageMaker la libreria di parallelismo dei modelli distribuiti, ogni microbatch viene inserito nella pipeline di addestramento one-by-one e segue un programma di esecuzione definito dal runtime della libreria.

Addestramento

  • Epoca: un ciclo di addestramento sull'intero set di dati. È comune avere più iterazioni per epoca. Il numero di epoche utilizzate durante l'addestramento dipende dal modello e dal caso d'uso.

  • Iterazione: un singolo passaggio in avanti e all'indietro eseguito utilizzando un batch globale di dati di addestramento delle dimensioni di un batch (un mini-batch). Il numero di iterazioni eseguite durante l'addestramento è determinato dalla dimensione globale del batch e dal numero di epoche utilizzate per l'addestramento. Ad esempio, se un set di dati include 5.000 campioni e si utilizza un batch globale di 500, saranno necessarie 10 iterazioni per completare una singola epoca.

  • Tasso di apprendimento: variabile che influenza la quantità di pesi modificati in risposta all'errore calcolato del modello. Il tasso di apprendimento svolge un ruolo importante nella capacità del modello di convergere, nonché nella velocità e nell'ottimalità della convergenza.

Istanze e GPU

  • Istanze: un'istanza di calcolo per l'apprendimento automatico AWS . Vengono anche chiamate nodi.

  • Dimensione del cluster: quando si utilizza SageMaker la libreria di formazione distribuita, si tratta del numero di istanze moltiplicato per il numero di GPU in ciascuna istanza. Ad esempio, se si utilizzano due istanze ml.p3.8xlarge in un processo di addestramento, con 4 GPU ciascuna, la dimensione del cluster è 8. Sebbene l'aumento delle dimensioni del cluster possa portare a tempi di addestramento più rapidi, la comunicazione tra le istanze deve essere ottimizzata; in caso contrario, la comunicazione tra i nodi può aumentare il sovraccarico di lavoro e comportare tempi di addestramento più lunghi. La libreria di formazione SageMaker distribuita è progettata per ottimizzare la comunicazione tra le istanze di calcolo ML di Amazon EC2, con conseguente maggiore utilizzo dei dispositivi e tempi di formazione più rapidi.

Soluzioni di addestramento distribuito

  • Parallelismo dei dati: una strategia di addestramento distribuito in cui un set di dati di addestramento viene suddiviso su più GPU in un cluster di elaborazione, composto da più istanze ML di Amazon EC2. Ogni GPU contiene una replica del modello, riceve diversi batch di dati di addestramento, esegue un passaggio avanti e indietro e condivide gli aggiornamenti di peso con gli altri nodi per la sincronizzazione prima di passare al batch successivo e, infine, a un'altra epoca.

  • Parallelismo dei modelli: una strategia di addestramento distribuito in cui il modello è partizionato su più GPU in un cluster di elaborazione, composto da più istanze ML di Amazon EC2. Il modello potrebbe essere complesso e avere un gran numero di livelli e pesi nascosti, il che lo rende incapace di adattarsi alla memoria di una singola istanza. Ciascuna GPU contiene un sottoinsieme del modello, attraverso il quale i flussi di dati e le trasformazioni vengono condivisi e compilati. L'efficienza del parallelismo dei modelli, in termini di utilizzo della GPU e tempi di addestramento, dipende in larga misura dal modo in cui il modello è partizionato e dalla pianificazione di esecuzione utilizzata per eseguire i passaggi avanti e indietro.

  • Pianificazione dell'esecuzione della pipeline (pipelining): la pianificazione di esecuzione della pipeline determina l'ordine in cui vengono eseguiti i calcoli (microbatch) e i dati vengono elaborati tra i dispositivi durante l'addestramento del modello. Il pipelining è una tecnica per ottenere una vera parallelizzazione nel parallelismo dei modelli e superare la perdita di prestazioni dovuta al calcolo sequenziale facendo in modo che le GPU eseguano il calcolo simultaneo su diversi campioni di dati. Per ulteriori informazioni, consulta Pipeline Execution Schedule.

Concetti avanzati

I professionisti del Machine Learning (ML) di solito devono affrontare due sfide di scalabilità quando addestrano i modelli: scalare le dimensioni del modello e scalare i dati di addestramento. Sebbene le dimensioni e la complessità del modello possano portare a una maggiore precisione, esiste un limite alle dimensioni del modello che è possibile inserire in una singola CPU o GPU. Inoltre, la scalabilità delle dimensioni del modello può comportare un numero maggiore di calcoli e tempi di addestramento più lunghi.

Non tutti i modelli gestiscono la scalabilità dei dati di addestramento allo stesso modo, poiché per l'addestramento devono inserire tutti i dati di addestramento in memoria. Si scalano solo verticalmente e per tipi di istanze sempre più grandi. Nella maggior parte dei casi, la scalabilità dei dati di addestramento comporta tempi di addestramento più lunghi.

Deep Learning (DL) è una famiglia specifica di algoritmi ML composta da diversi livelli di reti neurali artificiali. Il metodo di addestramento più comune è la discesa stocastica del gradiente (SGD) in mini-batch. Nella SGD in mini-batch, il modello viene addestrato effettuando piccole modifiche iterative dei suoi coefficienti nella direzione che ne riduce l'errore. Tali iterazioni vengono condotte su sottocampioni di uguali dimensioni del set di dati di addestramento chiamati mini-batch. Per ogni mini-batch, il modello viene eseguito in ogni record del mini-batch, ne viene misurato l'errore e viene stimato il gradiente dell'errore. Quindi, il gradiente medio viene misurato su tutti i record del mini-batch e fornisce una direzione di aggiornamento per ogni coefficiente del modello. Un passaggio completo sul set di dati di addestramento viene chiamato epoca. Gli addestramenti del modello consistono in genere in dozzine o centinaia di epoche. SGD in mini-Batch presenta diversi vantaggi: in primo luogo, il suo design iterativo rende il tempo di addestramento teoricamente lineare rispetto alla dimensione del set di dati. In secondo luogo, in un determinato mini-batch ogni record viene elaborato individualmente dal modello senza ricorrere a comunicazioni tra record diversi dalla media del gradiente finale. L'elaborazione di un mini-batch è quindi particolarmente adatta per la parallelizzazione e la distribuzione. 

La parallelizzazione dell'addestramento SGD distribuendo i record di un mini-batch su diversi dispositivi di elaborazione è chiamata addestramento distribuito parallelo dei dati ed è il paradigma di distribuzione DL più comunemente usato. L'addestramento parallelo dei dati è una strategia di distribuzione pertinente per scalare le dimensioni dei mini-batch ed elaborare ogni mini-batch più velocemente. Tuttavia, l'addestramento parallelo dei dati comporta l'ulteriore complessità di dover calcolare la media del gradiente in mini-batch con i gradienti provenienti da tutti i worker e comunicarla a tutti i worker, una fase chiamata allreduce che può rappresentare un sovraccarico crescente, poiché il cluster di addestramento viene ridimensionato, e che può anche penalizzare drasticamente i tempi di addestramento se implementata in modo improprio o con sottrazioni hardware improprie. 

L'SGD parallelo dei dati richiede comunque che gli sviluppatori siano in grado di inserire almeno il modello e un singolo record in un dispositivo di elaborazione, come una singola CPU o GPU. Quando si addestrano modelli molto grandi come trasformatori di grandi dimensioni in elaborazione del linguaggio naturale (NLP) o modelli di segmentazione su immagini ad alta risoluzione, potrebbero verificarsi situazioni in cui ciò non è possibile. Un modo alternativo per suddividere il carico di lavoro consiste nel partizionare il modello su più dispositivi di elaborazione, un approccio chiamato addestramento distribuito parallelo al modello.

Strategie

L'addestramento distribuito è generalmente suddiviso in due approcci: parallelo ai dati e parallelo al modello. L'approccio parallelo ai dati è quello più comune all'addestramento distribuito: disponi di molti dati, li raggruppi in batch e invii blocchi di dati a più CPU o GPU (nodi) affinché vengano elaborati dalla rete neurale o dall'algoritmo ML, quindi combini i risultati. La rete neurale è la stessa su ogni nodo. L'approccio parallelo al modello viene utilizzato con modelli di grandi dimensioni che non entrano nella memoria di un nodo in un unico pezzo; suddivide il modello e posiziona parti diverse su nodi diversi. In questa situazione, è necessario inviare i batch di dati a ciascun nodo in modo che essi vengano elaborati su tutte le parti del modello.

I termini rete e modello sono spesso usati in modo intercambiabile: un modello di grandi dimensioni è in realtà una grande rete con molti livelli e parametri. L'addestramento con una rete di grandi dimensioni produce un modello di grandi dimensioni, mentre il caricamento del modello sulla rete con tutti i parametri pre-addestrati e i relativi pesi carica in memoria un modello di grandi dimensioni. Quando si scompone un modello per dividerlo tra i nodi, si scompone anche la rete sottostante. Una rete è composta da livelli e, per suddividere la rete, si inseriscono livelli su diversi dispositivi di elaborazione.

Un problema comune della suddivisione ingenua dei livelli tra i dispositivi è il grave sottoutilizzo della GPU. L'addestramento è intrinsecamente sequenziale sia nei passaggi in avanti che in quelli all'indietro e, in un dato momento, solo una GPU può eseguire il calcolo attivo, mentre le altre GPU attendono l'invio delle attivazioni. Le moderne librerie di parallelismo dei modelli risolvono questo problema utilizzando pianificazioni di esecuzione della pipeline per migliorare l'utilizzo dei dispositivi. Tuttavia, solo la libreria parallela SageMaker di modelli distribuiti di Amazon include la suddivisione automatica del modello. Le due funzionalità principali della libreria, la suddivisione automatica dei modelli e la pianificazione dell'esecuzione della pipeline, semplificano il processo di implementazione del parallelismo dei modelli prendendo decisioni automatizzate che determinano un utilizzo efficiente dei dispositivi.

Addestramento con approccio parallelo ai dati e parallelo al modello

Se ti stai addestrando con un set di dati di grandi dimensioni, inizia con un approccio parallelo ai dati. Se esaurisci la memoria durante l'addestramento, potrebbe essere opportuno passare a un approccio parallelo al modello oppure provare il parallelismo ibrido tra modelli e dati. Inoltre, puoi anche provare quanto segue per migliorare le prestazioni con l'approccio parallelo ai dati:

  • Modificare gli iperparametri del modello.

  • Ridurre le dimensioni del batch.

  • Continua a ridurre le dimensioni del batch finché non si adattano. Se riduci le dimensioni del batch a 1 e continui a esaurire la memoria, dovresti provare l'addestramento parallelo al modello.

Prova la compressione a gradiente (FP16, INT8):

Prova a ridurre la dimensione di input:

  • Riduci la lunghezza della sequenza NLP se aumenti il collegamento della sequenza, se devi ridurre la dimensione del batch o se devi regolare le GPU per distribuire il batch.

  • Riduzione della risoluzione delle immagini.

Controlla se utilizzi la normalizzazione in batch, in quanto ciò può influire sulla convergenza. Quando utilizzi l'addestramento distribuito, il batch viene suddiviso tra GPU e l'effetto di una dimensione del batch molto inferiore può comportare un tasso di errore più elevato, interrompendo così la convergenza del modello. Ad esempio, se hai prototipato la tua rete su una singola GPU con dimensioni batch pari a 64 e quindi scalata fino a utilizzare quattro p3dn.24xlarge, ora hai 32 GPU e la dimensione del batch per GPU scende da 64 a 2. Ciò probabilmente interromperà la convergenza osservata con un singolo nodo.

Inizia con l'addestramento parallelo al modello quando:

  • Il tuo modello non si adatta a un singolo dispositivo.

  • A causa delle dimensioni del modello, la scelta di batch di dimensioni maggiori è limitata, ad esempio se i pesi dei modelli occupano la maggior parte della memoria della GPU e sei costretto a scegliere un batch di dimensioni inferiori e non ottimali. 

Per ulteriori informazioni sulle librerie SageMaker distribuite, consulta quanto segue:

Ottimizzazione dell'addestramento distribuito

Personalizza gli iperparametri in base al tuo caso d'uso e ai tuoi dati per ottenere la massima efficienza di scalabilità. Nella discussione seguente, evidenziamo alcune delle variabili di formazione più importanti e forniamo riferimenti alle state-of-the-art implementazioni in modo da poter saperne di più sulle opzioni a disposizione. Inoltre, ti consigliamo di fare riferimento alla documentazione di addestramento distribuita del tuo framework preferito.

Dimensione batch

SageMaker i toolkit distribuiti generalmente consentono di allenarsi su lotti più grandi. Ad esempio, se un modello si adatta a un singolo dispositivo, ma può essere addestrato solo con batch di piccole dimensioni, l'utilizzo dell'addestramento con approccio parallelo al modello o parallelo ai dati consente di sperimentare batch di dimensioni maggiori.

Tieni presente che la dimensione del batch influenza direttamente la precisione del modello controllando la quantità di disturbo nell'aggiornamento del modello a ogni iterazione. L'aumento delle dimensioni del batch riduce la quantità di disturbo nella stima del gradiente, il che può essere utile quando si passa da batch di dimensioni molto piccole, ma può comportare una riduzione della precisione del modello man mano che la dimensione del batch aumenta fino a valori elevati. 

Suggerimento

Modifica gli iperparametri per assicurarti che il modello raggiunga una convergenza soddisfacente man mano che aumenti le dimensioni del batch.

Sono state sviluppate diverse tecniche per mantenere una buona convergenza dei modelli quando si aumenta il numero di batch.

Dimensioni del mini-batch

In SGD, le dimensioni del mini-batch quantificano la quantità di disturbo presente nella stima del gradiente. Un mini-batch piccolo produce un gradiente di mini-batch con molto disturbo, che non è rappresentativo del gradiente reale sul set di dati. Un mini-batch grande produce un gradiente in mini-batch simile al gradiente reale sul set di dati e potenzialmente con un disturbo insufficiente, che probabilmente rimarrà bloccato in minimi irrilevanti.

Per ulteriori informazioni su queste tecniche, consulta i seguenti documenti:

Scenari

Le sezioni seguenti illustrano gli scenari in cui potresti voler ampliare la formazione e come farlo utilizzando AWS le risorse.

Scalabilità da una singola GPU a molte GPU

La quantità di dati o le dimensioni del modello utilizzato nel machine learning possono creare situazioni in cui il tempo necessario per addestrare un modello è più lungo di quanto si sia disposti ad aspettare. A volte, l'addestramento non funziona affatto perché il modello o i dati di addestramento sono troppo grandi. Una soluzione consiste nell'aumentare il numero di GPU utilizzate per l'addestramento. In un'istanza con più GPU, ad esempio un'istanza come p3.16xlarge con otto GPU, i dati e l'elaborazione vengono suddivisi tra le otto GPU. Quando utilizzi librerie di addestramento distribuito, può verificarsi un'accelerazione quasi lineare del tempo necessario per addestrare il modello. Richiede poco più di 1/8 del tempo impiegato su p3.2xlarge con una sola GPU.

Tipo di istanza GPU
p3.2xlarge 1
p3.8xlarge 4
p3.16xlarge 8
p3dn.24xlarge 8
Nota

I tipi di istanze ml utilizzati dalla SageMaker formazione hanno lo stesso numero di GPU dei tipi di istanze p3 corrispondenti. Ad esempio, ml.p3.8xlarge ha lo stesso numero di GPU di p3.8xlarge - 4.

Scalabilità da una singola istanza a più istanze

Se desideri ampliare ulteriormente il tuo addestramento, puoi utilizzare più istanze. Tuttavia, dovresti scegliere un tipo di istanza più grande prima di aggiungere altre istanze. Consulta la tabella precedente per vedere quante GPU ci sono in ogni tipo di istanza p3.

Se hai effettuato il passaggio da una singola GPU su un p3.2xlarge a quattro GPU su un p3.8xlarge, ma decidi che hai bisogno di maggiore potenza di elaborazione, potresti ottenere prestazioni migliori e costi inferiori se scegli un p3.16xlarge prima di provare ad aumentare il numero di istanze. A seconda delle librerie utilizzate, se mantieni l'addestramento su una singola istanza, le prestazioni sono migliori e i costi sono inferiori rispetto a uno scenario in cui si utilizzano più istanze.

Quando sei pronto per ridimensionare il numero di istanze, puoi farlo con la funzione SageMaker Python estimator SDK impostando il tuo. instance_count Ad esempio, puoi impostare instance_type = p3.16xlarge e instance_count = 2. Invece delle otto GPU su un singolo p3.16xlarge, hai 16 GPU su due istanze identiche. Il grafico seguente mostra la scalabilità e il throughput a partire da otto GPU su una singola istanza e aumentando fino a 64 istanze per un totale di 256 GPU.

Chart showing how throughput increases and time to train decreases with more GPUs.

Script di addestramento personalizzati

Sebbene SageMaker semplifichi l'implementazione e la scalabilità del numero di istanze e GPU, a seconda del framework scelto, la gestione dei dati e dei risultati può essere molto impegnativa, motivo per cui vengono spesso utilizzate librerie di supporto esterne. Questa forma più elementare di formazione distribuita richiede la modifica dello script di formazione per gestire la distribuzione dei dati.

SageMaker supporta anche Horovod e le implementazioni di formazione distribuita native di ogni principale framework di deep learning. Se scegli di utilizzare esempi tratti da questi framework, puoi seguire SageMaker la guida ai contenitori per Deep Learning Containers e vari taccuini di esempio che dimostrano le implementazioni.