View a markdown version of this page

Fase 2: Avvia un processo di formazione utilizzando SageMaker Python SDK - 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à.

Fase 2: Avvia un processo di formazione utilizzando SageMaker Python SDK

L'SDK SageMaker Python supporta l'addestramento gestito di modelli con framework ML come e. TensorFlow PyTorch Per avviare un processo di formazione utilizzando uno di questi framework, definisci uno stimatore, uno stimatore o uno SageMaker TensorFlow stimatore SageMaker generico per utilizzare lo SageMaker PyTorch script di addestramento modificato e la configurazione del parallelismo del modello.

PyTorch Utilizzo SageMaker TensorFlow di and Estimators

Le classi TensorFlow and PyTorch estimator contengono il distribution parametro, che è possibile utilizzare per specificare i parametri di configurazione per l'utilizzo di framework di formazione distribuiti. La libreria SageMaker Model Parallel utilizza internamente MPI per i dati ibridi e il parallelismo dei modelli, quindi è necessario utilizzare l'opzione MPI con la libreria.

Il seguente modello di PyTorch stimatore TensorFlow or mostra come configurare il distribution parametro per l'utilizzo della libreria parallela del modello con MPI. SageMaker

import sagemaker from sagemaker.train import ModelTrainer from sagemaker.train.configs import SourceCode, Compute from sagemaker.train.distributed import Torchrun from sagemaker.core.helper.session_helper import get_execution_role from sagemaker.core import image_uris training_image = image_uris.retrieve( framework="tensorflow", region=region, version='2.6.3', py_version='py38', instance_type='ml.p3.16xlarge', image_scope="training" ) smd_mp_model_trainer = ModelTrainer( source_code=SourceCode(entry_script="your_training_script.py", source_dir="location_to_your_script"), role=get_execution_role(), compute=Compute(instance_count=1, instance_type='ml.p3.16xlarge'), training_image=training_image, distributed=Torchrun(), base_job_name="SMD-MP-demo", ) smd_mp_model_trainer.train('s3://my_bucket/my_training_data/')

Per abilitare la libreria, è necessario passare i dizionari di configurazione alle "mpi" chiavi "smdistributed" e tramite l'distributionargomento dei costruttori dello stimatore. SageMaker

Parametri di configurazione per il parallelismo del modello SageMaker
  • Per la chiave "smdistributed", passa un dizionario con la chiave "modelparallel" e i seguenti dizionari interni.

    Nota

    L'utilizzo di "modelparallel" e "dataparallel" in un unico processo di addestramento non è supportato.

    • "enabled": obbligatorio Per abilitare il parallelismo dei modelli, imposta "enabled": True.

    • "parameters": obbligatorio Specificate un set di parametri per il parallelismo del SageMaker modello.

      • Per un elenco completo dei parametri comuni, vedi Parameters for smdistributed nella documentazione di SageMaker Python SDK.

        Per TensorFlow, vedi Parametri TensorFlow-specific .

        Per PyTorch, vedere PyTorch-specific Parametri.

      • "pipeline_parallel_degree" (o "partitions" in smdistributed-modelparallel<v1.6.0): obbligatorio. Tra i parametri per smdistributed, questo parametro è necessario per specificare in quante partizioni del modello desideri suddividere.

        Importante

        C'è una modifica che causerà interruzioni nel nome del parametro. Il parametro "pipeline_parallel_degree" sostituisce le "partitions" dal smdistributed-modelparallel v1.6.0. Per ulteriori informazioni, vedi Parametri comuni per la configurazione SageMaker del parallelismo del modello e Note di rilascio di SageMaker Distributed Model Parallel nella documentazione di SageMaker Python SDK.

  • Per la chiave, passa un dizionario che contenga quanto segue "mpi":

    • "enabled": obbligatorio Imposta True per avviare il processo di addestramento distribuito con MPI.

    • "processes_per_host": obbligatorio Specifica il numero di processi che MPI deve avviare su ciascun host. In SageMaker AI, un host è una singola istanza ML di Amazon EC2. L'SDK SageMaker Python mantiene una mappatura uno a uno tra processi e GPU attraverso il parallelismo di modelli e dati. Ciò significa che l' SageMaker intelligenza artificiale pianifica ogni processo su un'unica GPU separata e nessuna GPU contiene più di un processo. Se si utilizza PyTorch, è necessario limitare ogni processo al proprio dispositivo tramite. torch.cuda.set_device(smp.local_rank()) Per ulteriori informazioni, consulta Suddivisione automatica con PyTorch.

      Importante

      process_per_host non deve essere maggiore del numero di GPU per istanza e in genere sarà uguale al numero di GPU per istanza.

    • "custom_mpi_options" (facoltativo): utilizza questa chiave per passare le opzioni MPI personalizzate di cui potresti aver bisogno. Se non passi alcuna opzione personalizzata MPI alla chiave, l'opzione MPI viene impostata per impostazione predefinita sul seguente flag.

      --mca btl_vader_single_copy_mechanism none
      Nota

      Non è necessario specificare esplicitamente questo flag predefinito sulla chiave. Se lo specifichi in modo esplicito, il processo di addestramento parallelo del modello distribuito potrebbe fallire con il seguente errore:

      The following MCA parameter has been listed multiple times on the command line: MCA param: btl_vader_single_copy_mechanism MCA parameters can only be listed once on a command line to ensure there is no ambiguity as to its value. Please correct the situation and try again.
      Suggerimento

      Se avvii un processo di formazione utilizzando un tipo di EFA-enabled istanza, ad esempio ml.p4d.24xlarge eml.p3dn.24xlarge, utilizza il seguente flag per ottenere le migliori prestazioni:

      -x FI_EFA_USE_DEVICE_RDMA=1 -x FI_PROVIDER=efa -x RDMAV_FORK_SAFE=1

