Exécuter une tâche d'entraînement de données parallèles distribuées SageMaker - Amazon SageMaker

Exécuter une tâche d'entraînement de données parallèles distribuées SageMaker

Découvrez comment exécuter une tâche d'entraînement de données parallèles distribuées à l'aide du kit SDK Python SageMaker et de votre script d'entraînement adapté avec la bibliothèque de données parallèles distribuées de SageMaker. Pour connaître les spécifications de l'API, reportez-vous à la section sur les données parallèles distribuées dans la documentation du kit SDK Python SageMaker.

Utiliser la bibliothèque de données parallèles distribuées de SageMaker

Pour utiliser la bibliothèque de données parallèles distribuées de SageMaker, commencez par un script d'entraînement. Comme pour toute tâche d'entraînement sur SageMaker, vous utilisez votre script d'entraînement pour lancer une tâche d'entraînement SageMaker. Pour commencer, nous vous recommandons d'utiliser la bibliothèque de données parallèles SageMaker en :

Les deux options vous permettent ensuite d'utiliser les Exemples de bloc-notes d'entraînement distribué Amazon SageMaker fournis avec cette documentation pour commencer. 

Utiliser la bibliothèque de données parallèles avec le kit SDK Python de SageMaker

Pour utiliser la bibliothèque de données parallèles distribuées de SageMaker, vous devez créer un script d'entraînement pour l'un des cadres pris en charge et lancer la tâche d'entraînement à l'aide du kit SDK Python de SageMaker. Pour savoir comment incorporer la bibliothèque dans un script d'entraînement, consultez Modifier votre script d'entraînement à l'aide de la bibliothèque de modèles parallèles distribués de SageMaker. La documentation sur l'API de la bibliothèque se trouve dans le kit SDK Python SageMaker. Veuillez consulter la documentation relative à l'API de données parallèles de SageMaker.

SageMaker prend en charge les configurations d'environnement d'entraînement suivantes :

  • Vous pouvez utiliser un conteneur TensorFlow ou PyTorch précréé.

  • Vous pouvez personnaliser des conteneurs SageMaker précréés ou les étendre pour gérer toutes les exigences fonctionnelles supplémentaires pour votre algorithme ou modèle que l'image Docker SageMaker précréée ne prend pas en charge. Pour apprendre comment étendre un conteneur précréé, consultez Étendre un conteneur précréé.

    Pour étendre un conteneur précréé ou adapter votre propre conteneur pour utiliser la bibliothèque, vous devez utiliser l'une des images de base du cadre général du GPU PyTorch ou TensorFlow. La bibliothèque de données parallèles distribuées est incluse dans toutes les images versionnées CUDA 11 (cu11x) TensorFlow 2.3.x et PyTorch 1.6.x et versions ultérieures. Veuillez consulter Available Deep Learning Containers Images (Images de conteneurs Deep Learning Containers disponibles) pour obtenir une liste des images disponibles.

    Important

    Nous vous recommandons d'utiliser l'image contenant la dernière version de TensorFlow ou PyTorch pour accéder à la version la plus récente de la bibliothèque de données parallèles distribuées SageMaker. Toutes les images incluant les versions TensorFlow 2.4.1 et PyTorch 1.8.1 et versions ultérieures, prennent en charge les types d'instance EFA (ml.p3dn.24xlarge, ml.p4d.24xlarge).

    Par exemple, si vous utilisez PyTorch 1.8.1, votre Dockerfile doit contenir une instruction FROM semblable à celle-ci :

    # SageMaker PyTorch image FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.8.1-gpu-py36-cu111-ubuntu18.04 ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker PyTorch container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code. COPY cifar10.py /opt/ml/code/cifar10.py # Defines cifar10.py as script entrypoint ENV SAGEMAKER_PROGRAM cifar10.py
  • Vous pouvez adapter votre propre conteneur Docker pour qu'il fonctionne avec SageMaker à l'aide de la boîte à outils d'entraînement SageMaker. Pour obtenir un exemple, consultez Adaptation de votre propre conteneur d'entraînement.

Dans tous les cas, vous lancez votre tâche à l'aide d'un kit SDK Python SageMaker Estimator.

Si vous utilisez les conteneurs PyTorch ou TensorFlow précréés SageMaker, consultez la section suivante pour apprendre comment configurer un Estimator pour utiliser la bibliothèque.

Si vous apportez votre propre conteneur ou étendez un conteneur précréé, vous pouvez créer une instance de la classe Estimator avec l'image Docker souhaitée.

Estimateur TensorFlow

Vous pouvez utiliser l'API de la bibliothèque de données parallèles distribuées de SageMaker en spécifiant smdistributed dataparallel comme stratégie de distribution dans l'API de l'estimateur TensorFlow de SageMaker. Veuillez consulter la documentation sur l'API de l'estimateur TensorFlow de SageMaker pour plus de détails sur l'API.

classsagemaker.tensorflow.estimator.TensorFlow(py_version=None,framework_version=None,model_dir=None,image_URI=None,Distribution=None,kwargs)

Les deux paramètres suivants de l'estimateur TensorFlow du kit SDK Python SageMaker sont requis pour utiliser smdistributed.dataparallel avec TensorFlow.

