Führen Sie TensorFlow-Trainingsjobs mit dem SageMaker Training Compiler aus - Amazon SageMaker AI

Führen Sie TensorFlow-Trainingsjobs mit dem SageMaker Training Compiler aus

Sie können jede der SageMaker-AI-Schnittstellen verwenden, um einen Trainingsjob mit dem SageMaker Training Compiler auszuführen: Amazon SageMaker Studio Classic, Notebook-Instances für Amazon SageMaker, AWS SDK für Python (Boto3) und AWS Command Line Interface.

Verwenden des SageMaker Python SDK

Um den SageMaker Training Compiler zu aktivieren, fügen Sie den compiler_config-Parameter dem TensorFlow- oder Hugging-Face-Schätzer von SageMaker AI hinzu. Importieren Sie die TrainingCompilerConfig-Klasse und übergeben Sie eine Instance davon an den compiler_config-Parameter. Die folgenden Codebeispiele zeigen die Struktur der SageMaker-AI-Schätzerklassen bei aktiviertem SageMaker Training Compiler.

Tipp

Um mit vorgefertigten Modellen zu beginnen, die von den Bibliotheken TensorFlow und Transformers bereitgestellt werden, versuchen Sie, die in der Referenztabelle unter Getestete Modelle angegebenen Batchgrößen zu verwenden.

Anmerkung

Der SageMaker Training Compiler für TensorFlow ist über die Framework-Schätzer für TensorFlow und Hugging Face von SageMaker AI verfügbar.

Weitere Informationen, die zu Ihrem Anwendungsfall passen, finden Sie unter einer der folgenden Optionen.

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()

Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.

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()

Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.

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()
Tipp

Informationen zum Erstellen Ihres Trainingsskripts finden Sie auf den folgenden Seiten.

Die folgende Liste enthält die minimalen Parameter, die für die Ausführung eines SageMaker-Trainingsjobs mit dem Compiler erforderlich sind.

Anmerkung

Wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden, müssen Sie die Parameter transformers_version, tensorflow_version, hyperparameters und compiler_config angeben, um den SageMaker Training Compiler zu aktivieren. Sie können image_uri nicht verwenden, um die unter Unterstützte Frameworks aufgelisteten integrierten Deep-Learning-Container für den Trainingscompiler manuell anzugeben.

  • entry_point (str) – Erforderlich. Geben Sie den Dateinamen Ihres Trainingsskripts an.

  • instance_count (int) – Erforderlich. Geben Sie die Anzahl der Instances an.

  • instance_type (str) – Erforderlich. Geben Sie den Instance-Typ an.

  • transformers_version (str) – Nur erforderlich, wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden. Geben Sie die Hugging Face Transformers-Bibliotheksversion an, die vom SageMaker Training Compiler unterstützt wird. Die verfügbaren Versionen finden Sie unter Unterstützte Frameworks.

  • framework_version oder tensorflow_version (str) – Erforderlich. Geben Sie die TensorFlow-Version an, die vom SageMaker Training Compiler unterstützt wird. Die verfügbaren Versionen finden Sie unter Unterstützte Frameworks.

    Anmerkung

    Wenn Sie den TensorFlow-Schätzer von SageMaker AI verwenden, müssen Sie framework_version angeben.

    Wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden, müssen Sie sowohl transformers_version als auch tensorflow_version angeben.

  • hyperparameters (dict) – Optional. Geben Sie Hyperparameter für den Trainingsjob an, z. B. n_gpusbatch_size, und learning_rate. Wenn Sie den SageMaker Training Compiler aktivieren, probieren Sie größere Batchgrößen aus und passen Sie die Lernrate entsprechend an. Fallstudien zur Verwendung des Compilers und zur Anpassung der Batchgrößen zur Verbesserung der Trainingsgeschwindigkeit finden Sie unter Getestete Modelle und Beispiel-Notebooks und Blogs für den SageMaker Training Compiler.

  • compiler_config (TrainingCompilerConfig-Objekt) – Erforderlich. Fügen Sie diesen Parameter hinzu, um den SageMaker Training Compiler zu aktivieren. Nachfolgend sind die Parameter für die Klasse TrainingCompilerConfig aufgeführt.

    • enabled (bool) – Optional. Geben Sie True oder False an, um den SageMaker Training Compiler zu aktivieren oder zu deaktivieren. Der Standardwert ist True.

    • debug (bool) – Optional. Um detailliertere Trainingsprotokolle von Ihren Compiler-beschleunigten Trainingsaufträgen zu erhalten, ändern Sie es zu True. Die zusätzliche Protokollierung kann jedoch den Aufwand erhöhen und den kompilierten Trainingsjob verlangsamen. Der Standardwert ist False.

Warnung

Wenn Sie den SageMaker Debugger aktivieren, kann dies die Leistung von SageMaker Training Compiler beeinträchtigen. Wir empfehlen, den Debugger zu deaktivieren, wenn Sie den SageMaker Training Compiler ausführen, um sicherzustellen, dass die Leistung nicht beeinträchtigt wird. Weitere Informationen finden Sie unter Überlegungen. Um die Debugger-Funktionen auszuschalten, fügen Sie dem Schätzer die folgenden beiden Argumente hinzu:

