Paso 2: lance un trabajo de entrenamiento con el SageMaker Python SDK - Amazon SageMaker AI

Paso 2: lance un trabajo de entrenamiento con el SageMaker Python SDK

El SageMaker Python SDK admite el entrenamiento gestionado de los modelos TensorFlow y PyTorch. Para iniciar un trabajo de entrenamiento usando uno de estos marcos, defina un estimador TensorFlow de SageMaker, un estimador PyTorch de SageMaker o un estimador genérico de SageMaker para usar el script de entrenamiento modificado y la configuración de paralelismo de modelos.

Uso de los estimadores TensorFlow y PyTorch de SageMaker

Las clases de estimador TensorFlow y PyTorch contienen el parámetro distribution, que puede usar para especificar los parámetros de configuración con el objetivo de usar marcos de entrenamiento distribuido. La biblioteca de paralelismo de modelos de SageMaker utiliza MPI de forma interna para el paralelismo híbrido de datos y modelos, por lo que debe utilizar la opción MPI con la biblioteca.

La siguiente plantilla de un estimador TensorFlow o PyTorch muestra cómo configurar el parámetro distribution para usar la biblioteca de paralelismo de modelos de 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/')

Para habilitar la biblioteca, debe pasar los diccionarios de configuración a las claves "smdistributed" y "mpi" a través del argumento distribution de los creadores del estimador de SageMaker.

Parámetros de configuración para el paralelismo de modelos de SageMaker
  • Para la clave "smdistributed", pase un diccionario con la clave "modelparallel" y los siguientes diccionarios internos.

    nota

    No se admite el uso de "modelparallel" y "dataparallel" en un trabajo de entrenamiento.

    • "enabled": obligatorio. Para habilitar el paralelismo de modelos, establezca "enabled": True.

    • "parameters": obligatorio. Especifique un conjunto de parámetros para el paralelismo de modelos de SageMaker.

  • Para la clave "mpi", pase un diccionario que contenga lo siguiente:

    • "enabled": obligatorio. Establezca True para iniciar el trabajo de entrenamiento distribuido con MPI.

    • "processes_per_host": obligatorio. Especifique el número de procesos que MPI debe lanzar en cada host. En SageMaker AI, un host es una única instancia de Amazon EC2 ML. El SageMaker Python SDK mantiene un mapeo uno a uno entre procesos y GPU en paralelismo de modelos y datos. Esto significa que SageMaker AI programa cada proceso en una única GPU independiente y ninguna GPU contiene más de un proceso. Si utiliza PyTorch, debe restringir cada proceso a su propio dispositivo mediante torch.cuda.set_device(smp.local_rank()). Para obtener más información, consulte División automatizada con PyTorch.

      importante

      process_per_host no debe ser mayor que la cantidad de GPU por instancia y normalmente será igual a la cantidad de GPU por instancia.

    • "custom_mpi_options" (opcional): utilice esta tecla para pasar cualquier opción MPI personalizada que pueda necesitar. Si no pasa ninguna opción personalizada de MPI a la clave, la opción MPI se establece de forma predeterminada en el siguiente indicador.

      --mca btl_vader_single_copy_mechanism none
      nota

      No es necesario especificar explícitamente este indicador predeterminado en la clave. Si lo especifica explícitamente, el trabajo de entrenamiento distribuido de paralelismo de modelos podría fallar con el siguiente error:

      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.
      sugerencia

      Si lanza un trabajo de entrenamiento utilizando un tipo de instancia habilitado para EFA, como ml.p4d.24xlarge y ml.p3dn.24xlarge, utilice el siguiente indicador para obtener el mejor rendimiento:

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

Para iniciar el trabajo de entrenamiento utilizando el estimador y el script de entrenamiento configurado con el paralelismo de modelos de SageMaker, ejecute la función estimator.fit().

Utilice los siguientes recursos para obtener más información sobre el uso de las características de paralelismo de modelos en el SDK SageMaker Python:

Ampliar un contenedor de Docker que contiene la biblioteca de paralelismo de modelos distribuidos de SageMaker

Para ampliar un contenedor prediseñado y usar la biblioteca de paralelismo de modelos de SageMaker, debe usar una de las imágenes de los contenedores del aprendizaje profundo (DLC) de AWS disponibles para PyTorch o TensorFlow. La biblioteca de paralelismo de modelos de SageMaker se incluye en las imágenes DLC de TensorFlow (2.3.0 y versiones posteriores) y PyTorch (1.6.0 y versiones posteriores) con CUDA (cuxyz). Para obtener una lista completa de imágenes DLC, consulte Imágenes de contenedores de aprendizaje profundo disponibles en el repositorio GitHub de contenedores de aprendizaje profundo de AWS.

sugerencia

Le recomendamos que utilice la imagen que contiene la última versión de TensorFlow o PyTorch para acceder a la versión más actualizada de la biblioteca de paralelismo de modelos de SageMaker.