distribution(dict)(optional) : dictionnaire contenant des informations sur la façon d'exécuter un entraînement distribué (par défaut : None). 

  • Pour utiliser smdistributed.dataparallel comme stratégie de distribution, utilisez l'option suivante :

    distribution = { "smdistributed": { "dataparallel": { "enabled": True } } }
  • custom_mpi_options (str)(optional) : options MPI personnalisées. Voici un exemple de la façon dont vous pouvez utiliser ce paramètre lors de la définition de distribution. Pour en savoir plus, consultez Options MPI personnalisées.

    distribution = { "smdistributed": { "dataparallel": { "enabled": True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION" } } }

train_instance_type (str)(required) : type d'instance Amazon EC2 à utiliser.

  • Si vous utilisez la stratégie de distribution smdistributed.dataparallel, les types d'instance autorisés sont : ml.p4d.24xlarge, ml.p3dn.24xlarge et ml.p3.16xlarge. Pour de meilleures performances, nous vous recommandons d'utiliser une instance EFA prise en charge, ml.p3dn.24xlarge ou ml.p4d.24xlarge, avec la dernière version prise en charge de TensorFlow.

Exemple

from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow( base_job_name = "training_job_name_prefix", entry_point="tf-train.py", role="SageMakerRole", framework_version="2.4.1", # You must set py_version to py36 py_version="py37",     # For training with multi node distributed training, set this count. # Example: 2,3,4,..8 instance_count=2,     # For training with p3dn instance use - ml.p3dn.24xlarge instance_type="ml.p3.16xlarge",     # Training using smdistributed.dataparallel Distributed Training Framework distribution={"smdistributed": {"dataparallel": {"enabled": True}}} ) tf_estimator.fit("s3://bucket/path/to/training/data")
Note

Si vous utilisez le kit SDK Python SageMaker 1.x, vous devez utiliser hyperparameters pour spécifier l'utilisation de smdistributed dataparallel comme stratégie d'entraînement distribué.

from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow(                           ...                           # Training using smdistributed.dataparallel Distributed Training Framework                           hyperparameters={"sagemaker_distributed_dataparallel_enabled": True},                           ...                          ) tf_estimator.fit("s3://bucket/path/to/training/data")

Estimateur PyTorch

Vous pouvez utiliser l'API de la bibliothèque de données parallèles distribuées de SageMaker en spécifiant smdistributed dataparallel comme stratégie de distribution dans l'API de l'estimateur PyTorch de SageMaker. Veuillez consulter la documentation sur l'API de l'estimateur PyTorch de SageMaker pour plus de détails sur l'API.

classsagemaker.pytorch.estimator.PyTorch(py_version=None,framework_version=None,model_dir=None,image_URI=None, hyperparameters=None, Distribution=None,kwargs)

Les deux paramètres suivants de l'Estimator PyTorch SageMaker sont nécessaires pour utiliser smdistributed.dataparallel sur SageMaker avec PyTorch.

distribution (dict)(optional): Dictionnaire contenant des informations sur la façon d'exécuter un entraînement distribué (par défaut : None). 

  • Pour utiliser smdistributed.dataparallel comme stratégie de distribution, utilisez l'option suivante :

    distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }
  • custom_mpi_options (str)(optional) : options MPI personnalisées. Voici un exemple de la façon dont vous pouvez utiliser ce paramètre lors de la définition de distribution. Pour en savoir plus, consultez Options MPI personnalisées.

    distribution = { "smdistributed": { "dataparallel": { "enabled": True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION" } } }

train_instance_type (str)(required) : type d'instance Amazon EC2 à utiliser.

  • Si vous utilisez la stratégie de distribution smdistributed.dataparallel, les types d'instance autorisés sont : ml.p4d.24xlarge, ml.p3dn.24xlarge et ml.p3.16xlarge. Pour de meilleures performances, nous vous recommandons d'utiliser une instance EFA prise en charge, ml.p3dn.24xlarge ou ml.p4d.24xlarge, avec la dernière version prise en charge de PyTorch.

Exemple

from sagemaker.pytorch import PyTorch pt_estimator = PyTorch( base_job_name="training_job_name_prefix", entry_point="pt-train.py", role="SageMakerRole", # You must set py_version to py36 py_version="py36", framework_version="1.8.1",     # For training with multi node distributed training, set this count.     # Example: 2,3,4,..8 instance_count=2,     # For training with p3dn instance use - ml.p3dn.24xlarge instance_type="ml.p3.16xlarge",     # Training using smdistributed.dataparallel Distributed Training Framework distribution={"smdistributed": {"dataparallel": {"enabled": True}}} ) pt_estimator.fit("s3://bucket/path/to/training/data")                       
Note

Si vous utilisez le kit SDK Python SageMaker 1.x, vous devez utiliser hyperparameters pour spécifier smdistributed.dataparallel comme stratégie d'entraînement distribué.

from sagemaker.pytorch import PyTorch pt_estimator = PyTorch(                        ...                        # Training using smdistributed.dataparallel Distributed Training Framework                        hyperparameters={"sagemaker_distributed_dataparallel_enabled": True},                        ...                       ) pt_estimator.fit("s3://bucket/path/to/training/data")