disable_profiler=True, debugger_hook_config=False

Wenn der Trainingsjob mit dem Compiler erfolgreich gestartet wurde, erhalten Sie während der Job-Initialisierungsphase die folgenden Protokolle:

  • Mit TrainingCompilerConfig(debug=False)

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

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

Verwenden des SageMaker AI Python SDK und Erweiterung der Deep Learning Containers des SageMaker AI-Frameworks

AWS Deep Learning Containers (DLC) für TensorFlow verwenden angepasste Versionen von TensorFlow, die zusätzlich zum Open-Source-TensorFlow-Framework Änderungen enthalten. Die Deep Learning Containers des SageMaker-AI-Frameworks sind für die zugrunde liegende AWS-Infrastruktur und Amazon SageMaker AI optimiert. Mit dem Vorteil der Verwendung der DLCs bietet die Integration des SageMaker Training Compilers weitere Leistungsverbesserungen gegenüber dem nativen TensorFlow. Darüber hinaus können Sie einen benutzerdefinierten Trainingscontainer erstellen, indem Sie das DLC-Image erweitern.

Anmerkung

Diese Docker-Anpassungsfunktion ist derzeit nur für TensorFlow verfügbar.

Verwenden Sie die folgenden Anweisungen, um die TensorFlow-DLCs von SageMaker AI für Ihren Anwendungsfall zu erweitern und anzupassen.

Erstellen einer Docker-Datei

Verwenden Sie die folgende Dockerfile-Vorlage, um den TensorFlow-DLC von SageMaker AI zu erweitern. Sie müssen das TensorFlow-DLC-Image von SageMaker AI als Basis-Image Ihres Docker-Containers verwenden. Die Image-URIs für den TensorFlow-DLC von SageMaker AI finden Sie unter Unterstützte Frameworks.

# SageMaker AI 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 AI container # to determine user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # Add more code lines to customize for your use-case ...

Weitere Informationen finden Sie unter Schritt 2: Dockerfile- und Python-Trainingsskripts erstellen und hochladen.

Beachten Sie bei der Erweiterung der Framework-DLCs von SageMaker AI die folgenden Fallstricke:

  • Deinstallieren oder ändern Sie die Version von TensorFlow-Paketen in SageMaker-AI-Containern nicht explizit. Dadurch werden die AWS optimierten TensorFlow-Pakete durch Open-Source-TensorFlow-Pakete überschrieben, was zu Leistungseinbußen führen kann.

  • Achten Sie auf Pakete, die eine bestimmte TensorFlow-Version oder -Variante als Abhängigkeit haben. Diese Pakete können implizit den AWS optimierten TensorFlow deinstallieren und Open-Source-TensorFlow-Pakete installieren.

Es gibt beispielsweise ein bekanntes Problem, dass die Bibliotheken tensorflow/models und tensorflow/text immer versuchen, den Open-Source-TensorFlow neu zu installieren. Wenn Sie diese Bibliotheken installieren müssen, um eine bestimmte Version für Ihren Anwendungsfall auszuwählen, empfehlen wir Ihnen, sich die SageMaker AI TensorFlow DLC Dockerfiles für Version 2.9 oder höher anzusehen. Die Pfade zu den Dockerfiles haben normalerweise das folgende Format: tensorflow/training/docker/<tensorflow-version>/py3/<cuda-version>/Dockerfile.gpu. In den Dockerfiles sollten Sie die Codezeilen finden, um die AWS verwaltete TensorFlow-Binärdatei (angegeben für die TF_URL Umgebungsvariable) und andere Abhängigkeiten der Reihe nach neu zu installieren. Der Abschnitt für die Neuinstallation sollte wie das folgende Beispiel aussehen:

# 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

Erstellen und auf ECR übertragen

Folgen Sie den Anweisungen unter den folgenden Links, um Ihren Docker-Container zu erstellen und auf Amazon ECR zu übertragen:

Mit dem SageMaker Python SDK Estimator ausführen

Verwenden Sie den TensorFlow-Framework-Schätzer von SageMaker AI wie gewohnt. Sie müssen image_uri angeben, dass Sie den neuen Container verwenden möchten, den Sie in Amazon ECR gehostet haben.

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()

Aktivieren des SageMaker Training Compiler mithilfe des CreateTrainingJob-API-Vorgangs von SageMaker AI

SageMaker Training Compiler-Konfigurationsoptionen müssen über die Felder AlgorithmSpecification und HyperParameters in der Anforderungssyntax für den CreateTrainingJobAPI-Vorgang angegeben werden.

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

Eine vollständige Liste der Deep-Learning-Container-Image-URIs, für die der SageMaker Training Compiler implementiert wurde, finden Sie unter Unterstützte Frameworks.