Per avviare il processo di formazione utilizzando lo stimatore e lo script di addestramento configurato in parallelo del SageMaker modello, eseguite la estimator.fit() funzione.

Usa le seguenti risorse per saperne di più sull'uso delle funzionalità di parallelismo dei modelli nell'SDK Python: SageMaker

Estendi un contenitore Pre-built Docker che contiene la libreria SageMaker parallela del modello distribuito

Per estendere un contenitore predefinito e utilizzare la libreria SageMaker di parallelismo dei modelli, è necessario utilizzare una delle immagini dei AWS Deep Learning Containers (DLC) disponibili per o. PyTorch TensorFlow La libreria di parallelismo dei SageMaker modelli è inclusa nelle immagini DLC TensorFlow (2.3.0 e successive) e (1.6.0 e successive) con CUDA PyTorch (). cuxyz Per un elenco completo delle immagini DLC, consulta Immagini disponibili dei Deep Learning Containers nel repository Deep Learning Containers. AWS GitHub

Suggerimento

Ti consigliamo di utilizzare l'immagine che contiene la versione più recente TensorFlow o di accedere PyTorch alla versione più aggiornata della libreria di SageMaker parallelismo dei modelli.

Ad esempio, il Dockerfile deve contenere un'istruzione FROM simile alla seguente:

# Use the SageMaker DLC image URI for TensorFlow or PyTorch FROM aws-dlc-account-id.dkr.ecr.aws-region.amazonaws.com/framework-training:{framework-version-tag} # Add your dependencies here RUN ... ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker AI container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

Inoltre, quando si definisce uno TensorFlow stimatore PyTorch or, è necessario specificarlo entry_point per lo script di addestramento. Questo deve essere lo stesso percorso identificato con ENV SAGEMAKER_SUBMIT_DIRECTORY nel Dockerfile.

Suggerimento

Devi inviare questo contenitore Docker ad Amazon Elastic Container Registry (Amazon ECR) e utilizzare l'image URI (image_uri) per definire uno SageMaker stimatore per la formazione. Per ulteriori informazioni, consulta Estendere un Pre-built contenitore.

Dopo aver completato l'hosting del contenitore Docker e aver recuperato l'URI dell'immagine del contenitore, crea un oggetto stimatore come segue. SageMaker PyTorch Questo esempio presuppone che tu abbia già definito smp_options e mpi_options.