Por ejemplo, su Dockerfile debe contener una declaración FROM similar a la siguiente:

# 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

Además, cuando define un estimador PyTorch o TensorFlow, debe especificar que el entry_point para su script de entrenamiento. Debe ser el mismo camino identificado con ENV SAGEMAKER_SUBMIT_DIRECTORY en su Dockerfile.

sugerencia

Debe enviar este contenedor de Docker a Amazon Elastic Container Registry (Amazon ECR) y utilizar el URI de imagen (image_uri) para definir un estimador de SageMaker para el entrenamiento. Para obtener más información, consulte Ampliar una contenedor precompilado.

Cuando termine de alojar el contenedor de Docker y de recuperar el URI de imagen del contenedor, cree un objeto estimador PyTorch de SageMaker de la siguiente manera. En este ejemplo se supone que ya ha definido smp_options y 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/')

Cree su propio contenedor de Docker con la biblioteca de paralelismo de modelos distribuidos de SageMaker

Para crear su propio contenedor de Docker para el entrenamiento y utilizar la biblioteca de paralelismo de modelos de SageMaker, debe incluir las dependencias y los archivos binarios correctos de las bibliotecas de paralelismo distribuido de SageMaker en su Dockerfile. Esta sección proporciona el conjunto mínimo de bloques de código que debe incluir para preparar adecuadamente un entorno de entrenamiento de SageMaker y la biblioteca de paralelismo de modelos en su propio contenedor de Docker.

nota

Esta opción personalizada de Docker con la biblioteca de paralelismo de modelos de SageMaker en formato binario solo está disponible para PyTorch.

Para crear un Dockerfile con el kit de herramientas de entrenamiento de SageMaker y la biblioteca de paralelismo de modelos.
  1. Comience con una de las imágenes base de NVIDIA CUDA.

    FROM <cuda-cudnn-base-image>
    sugerencia

    Las imágenes oficiales del contenedor de aprendizaje profundo (DLC) de AWS se crean a partir de las imágenes base de NVIDIA CUDA. Le recomendamos que consulte los Dockerfiles oficiales del contenedor de machine learning de AWS para PyTorch para encontrar qué versiones de las bibliotecas necesita instalar y cómo configurarlas. Los Dockerfiles oficiales son completos, han sido sometidos a pruebas comparativas y están gestionados por los equipos de servicios de SageMaker y contenedor de aprendizaje profundo. En el enlace proporcionado, seleccione la versión de PyTorch que utilice, seleccione la carpeta CUDA (cuxyz) y, a continuación, seleccione el Dockerfile que termina en .gpu o .sagemaker.gpu.

  2. Para establecer un entorno de entrenamiento distribuido, debe instalar software para dispositivos de comunicación y red, como Elastic Fabric Adapter (EFA), NVIDIA Collective Communications Library (NCCL y Open MPI. Según las versiones de PyTorch y CUDA que elija, debe instalar versiones compatibles de las bibliotecas.

    importante

    Dado que la biblioteca de paralelismo de modelos de SageMaker requiere la biblioteca de paralelismo de datos de SageMaker en los pasos siguientes, le recomendamos encarecidamente que siga las instrucciones que aparecen en Creación de contenedor de Docker propio con la biblioteca de paralelismo de datos distribuidos de SageMaker AI para configurar correctamente un entorno de entrenamiento de SageMaker para el entrenamiento distribuido.

    Para obtener más información sobre cómo configurar EFA con NCCL y Open MPI, consulte Introducción a EFA y MPI e Introducción a EFA y NCCL.

  3. Agregue los siguientes argumentos para especificar las direcciones URL de los paquetes de entrenamiento distribuido de SageMaker para PyTorch. La biblioteca de paralelismo de modelos de SageMaker requiere que la biblioteca de paralelismo de datos de SageMaker utilice el acceso remoto directo a memoria (RDMA) entre nodos.

    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. Instale las dependencias que requiera la biblioteca de paralelismo de modelos de SageMaker.

    1. Instale la biblioteca 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. Instale la biblioteca RAPIDS Memory Manager. Esto requiere CMake 3.14 o una versión posterior.

      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. Instale la biblioteca de paralelismo de modelos de SageMaker.

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. Instale la biblioteca de paralelismo de datos de SageMaker.

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. Instale el kit de herramientas sagemaker-training. El kit de herramientas contiene la funcionalidad común necesaria para crear un contenedor compatible con la plataforma de entrenamiento de SageMaker y el SageMaker Python SDK.

    RUN pip install sagemaker-training
  8. Cuando termine de crear el Dockerfile, consulte Adaptación de su propio contenedor de entrenamiento para aprender a crear el contenedor de Docker y alojarlo en Amazon ECR.

sugerencia

Para obtener más información general sobre la creación de un dockerfile personalizado para el entrenamiento en SageMaker AI, consulte Utilice sus propios algoritmos de entrenamiento.