View a markdown version of this page

Elaborazione distribuita con best practice di SageMaker intelligenza artificiale - Amazon SageMaker AI

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 best practice di SageMaker intelligenza artificiale

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 caratteristiche 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 What is Distributed Computing?.

È 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, è necessario identificare se i dati I/O e le comunicazioni tra GPU presentano intoppi o causano un sovraccarico.

  • 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 L'intelligenza artificiale fornisce soluzioni di formazione distribuite per alleviare tali sfide per vari casi d'uso. Scegli una delle seguenti opzioni che meglio si adatta al tuo caso d'uso.

Opzione 1: utilizza un algoritmo integrato di SageMaker intelligenza artificiale che supporti la formazione distribuita

SageMaker L'intelligenza artificiale fornisce algoritmi integrati che puoi utilizzare immediatamente tramite la console SageMaker AI 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 integrati di SageMaker intelligenza artificiale supporta la formazione distribuita. Per verificare se l'algoritmo di tua scelta supporta l'addestramento distribuito, consulta la colonna Parallelizable nella tabella Informazioni comuni sugli algoritmi. Built-in 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 SageMaker elaborazione gestito dall'IA

SageMaker I lavori di intelligenza artificiale possono creare un'istanza di un ambiente di formazione distribuito per casi d'uso e framework specifici. Questo ambiente funge da lavagna pronta all'uso, in cui è possibile importare ed eseguire il tuo codice ML.

Se il tuo codice ML utilizza un framework di deep learning

Puoi avviare processi di formazione distribuiti utilizzando i Deep Learning Containers (DLC) for SageMaker Training, che puoi orchestrare tramite i moduli Python dedicati nell'SageMaker AI Python SDK o tramite le API con,. SageMaker AWS CLI AWS SDK per Python (Boto3) SageMaker L'intelligenza artificiale fornisce contenitori di formazione per framework di machine learning, tra cui Hugging Face Transformers e Apache PyTorch MXNet TensorFlow. https://sagemaker.readthedocs.io/en/stable/api/sagemaker_train.html https://sagemaker.readthedocs.io/en/stable/api/sagemaker_train.html Sono disponibili due opzioni per scrivere codice di deep learning per l’addestramento distribuito.

  • SageMaker Le librerie di formazione distribuite dall'IA

    Le librerie di formazione distribuite con SageMaker intelligenza AWS artificiale propongono codice gestito per il parallelismo dei dati delle reti neurali e il parallelismo dei modelli. SageMaker La formazione distribuita con intelligenza artificiale 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 di parallelismo dei dati di SageMaker AI e la libreria di parallelismo dei modelli di SageMaker AI.

  • Open-source librerie di formazione distribuite

    I framework open source hanno i propri meccanismi di distribuzione come DistributedDataParallelism (DDP) in PyTorch o tf.distribute moduli in. TensorFlow Puoi scegliere di eseguire questi framework di formazione distribuiti nei contenitori del framework. SageMaker AI-managed Ad esempio, il codice di esempio per addestrare MaskRCNN in SageMaker AI mostra come utilizzare sia PyTorch DDP nel contenitore del PyTorch framework SageMaker AI che Horovod nel contenitore del framework. https://horovod.readthedocs.io/en/stable/ SageMaker TensorFlow

SageMaker I contenitori AI ML sono inoltre dotati di MPI preinstallato, in modo da poter parallelizzare lo script del punto di ingresso utilizzando mpi4py. https://mpi4py.readthedocs.io/en/stable/ L'utilizzo dei contenitori di formazione integrati MPI è un'ottima opzione quando avvii un launcher di formazione distribuito di terze parti o scrivi codice parallelo ad hoc nell'ambiente di formazione gestito dall'IA. SageMaker

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 GPU-based istanza di solito contiene più dispositivi GPU. Di conseguenza, l'elaborazione distribuita tramite GPU può avvenire all'interno di una singola istanza GPU con più GPU (training multi-GPU a nodo singolo) o su più istanze GPU con più core GPU in ciascuna (training multi-GPU multi-nodo). Single-instance con l'addestramento è più facile scrivere codice ed eseguire il debug e il throughput intra-nodo è generalmente più veloce del throughput tra nodi. GPU-to-GPU GPU-to-GPU 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 valere nei casi in cui il budget della CPU è elevato (ad esempio, un enorme carico di lavoro per la preelaborazione dei dati) e quando il rapporto tra un'istanza multi-GPU è troppo basso. CPU-to-GPU 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.

  • Monitoraggio della 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)].

  • Monitora i colli di bottiglia 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.

  • Modifica dello 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 di dati tabulari distribuiti per carichi di lavoro di produzione su larga scala. Se desideri eseguire codice di elaborazione dati tabulari, prendi in considerazione l'utilizzo dei PySpark contenitori di SageMaker elaborazione 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 EMR e. AWS Glue

Opzione 3: scrivere il proprio codice di addestramento distribuito personalizzato

Quando invii un processo di formazione o elaborazione all' SageMaker IA, le API di SageMaker formazione e elaborazione dell' SageMaker IA avviano le istanze di calcolo di 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, vedi Adattare il tuo contenitore Docker per lavorare con l' SageMaker intelligenza artificiale e Creare un contenitore con i tuoi algoritmi e modelli. Per ulteriori informazioni su Docker with SageMaker AI Processing, vedi 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 distribuito di terze parti come Ray o DeepSpeed in SageMaker AI.

È 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 banalmente parallelizzare questi casi d'uso in cui non si condivide nulla con Amazon AI. SageMaker Quando avvii un processo di SageMaker formazione o SageMaker elaborazione su un cluster con più nodi, l' SageMaker IA per impostazione predefinita replica e avvia il codice di addestramento (in Python o Docker) su tutti i nodi. Le attività che richiedono una distribuzione casuale dei dati di input su tali nodi multipli possono essere facilitate S3DataDistributionType=ShardedByS3Key impostando la configurazione di input dei dati dell'API AI. SageMaker InputData

Opzione 4: avviare più processi in parallelo o in sequenza

Puoi anche distribuire un flusso di lavoro di calcolo ML in attività di calcolo parallele o sequenziali più piccole, ciascuna rappresentata da un proprio processo di SageMaker formazione o elaborazione. SageMaker 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 di iperparametri, utilizza SageMaker AI Automated Model Tuning. SageMaker AI Automated Model Tuning è un orchestratore di ricerca di parametri senza server che avvia più lavori di formazione per tuo conto, 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 SageMaker Pipelines, AWS Step Functions e Apache Airflow supportati da Amazon Managed Workflows for Apache Airflow (MWAA) e SageMaker AI Workflows.