smd_mp_estimator = Estimator( entry_point="your_training_script.py", role=sagemaker.get_execution_role(), instance_type='ml.p3.16xlarge', sagemaker_session=sagemaker_session, image_uri='your_aws_account_id.dkr.ecr.region.amazonaws.com/name:tag' instance_count=1, distribution={ "smdistributed": smp_options, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

Crea il tuo container Docker con la Distributed Model Parallel Library SageMaker

Per creare il tuo contenitore Docker per l'addestramento e utilizzare la libreria parallela SageMaker modello, devi includere le dipendenze corrette e i file binari delle librerie parallele SageMaker distribuite nel tuo Dockerfile. Questa sezione fornisce il set minimo di blocchi di codice da includere per preparare correttamente un ambiente di SageMaker formazione e la libreria parallela del modello nel proprio contenitore Docker.

Nota

Questa opzione Docker personalizzata con la libreria SageMaker Model Parallel in formato binario è disponibile solo per. PyTorch

Per creare un Dockerfile con il toolkit di SageMaker formazione e la libreria Model Parallel
  1. Inizia con una delle immagini di base di NVIDIA CUDA.

    FROM <cuda-cudnn-base-image>
    Suggerimento

    Le immagini ufficiali del AWS Deep Learning Container (DLC) sono create a partire dalle immagini di base di NVIDIA CUDA. Ti consigliamo di consultare i Dockerfile ufficiali di AWS Deep Learning Container PyTorch per scoprire quali versioni delle librerie devi installare e come configurarle. I Dockerfile ufficiali sono completi, testati con benchmark e gestiti dai team di assistenza e di Deep Learning SageMaker Container. Nel link fornito, scegli la PyTorch versione che usi, scegli la cartella CUDA (cuxyz) e scegli il Dockerfile che termina con o. .gpu .sagemaker.gpu

  2. Per configurare un ambiente di addestramento distribuito, devi installare software per dispositivi di comunicazione e di rete, come Elastic Fabric Adapter (EFA), NVIDIA Collective Communications Library (NCCL) eOpen MPI. A seconda della versione PyTorch e di CUDA scelta, è necessario installare versioni compatibili delle librerie.

    Importante

    Poiché la libreria parallela SageMaker modello richiede la libreria parallela di SageMaker dati nei passaggi successivi, si consiglia vivamente di seguire le istruzioni riportate all'indirizzo Crea il tuo contenitore Docker con la libreria parallela di dati distribuiti SageMaker AI per configurare correttamente un ambiente di SageMaker formazione per la formazione distribuita.

    Per ulteriori informazioni sulla configurazione di EFA con NCCL e Open MPI, consulta Get Started with EFA and MPI e la Guida introduttiva a EFA e NCCL.

  3. Aggiungi i seguenti argomenti per specificare gli URL dei pacchetti di formazione SageMaker distribuiti per PyTorch. La libreria parallela del SageMaker modello richiede che la libreria parallela di SageMaker dati utilizzi il Remote Direct Memory Access (RDMA) tra nodi.

    ARG SMD_MODEL_PARALLEL_URL=https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/pytorch-1.10.0/build-artifacts/2022-02-21-19-26/smdistributed_modelparallel-1.7.0-cp38-cp38-linux_x86_64.whl ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.10.2/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
  4. Installa le dipendenze richieste dalla libreria parallela del SageMaker modello.

    1. Installa la libreria METIS.

      ARG METIS=metis-5.1.0 RUN rm /etc/apt/sources.list.d/* \ && wget -nv http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/${METIS}.tar.gz \ && gunzip -f ${METIS}.tar.gz \ && tar -xvf ${METIS}.tar \ && cd ${METIS} \ && apt-get update \ && make config shared=1 \ && make install \ && cd .. \ && rm -rf ${METIS}.tar* \ && rm -rf ${METIS} \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
    2. Installa la libreria RAPIDS Memory Manager. Ciò richiede CMake 3.14 o versione successiva.

      ARG RMM_VERSION=0.15.0 RUN wget -nv https://github.com/rapidsai/rmm/archive/v${RMM_VERSION}.tar.gz \ && tar -xvf v${RMM_VERSION}.tar.gz \ && cd rmm-${RMM_VERSION} \ && INSTALL_PREFIX=/usr/local ./build.sh librmm \ && cd .. \ && rm -rf v${RMM_VERSION}.tar* \ && rm -rf rmm-${RMM_VERSION}
  5. Installa la libreria parallela SageMaker del modello.

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. Installa la libreria parallela di SageMaker dati.

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. Installa il toolkit di addestramento sagemaker. Il toolkit contiene le funzionalità comuni necessarie per creare un contenitore compatibile con la piattaforma di SageMaker formazione e l'SDK SageMaker Python.

    RUN pip install sagemaker-training
  8. Dopo aver finito di creare il Dockerfile, consulta Adapting your own training container per scoprire come creare il container Docker e ospitarlo in Amazon ECR.

Suggerimento

Per informazioni più generali sulla creazione di un Dockerfile personalizzato per la formazione in SageMaker AI, vedi Use Your Own Training Algorithms.