Exécuter TensorFlow des tâches de formation avec SageMaker Training Compiler - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécuter TensorFlow des tâches de formation avec SageMaker Training Compiler

Vous pouvez utiliser n'importe laquelle des SageMaker interfaces pour exécuter une tâche de formation avec SageMaker Training Compiler : Amazon SageMaker Studio Classic, Amazon SageMaker Notebook instances AWS SDK for Python (Boto3), et AWS Command Line Interface.

Utilisation du SDK SageMaker Python

Pour activer SageMaker Training Compiler, ajoutez le compiler_config paramètre à l' SageMaker TensorFlow estimateur Hugging Face. Importez la classe TrainingCompilerConfig et transmettez-en une instance au paramètre compiler_config. Les exemples de code suivants montrent la structure des classes d' SageMaker estimateurs lorsque le compilateur d' SageMaker entraînement est activé.

Astuce

Pour commencer à utiliser les modèles prédéfinis fournis par les bibliothèques TensorFlow et Transformers, essayez d'utiliser les tailles de lots fournies dans le tableau de référence à l'adresse. Modèles testés

Note

SageMaker Training Compiler for TensorFlow est disponible via SageMaker TensorFlowles estimateurs du framework Hugging Face.

Pour obtenir des informations adaptées à votre cas d'utilisation, consultez l'une des options suivantes.

TensorFlow
from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_estimator=TensorFlow( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', framework_version='2.9.1', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_estimator.fit()

Pour préparer votre script d'entraînement, consultez les pages suivantes.

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()

Pour préparer votre script d'entraînement, consultez les pages suivantes.

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=instance_count, instance_type=instance_type, transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()
Astuce

Pour préparer votre script d'entraînement, consultez les pages suivantes.

La liste suivante contient l'ensemble minimal de paramètres requis pour exécuter une tâche d' SageMaker entraînement avec le compilateur.

Note

Lorsque vous utilisez l'estimateur SageMaker Hugging Face, vous devez spécifier transformers_version les paramètres, tensorflow_versionhyperparameters, compiler_config et pour activer Training Compiler SageMaker . Vous ne pouvez pas utiliser image_uri pour spécifier manuellement les conteneurs de deep learning intégrés à Training Compiler qui sont répertoriés dans Cadres pris en charge.

  • entry_point (str) : obligatoire. Spécifiez le nom de fichier de votre script d'entraînement.

  • instance_count (int) : obligatoire. Spécifiez le nombre d'instances.

  • instance_type (str) : obligatoire. Spécifiez le type d'instance.

  • transformers_version(str) — Obligatoire uniquement lors de l'utilisation de l' SageMaker estimateur Hugging Face. Spécifiez la version de la bibliothèque Hugging Face Transformers prise en charge SageMaker par Training Compiler. Pour trouver les versions disponibles, consultez Cadres pris en charge.

  • framework_version ou tensorflow_version (str) : obligatoire. Spécifiez la TensorFlow version prise en charge par SageMaker Training Compiler. Pour trouver les versions disponibles, consultez Cadres pris en charge.

    Note

    Lorsque vous utilisez l' SageMaker TensorFlow estimateur, vous devez spécifier. framework_version

    Lorsque vous utilisez l'estimateur SageMaker Hugging Face, vous devez spécifier à la fois et. transformers_version tensorflow_version

  • hyperparameters (dict) : facultatif. Spécifiez des hyperparamètres pour la tâche d'entraînement, tels que n_gpus, batch_size et learning_rate. Lorsque vous activez SageMaker Training Compiler, essayez des lots de plus grande taille et ajustez le taux d'apprentissage en conséquence. Pour trouver des études de cas sur l'utilisation du compilateur et l'ajustement de la taille des lots pour améliorer la vitesse d'entraînement, consultez Modèles testés et SageMaker Compilateur de formation : exemples de blocs-notes et de blogs.

  • compiler_config(TrainingCompilerConfig objet) — Obligatoire. Incluez ce paramètre pour activer le compilateur SageMaker d'entraînement. Les paramètres suivants sont destinés à la classe TrainingCompilerConfig.

    • enabled (bool) : facultatif. Spécifiez True ou False activez ou désactivez le compilateur SageMaker d'entraînement. La valeur par défaut est True.

    • debug (bool) : facultatif. Pour recevoir des journaux d'entraînement plus détaillés de vos tâches d'entraînement accélérées par le compilateur, remplacez la valeur par True. Cependant, la journalisation supplémentaire peut ajouter une surcharge et ralentir la tâche d'entraînement compilé. La valeur par défaut est False.

Avertissement

Si vous activez SageMaker Debugger, cela peut avoir un impact sur les performances de SageMaker Training Compiler. Nous vous recommandons de désactiver le débogueur lorsque vous exécutez SageMaker Training Compiler pour vous assurer que cela n'a aucun impact sur les performances. Pour de plus amples informations, veuillez consulter Considérations. Pour désactiver les fonctionnalités de Debugger, ajoutez les deux arguments suivants à l'estimateur :

disable_profiler=True, debugger_hook_config=False

Si la tâche d'entraînement avec le compilateur est lancée avec succès, vous recevez les journaux suivants lors de la phase d'initialisation de la tâche :

  • Avec TrainingCompilerConfig(debug=False)

    Found configuration for Training Compiler Configuring SM Training Compiler...
  • Avec TrainingCompilerConfig(debug=True)

    Found configuration for Training Compiler Configuring SM Training Compiler... Training Compiler set to debug mode

Utilisation du SDK SageMaker Python et extension du SageMaker framework Deep Learning Containers

AWS Deep Learning Containers (DLC) à TensorFlow utiliser des versions adaptées TensorFlow qui incluent des modifications en plus du framework open source TensorFlow . Les SageMaker Framework Deep Learning Containers sont optimisés pour l' AWS infrastructure sous-jacente et Amazon SageMaker. Avec l'avantage d'utiliser les DLC, l'intégration de SageMaker Training Compiler améliore davantage les performances par rapport à la version native TensorFlow. En outre, vous pouvez créer un conteneur d'entraînement personnalisé en étendant l'image DLC.

Note

Cette fonctionnalité de personnalisation de Docker n'est actuellement disponible que pour TensorFlow.

Pour étendre et personnaliser les SageMaker TensorFlow DLC en fonction de votre cas d'utilisation, suivez les instructions suivantes.

Création d'un fichier Dockerfile

Utilisez le modèle Dockerfile suivant pour étendre le SageMaker TensorFlow DLC. Vous devez utiliser l'image du SageMaker TensorFlow DLC comme image de base de votre conteneur Docker. Pour trouver les URI des images du SageMaker TensorFlow DLC, consultez Frameworks pris en charge.

# SageMaker TensorFlow Deep Learning Container image FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/tensorflow-training:<image-tag> ENV PATH="/opt/ml/code:${PATH}" # This environment variable is used by the SageMaker container # to determine user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # Add more code lines to customize for your use-case ...

Pour plus d'informations, consultez Étape 2 : créer et télécharger le fichier Dockerfile et les scripts d'entraînement Python

Tenez compte des écueils suivants lorsque vous étendez des DLC SageMaker Framework :

  • Ne désinstallez pas ou ne modifiez pas explicitement la version des TensorFlow packages dans les SageMaker conteneurs. Cela entraîne le remplacement des TensorFlow packages AWS optimisés par des packages open source TensorFlow , ce qui peut entraîner une dégradation des performances.

  • Faites attention aux packages qui ont une TensorFlow version ou une saveur particulière en tant que dépendance. Ces packages peuvent implicitement désinstaller les packages AWS optimisés TensorFlow et installer des packages open source TensorFlow .

Par exemple, il existe un problème connu selon lequel les bibliothèques tensorflow/models et tensorflow/text tentent toujours de réinstaller l'open source. TensorFlow Si vous devez installer ces bibliothèques pour choisir une version spécifique à votre cas d'utilisation, nous vous recommandons de consulter le SageMaker TensorFlow DLC Dockerfiles pour la version 2.9 ou ultérieure. Les chemins d'accès aux fichiers Dockerfile sont généralement au format suivant : tensorflow/training/docker/<tensorflow-version>/py3/<cuda-version>/Dockerfile.gpu. Dans les Dockerfiles, vous devriez trouver les lignes de code pour réinstaller le TensorFlow binaire AWS géré (spécifié dans la variable d'TF_URLenvironnement) et les autres dépendances dans l'ordre. La section de réinstallation doit ressembler à l'exemple suivant :

