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 (mpirun) e parameter server. 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 PythonSDK.

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 TensorFlowin SageMaker SDK Python, che sono i training job launcher con varie opzioni di formazione distribuite. Quando crei un oggetto estimatore, l'oggetto configura un'infrastruttura di formazione distribuita, la esegue CreateTrainingJob API 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 EFAdriver. Se desideri montare un FSx file system sulle istanze di addestramento, devi passare l'ID della VPC sottorete e del gruppo di sicurezza allo estimatore. Prima di eseguire il processo di formazione distribuito SageMaker, leggete le seguenti linee guida generali sulla configurazione di base dell'infrastruttura.

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 formazione distribuito in parallelo ai dati, diversi fattori, come la comunicazione tra i nodi di un cluster di calcolo per l'esecuzione dell'AllReduceoperazione e il trasferimento dei dati tra i nodi e l'archiviazione dei dati in Amazon Simple Storage Service o Amazon FSx for Lustre, svolgono un ruolo cruciale per ottenere un uso ottimale delle risorse di elaborazione e una maggiore velocità di formazione. Per ridurre il sovraccarico di comunicazione, assicurati di configurare le istanze, la VPC sottorete e l'archiviazione dei dati nella stessa Regione AWS zona di disponibilità.

GPUistanze con rete più veloce e storage 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 (LLMs) e modelli di diffusione, che richiedono una commutazione tra nodi più rapida, consigliamo le istanze abilitate supportate da. EFA GPU SageMaker In particolare, per ottenere il processo di formazione distribuito più efficiente in SageMaker, consigliamo le istanze P4d e P4de dotate di A100. NVIDIA GPUs 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 dei dati, consigliamo Amazon FSx for 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 i 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 SMDDP libreria 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 SMDDPlibreria come backend di pacchetti di formazione distribuiti PyTorch basati su dati PyTorch distribuiti: distributed data parallel (DDP), PyTorch Fully Sharded Data Parallelism (FSDP) e Megatron DeepSpeed-. DeepSpeed Il seguente esempio di codice mostra come impostare uno PyTorch stimatore per l'avvio di un processo di formazione distribuito su due istanze. 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 libreria di parallelismo dei SageMaker modelli () SMP

SageMaker fornisce la SMP libreria 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 ulteriori informazioni su ciò che offre la biblioteca, consulta. SMP Caratteristiche principali della SageMaker Model Parallelism Library

Per utilizzare SageMaker la libreria di parallelismo dei modelli, configura il distribution parametro degli estimatori del SageMaker framework. 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 sapere come adattare lo script di addestramento, 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 Distributed Training APIs nella documentazione di SageMaker SDKPython).

Utilizzo di framework di addestramento distribuito open source

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

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

    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 EC2 istanze Amazon GPU basate, come P3 e P4, oltre a Trn1 alimentato dal dispositivo Trainium.AWS

    Per utilizzare PyTorch DistributedDataParallel (DDP) nel backend, aggiungilo SageMaker allo estimatoretorchrun. 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 SDKPython.

    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 PyTorch Neuron a partire dalla versione 1.11.0. 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 SageMaker PythonSDK, 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 SageMaker piattaforma di formazione e alle istanze Amazon Trn1. EC2

    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 PyTorch XLA Per supportare il processo di XLA adozione, AWS Neuron SDK fornisce 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 (torch-neuronx) nella documentazione di Neuron.AWS

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

  • Per utilizzarlo, aggiungilo al tuo MPI estimatore SageMaker. distribution={"mpi": {"enabled": True}} L'opzione di MPI distribuzione è disponibile per i seguenti framework:MXNet,, PyTorch e. 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,, PyTorch e. TensorFlow

    Suggerimento

    Per ulteriori informazioni sull'utilizzo delle opzioni MPI e dei parametri del server per framework, utilizzare 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 al GPUs 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 di 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 GPUs

  • Istanze: un'istanza di calcolo AWS per l'apprendimento automatico. 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 istanze presenti in ciascuna istanza. GPUs Ad esempio, se si utilizzano due istanze ml.p3.8xlarge in un processo di formazione, da 4 istanze ciascuna, la dimensione del cluster è 8. GPUs 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 Amazon EC2 ML, portando a un maggiore utilizzo dei dispositivi e a tempi di formazione più rapidi.

