Fase 2: avvio di un processo di addestramento utilizzando SageMaker SDK Python - 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: avvio di un processo di addestramento utilizzando SageMaker SDK Python

L'SDK Python SageMaker supporta l'addestramento gestito di modelli con framework ML come TensorFlow e Pytorch. Per avviare un processo di addestramento utilizzando uno di questi framework, devi definire uno strumento di valutazione SageMaker TensorFlow, uno strumento di valutazione SageMaker PyTorch o uno strumento di valutazione SageMaker generico per utilizzare lo script di addestramento modificato e la configurazione del parallelismo dei modelli.

Utilizzo degli strumenti di valutazione SageMaker TensorFlow e PyTorch

Le classi degli strumenti di valutazione TensorFlow e PyTorch contengono il parametro distribution, che puoi utilizzare per specificare i parametri di configurazione per l'utilizzo di framework di addestramento distribuiti. La libreria di parallelismo dei modelli SageMaker utilizza internamente MPI per i dati ibridi e il parallelismo dei modelli, quindi devi utilizzare l'opzione MPI con la libreria.

Il seguente modello di uno strumento di valutazione TensorFlow o PyTorch mostra come configurare il parametro distribution per l'utilizzo della libreria di parallelismo dei modelli SageMaker con MPI.

Using the SageMaker TensorFlow estimator
import sagemaker from sagemaker.tensorflow import TensorFlow smp_options = { "enabled":True, # Required "parameters": { "partitions": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "horovod": True, # Use this for hybrid model and data parallelism } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = TensorFlow( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='2.6.3', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')
Using the SageMaker PyTorch estimator
import sagemaker from sagemaker.pytorch import PyTorch smp_options = { "enabled":True, "parameters": { # Required "pipeline_parallel_degree": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "ddp": True, } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = PyTorch( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='1.13.1', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

Per abilitare la libreria, devi passare i dizionari di configurazione alle chiavi "smdistributed" e "mpi" tramite l'argomento distribution dei costruttori dello strumento di valutazione SageMaker.

Parametri di configurazione per il parallelismo dei modelli 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 Specifica un set di parametri per il parallelismo dei modelli SageMaker.

  • 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 Python SageMaker mantiene una mappatura individuale tra processi e GPU attraverso la parallelizzazione di dati e modelli. Ciò significa che SageMaker AI pianifica ogni processo su un’unica GPU separata e nessuna GPU contiene più di un processo. Se utilizzi PyTorch, devi limitare ogni processo al tuo dispositivo tramite torch.cuda.set_device(smp.local_rank()). Per ulteriori informazioni, consulta Suddivisione automatizzata 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 addestramento utilizzando un tipo di istanza compatibile con EFA, ad esempio ml.p4d.24xlarge e ml.p3dn.24xlarge, utilizza il seguente flag per ottenere prestazioni ottimali:

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

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

Utilizza le seguenti risorse per ottenere ulteriori informazioni sull'utilizzo delle funzionalità di parallelismo dei modelli in SageMaker Python SDK:

Estendi un container Docker predefinito che contiene la libreria parallela di modelli distribuiti di SageMaker

Per estendere un container predefinito e utilizzare la libreria di parallelismo dei modelli di SageMaker, devi utilizzare una delle immagini dei container AWS per il Deep Learning (DLC) disponibili per PyTorch o TensorFlow. La libreria di parallelismo dei modelli SageMaker è inclusa nelle immagini DLC TensorFlow (2.3.0 e successive) e PyTorch (1.6.0 e successive) con CUDA (cuxyz). Per una lista completa di immagini DLC, consulta Available Deep Learning Containers Images in AWS Deep Learning Containers GitHub repository.

Suggerimento

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

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 definisci uno strumento di valutazione PyTorch o TensorFlow, devi specificare il 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 container Docker ad Amazon Elastic Container Registry (Amazon ECR) e utilizzare l'URI dell’immagine (image_uri) per definire uno strumento di valutazione SageMaker per l’addestramento. Per ulteriori informazioni, consulta Estensione di un container predefinito.

Dopo aver completato l'hosting del container Docker e aver recuperato l'URI dell'immagine del container, crea un oggetto dello strumento di valutazione PyTorch SageMaker come segue. 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/')

Creazione del proprio container Docker con la libreria di parallelismo dei modelli distribuiti SageMaker

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

Nota

Questa opzione Docker personalizzata con la libreria di parallelismo dei modelli SageMaker come binario è disponibile solo per PyTorch.

Per creare un Dockerfile con il kit di strumenti di addestramento SageMaker e la libreria di parallelismo dei modelli
  1. Inizia con una delle immagini di base di NVIDIA CUDA.

    FROM <cuda-cudnn-base-image>
    Suggerimento

    Le immagini ufficiali del container AWS per il Deep Learning (DLC) sono create a partire dalle immagini di base di NVIDIA CUDA. Ti consigliamo di consultare i Dockerfile ufficiali dei container AWS per il Deep Learning per 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 SageMaker e dei container per il Deep Learning. Nel link fornito, scegli la versione di PyTorch che usi, scegli la cartella CUDA (cuxyz) e scegli il Dockerfile che termina con .gpu o .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 delle versioni di PyTorch e CUDA scelte, devi installare versioni compatibili delle librerie.

    Importante

    Poiché la libreria i parallelismo dei modelli SageMaker richiede la libreria di parallelismo dei dati SageMaker nelle fasi successive, consigliamo vivamente di seguire le istruzioni riportate in Creare un container Docker con la libreria SageMaker AI Distributed Data Parallelism per configurare correttamente un ambiente di addestramento SageMaker per l’addestramento distribuito.

    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 addestramento distribuiti SageMaker per PyTorch. La libreria di parallelismo dei modelli SageMaker richiede la libreria di parallelismo dei dati SageMaker per utilizzare 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 dei modelli SageMaker.

    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 di parallelismo dei modelli SageMaker.

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

    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 container compatibile con la piattaforma di addestramento SageMaker 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 l’addestramento in SageMaker AI, consulta Utilizzo degli algoritmi di addestramento.