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à.
Elaborazione distribuita con SageMaker best practice
Questa pagina delle migliori pratiche presenta vari tipi di calcolo distribuito per i processi di machine learning (ML) in generale. Il termine calcolo distribuito in questa pagina comprende l’addestramento distribuito per le attività di machine learning e il calcolo parallelo per l'elaborazione dei dati, la generazione di dati, l'ingegneria delle funzionalità e l'apprendimento per rinforzo. In questa pagina, discutiamo delle sfide più comuni nell'informatica distribuita e delle opzioni disponibili in SageMaker Training and SageMaker Processing. Per ulteriori materiali di lettura sul calcolo distribuito, consulta Che cos’è il calcolo distribuito?
È possibile configurare le attività di machine learning in modo che vengano eseguite in modo distribuito su più nodi (istanze), acceleratori (GPU NVIDIA, chip AWS Trainium) e core vCPU. Eseguendo il calcolo distribuito, puoi raggiungere una serie di obiettivi, ad esempio velocizzare le operazioni di calcolo, gestire set di dati di grandi dimensioni o addestrare modelli ML di grandi dimensioni.
L'elenco seguente illustra le sfide più comuni che potresti affrontare quando esegui un processo di addestramento ML su larga scala.
-
Devi prendere decisioni su come distribuire il calcolo in base alle attività di machine learning, alle librerie software che desideri utilizzare e alle risorse di calcolo.
-
Non tutte le attività di machine learning sono semplici da distribuire. Inoltre, non tutte le librerie ML supportano il calcolo distribuito.
-
Il calcolo distribuito potrebbe non portare sempre a un aumento lineare dell'efficienza di calcolo. In particolare, dovrai identificare se l'I/O dei dati e la comunicazione tra GPU presentano rallentamenti o causano sovraccarichi.
-
Il calcolo distribuito potrebbe disturbare i processi numerici e modificare la precisione del modello. In particolare per quanto riguarda l'addestramento su reti neurali parallele ai dati, quando modifichi la dimensione globale del batch durante la scalabilità a un cluster di calcolo più grande, dovrai regolare anche il tasso di apprendimento di conseguenza.
SageMaker fornisce soluzioni di formazione distribuite per facilitare tali sfide per vari casi d'uso. Scegli una delle seguenti opzioni che meglio si adatta al tuo caso d'uso.
Argomenti
- Opzione 1: utilizza un algoritmo SageMaker integrato che supporti l'addestramento distribuito
- Opzione 2: esegui un codice ML personalizzato nell'ambiente di formazione o elaborazione SageMaker gestito
- Opzione 3: scrivi il tuo codice di addestramento distribuito personalizzato
- Opzione 4: avviare più processi in parallelo o in sequenza
Opzione 1: utilizza un algoritmo SageMaker integrato che supporti l'addestramento distribuito
SageMaker fornisce algoritmi integrati che è possibile utilizzare immediatamente tramite la SageMaker console o l'SDK SageMaker Python. Utilizzando gli algoritmi integrati, non dovrai dedicare tempo alla personalizzazione del codice, alla comprensione della scienza alla base dei modelli o all'esecuzione di Docker su istanze Amazon EC2 fornite.
Un sottoinsieme degli algoritmi SageMaker integrati supporta l'addestramento distribuito. Per verificare se l'algoritmo di tua scelta supporta l'addestramento distribuito, consulta la colonna Parallelizzabile nella tabella Informazioni comuni sugli algoritmi integrati. Alcuni algoritmi supportano l'addestramento distribuito su più istanze, mentre gli altri algoritmi parallelizzabili supportano la parallelizzazione su più GPU in una singola istanza, come indicato nella colonna Parallelizzabile.
Opzione 2: esegui un codice ML personalizzato nell'ambiente di formazione o elaborazione SageMaker gestito
SageMaker jobs può creare istanze di un ambiente di formazione distribuito per casi d'uso e framework specifici. Questo ambiente funge da ready-to-use lavagna, in cui è possibile importare ed eseguire il proprio codice ML.
Se il codice ML utilizza un framework di deep learning
Puoi avviare lavori di formazione distribuiti utilizzando i Deep Learning Containers (DLC)
-
Le SageMaker librerie di formazione distribuite
Le librerie di formazione SageMaker distribuite propongono codice AWS gestito per il parallelismo dei dati delle reti neurali e il parallelismo dei modelli. SageMaker la formazione distribuita include anche client di avvio integrati nell'SDK SageMaker Python e non è necessario creare codice di avvio parallelo. Per saperne di più, consulta la libreria SageMakerdi parallelismo dei dati e SageMaker la libreria di parallelismo dei modelli.
-
Librerie di addestramento distribuito open source
I framework open source hanno i propri meccanismi di distribuzione come DistributedDataParallelism (DDP
) in o moduli. PyTorch tf.distribute
TensorFlow Puoi scegliere di eseguire questi framework di formazione distribuiti nei contenitori del framework -managed. SageMaker Ad esempio, il codice di esempio per l'addestramento di MaskrCNN SageMaker mostra come utilizzare sia PyTorch DDP nelcontenitore del framework che Horovod nel contenitore del SageMaker PyTorch framework. SageMaker TensorFlow
SageMaker I contenitori ML sono inoltre dotati di MPI
Note per l'addestramento di reti neurali parallele ai dati su GPU
-
Se necessario, passa al parallelismo multi-GPU e multi-macchina
Spesso eseguiamo processi du addestramento sulle reti neurali su istanze con più CPU o più GPU. Ogni istanza basata su GPU di solito contiene più dispositivi GPU. Di conseguenza, il calcolo distribuito su GPU può avvenire all'interno di una singola istanza GPU con più GPU (addestramento multi-GPU a nodo singolo) o su più istanze GPU con più core GPU ciascuna (addestramento multi-GPU multinodo). L'addestramento su istanza singola è più semplice per scrivere codice ed eseguire il debug e il throughput da GPU a GPU tra nodi è in genere più veloce del throughput da GPU a GPU tra nodi. Pertanto, è consigliabile scalare innanzitutto il parallelismo dei dati verticalmente (utilizzare un'istanza GPU con più GPU) ed espanderlo a più istanze GPU, se necessario. Ciò potrebbe non applicarsi ai casi in cui il budget della CPU è elevato (ad esempio, un carico di lavoro enorme per la preelaborazione dei dati) e quando il rapporto CPU/GPU di un'istanza multi-GPU è troppo basso. In tutti i casi, è necessario sperimentare diverse combinazioni di tipi di istanze in base alle proprie esigenze di addestramento in machine learning e al proprio carico di lavoro.
-
Monitorare la qualità della convergenza
Quando si addestra una rete neurale con parallelismo dei dati, l'aumento del numero di GPU mantenendo costante la dimensione dei mini-batch per GPU comporta un aumento delle dimensioni del mini-batch globale per il processo MSGD (mini-batch stochastic gradient descent). È noto che le dimensioni dei mini-batch per MSGD influiscono sul rumore di discesa e sulla convergenza. Per ridimensionare correttamente preservando la precisione, è necessario regolare altri iperparametri come il tasso di apprendimento [Goyal et al.
(2017)]. -
Monitoraggio dei colli di bottiglia di I/O
Con l'aumento del numero di GPU, dovrebbe aumentare anche la velocità effettiva per l’archiviazione in lettura e scrittura. Assicurati che l'origine dati e la pipeline non diventino ostacoli.
-
Modificare lo script di addestramento in base alle esigenze
Gli script di addestramento scritti per l'addestramento a GPU singola devono essere modificati per l'addestramento multi-GPU a più nodi. Nella maggior parte delle librerie di parallelismo dei dati, è necessaria la modifica degli script per effettuare le seguenti operazioni.
-
Assegnare batch di dati di addestramento a ciascuna GPU.
-
Utilizzare un ottimizzatore in grado di gestire il calcolo del gradiente e gli aggiornamenti dei parametri su più GPU.
-
Assegnare la responsabilità del checkpoint a un host e a una GPU specifici.
-
Se il codice ML prevede l'elaborazione di dati tabulari
PySpark è un frontend Python di Apache Spark, un framework di calcolo distribuito open source. PySpark è stato ampiamente adottato per l'elaborazione distribuita di dati tabulari per carichi di lavoro di produzione su larga scala. Se desideri eseguire codice di elaborazione dati tabulare, prendi in considerazione l'utilizzo dei PySpark contenitori SageMaker Processing e l'esecuzione di processi paralleli. Puoi anche eseguire processi di elaborazione dati in parallelo utilizzando le API di SageMaker formazione ed SageMaker elaborazione in Amazon SageMaker Studio Classic, che è integrato con Amazon AWS Glue
Opzione 3: scrivi il tuo codice di addestramento distribuito personalizzato
Quando invii un lavoro di formazione o elaborazione a SageMaker, le API SageMaker Training and SageMaker Processing avviano istanze di calcolo Amazon EC2. Puoi personalizzare l'ambiente di formazione ed elaborazione nelle istanze eseguendo il tuo contenitore Docker o installando librerie aggiuntive nei contenitori gestiti. AWS Per ulteriori informazioni su Docker with SageMaker Training, consulta Adattamento del proprio contenitore Docker all'utilizzo SageMaker e Creazione di un contenitore con algoritmi e modelli personalizzati. Per ulteriori informazioni su Docker with SageMaker Processing, consulta Use Your Own Processing Code.
Ogni ambiente di lavoro di SageMaker formazione contiene un file di configurazione in /opt/ml/input/config/resourceconfig.json
e ogni ambiente di lavoro di SageMaker elaborazione contiene un file di configurazione simile in/opt/ml/config/resourceconfig.json
. Il codice può leggere questo file per trovare hostnames
e stabilire comunicazioni tra i nodi. Per ulteriori informazioni, incluso lo schema del file JSON, consulta Distributed Training Configuration e How Amazon SageMaker Processing Configures Your Processing Container. Puoi anche installare e utilizzare librerie di calcolo distribuite di terze parti come Ray
È inoltre possibile utilizzare SageMaker Training and SageMaker Processing per eseguire calcoli distribuiti personalizzati che non richiedono la comunicazione tra lavoratori. Nella letteratura informatica, queste attività sono spesso descritte come di facile parallelizzabilità o di zero condivisione. Gli esempi includono l'elaborazione parallela di file di dati, l'addestramento di modelli in parallelo su diverse configurazioni o l'esecuzione di inferenze in batch su una raccolta di record. Puoi parallelizzare in modo semplice questi casi d'uso di share-nothing con Amazon. SageMaker Quando avvii un processo di SageMaker Training o SageMaker Processing su un cluster con più nodi, SageMaker per impostazione predefinita replica e avvia il codice di addestramento (in Python o Docker) su tutti i nodi. Le attività che richiedono la distribuzione casuale dei dati di input su più nodi possono essere facilitate S3DataDistributionType=ShardedByS3Key
impostando la configurazione di immissione dei dati dell'API. SageMaker TrainingInput
Opzione 4: avviare più processi in parallelo o in sequenza
È inoltre possibile distribuire un flusso di lavoro di elaborazione ML in attività di elaborazione parallele o sequenziali più piccole, ciascuna rappresentata dal proprio processo di SageMaker formazione o SageMaker elaborazione. La suddivisione di un'attività in più processi può essere utile per le seguenti situazioni o attività:
-
Quando sono presenti canali di dati e voci di metadati specifici (come iperparametri, configurazione del modello o tipi di istanza) per ogni attività secondaria.
-
Quando si implementano le fasi di ripetizione dei tentativi a livello di sottoattività.
-
Quando si modifica la configurazione delle sottoattività nel corso del carico di lavoro, ad esempio durante l’addestramento sull'aumento delle dimensioni dei batch.
-
Quando è necessario eseguire un'attività di machine learning che richiede più tempo del tempo di addestramento massimo consentito per un singolo processo di addestramento (massimo 28 giorni).
-
Quando diverse fasi di un flusso di lavoro di elaborazione richiedono tipi di istanze diversi.
Per il caso specifico della ricerca iperparametrica, utilizzate SageMaker Automated Model Tuning. SageMaker Automated Model Tuning è un orchestratore di ricerca parametrica senza server che avvia più lavori di formazione per conto dell'utente, secondo una logica di ricerca che può essere casuale, bayesiana o. HyperBand
Inoltre, per orchestrare più lavori di formazione, puoi prendere in considerazione anche strumenti di orchestrazione del flusso di lavoro, come Pipelines SageMaker ,