Soluzioni di addestramento distribuito

  • Parallelismo dei dati: una strategia di formazione distribuita in cui un set di dati di addestramento è suddiviso GPUs in più parti in un cluster di elaborazione, composto da più istanze Amazon ML. EC2 Ciascuno GPU contiene una replica del modello, riceve diversi batch di dati di addestramento, esegue un passaggio avanti e indietro e condivide gli aggiornamenti del 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 formazione distribuita in cui il modello è partizionato su più unità GPUs in un cluster di elaborazione, composto da più istanze Amazon ML. 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 GPU utilizzo e tempi di addestramento, dipende in larga misura dal modo in cui il modello è partizionato e dal programma di esecuzione utilizzato 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 grazie all'elaborazione simultanea su diversi campioni di dati. GPUs 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 un unico modello. CPU 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 allenamento più comune è il mini-batch Stochastic Gradient Descent (). SGD Nel mini-batchSGD, 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. Il mini-batch SGD 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 della SGD formazione mediante la distribuzione dei record di un mini-batch su diversi dispositivi di elaborazione è chiamata formazione distribuita parallela 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. 

Il data parallel richiede SGD comunque che gli sviluppatori siano in grado di inserire almeno il modello e un singolo record in un dispositivo informatico, ad esempio un singolo CPU oGPU. Quando si addestrano modelli molto grandi, come trasformatori di grandi dimensioni in Natural Language Processing (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. Il data parallel è l'approccio più comune all'addestramento distribuito: disponi di molti dati, li raggruppi in batch e invii blocchi di dati a più CPUs o GPUs (nodi) per essere 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. GPU L'addestramento è intrinsecamente sequenziale sia nei passaggi in avanti che in quelli indietro e, in un dato momento, solo uno GPU può eseguire il calcolo attivo, mentre gli altri 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 NLP lunghezza della sequenza se aumenti il collegamento alla sequenza, devi ridurre la dimensione del batch o GPUs aumentarla per distribuire il batch.

  • Riduzione della risoluzione delle immagini.

Controlla se utilizzi la normalizzazione in batch, in quanto ciò può influire sulla convergenza. Quando si utilizza la formazione distribuita, il batch viene suddiviso in più parti GPUs 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 un unico prototipo GPU con una dimensione del batch di 64 e poi scalato fino a utilizzare quattro p3dn.24xlarge, ora ne hai 32 GPUs e la dimensione per batch scende da 64 a 2. GPU 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, avete delle limitazioni nella scelta di lotti di dimensioni maggiori, ad esempio se i pesi dei modelli occupano la maggior parte della GPU memoria e siete costretti a scegliere lotti 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

NelSGD, la dimensione del mini-batch quantifica la quantità di rumore 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 le risorse. AWS

Scalabilità da uno GPU a molti GPUs

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 utenti GPUs utilizzati per la formazione. In un'istanza con più istanzeGPUs, ad esempio una p3.16xlarge che ne ha ottoGPUs, i dati e l'elaborazione vengono suddivisi tra le otto istanzeGPUs. 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 che impiegherebbe p3.2xlarge con una solaGPU.

Tipo di istanza GPUs
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 dei tipi GPUs di istanze p3 corrispondenti. Ad esempio, ml.p3.8xlarge ha lo stesso numero GPUs 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 ce ne GPUs sono in ogni tipo di istanza p3.

Se sei passato da una singola GPU su una p3.2xlarge a quattro GPUs su unap3.8xlarge, ma decidi che hai bisogno di maggiore potenza di elaborazione, potresti ottenere prestazioni migliori e costi inferiori se scegli una 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 SDK estimator Python impostando il tuo. instance_count Ad esempio, puoi impostare instance_type = p3.16xlarge e instance_count = 2. Invece di otto GPUs su una singola istanzap3.16xlarge, ne hai 16 GPUs su due istanze identiche. Il grafico seguente mostra la scalabilità e il throughput a partire da otto istanze GPUs su una singola istanza e aumentando fino a 64 istanze per un totale di 256. GPUs

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

Script di addestramento personalizzati

Pur SageMaker semplificando l'implementazione e la scalabilità del numero di istanze eGPUs, 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.