# tf-models does not respect existing installations of TensorFlow # and always installs open source TensorFlow RUN pip3 install --no-cache-dir -U \ tf-models-official==x.y.z RUN pip3 uninstall -y tensorflow tensorflow-gpu \ ; pip3 install --no-cache-dir -U \ ${TF_URL} \ tensorflow-io==x.y.z \ tensorflow-datasets==x.y.z

Génération et envoi (push) vers ECR

Pour générer et envoyer (push) votre conteneur Docker vers Amazon ECR, suivez les instructions des liens suivants :

Exécuter à l'aide de l' SageMaker estimateur du SDK Python

Utilisez l'estimateur du SageMaker TensorFlow cadre comme d'habitude. Vous devez spécifier image_uri pour utiliser le nouveau conteneur que vous avez hébergé dans Amazon ECR.

import sagemaker, boto3 from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format( account_id, region, uri_suffix, ecr_repository + tag ) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/tf-custom-container-test:latest estimator = TensorFlow( image_uri=image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job', instance_count=1, instance_type='ml.p3.8xlarge' compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) # Start training estimator.fit()

Activer le compilateur SageMaker d'entraînement à l'aide de SageMaker CreateTrainingJob l'opération API

SageMaker Les options de configuration du compilateur de formation doivent être spécifiées via le HyperParameters champ AlgorithmSpecification et dans la syntaxe de la demande pour l'opération CreateTrainingJob d'API.

"AlgorithmSpecification": { "TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false" }

Pour trouver la liste complète des URI d'images de conteneurs de deep learning sur lesquels SageMaker Training Compiler est implémenté, consultezCadres pris en charge.