Ausführen von TensorFlow Trainingsaufträgen mit dem SageMaker Training Compiler - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ausführen von TensorFlow Trainingsaufträgen mit dem SageMaker Training Compiler

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

Verwenden des SageMaker Python SDK

Um den SageMaker Training Compiler zu aktivieren, fügen Sie den -compiler_configParameter zum SageMaker TensorFlow oder Hugging Face Estimator hinzu. Importieren Sie die TrainingCompilerConfig-Klasse und übergeben Sie eine Instanz davon an den compiler_config-Parameter. Die folgenden Codebeispiele zeigen die Struktur der SageMaker Schätzerklassen mit aktiviertem SageMaker Training Compiler.

Tipp

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

Anmerkung

SageMaker Der Training Compiler für TensorFlow ist über die SageMaker TensorFlow Framework-Schätzer und Hugging Face 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 den minimalen Satz von Parametern, die zum Ausführen eines SageMaker Trainingsauftrags mit dem Compiler erforderlich sind.

Anmerkung

Wenn Sie den SageMaker Hugging Face Estimator verwenden, müssen Sie die compiler_config Parameter transformers_version, tensorflow_version, und angebenhyperparameters, 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 Instanzen an.

  • instance_type (str) — Erforderlich. Geben Sie den Instanztyp an.

  • transformers_version (str) – Nur erforderlich, wenn der SageMaker Hugging Face-Schätzer verwendet wird. Geben Sie die vom SageMaker Training Compiler unterstützte Hugging Face Transformers-Bibliotheksversion an. 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. Informationen zu verfügbaren Versionen finden Sie unter Unterstützte Frameworks.

    Anmerkung

    Wenn Sie den SageMaker TensorFlow Schätzer verwenden, müssen Sie angebenframework_version.

    Wenn Sie den SageMaker Hugging Face Estimator verwenden, müssen Sie sowohl als auch angebentransformers_versiontensorflow_version.

  • 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, versuchen Sie größere Batchgrößen auszuprobieren 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 SageMaker Beispiel für Notizbücher und Blogs zum Training Compiler.

  • compiler_config (TrainingCompilerConfig Objekt) – Erforderlich. Fügen Sie diesen Parameter ein, 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 anFalse, um den SageMaker Training Compiler ein- oder auszuschalten. 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 sich dies auf die Leistung des SageMaker Training Compilers auswirken. Wir empfehlen Ihnen, den Debugger zu deaktivieren, wenn Sie den SageMaker Training Compiler ausführen, um sicherzustellen, dass es keine Auswirkungen auf die Leistung gibt. 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 Python SDK und Erweitern von SageMaker Framework Deep Learning Containers

AWS Deep Learning Containers (DLC) zur TensorFlow Verwendung angepasster Versionen von TensorFlow , die zusätzlich zum Open-Source- TensorFlow Framework Änderungen enthalten. Die SageMaker Framework Deep Learning Containers sind für die zugrunde liegende AWS Infrastruktur und Amazon optimiert SageMaker. Mit dem Vorteil der Verwendung der DLCs fügt die Integration von SageMaker Training Compiler mehr Leistungsverbesserungen hinzu als die native 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 verfügbar TensorFlow.

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

Erstellen einer Docker-Datei

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

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

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

Berücksichtigen Sie die folgenden Fallstricke bei der Erweiterung von SageMaker Framework-DLCs:

  • Deinstallieren oder ändern Sie die Version von TensorFlow Paketen in SageMaker Containern nicht explizit. Dadurch werden die AWS optimierten TensorFlow Pakete von Open-Source- TensorFlow Paketen ü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 deinstallieren möglicherweise implizit die AWS optimierten TensorFlow und installieren Open-Source- TensorFlow Pakete.

Es gibt beispielsweise ein bekanntes Problem, dass die Bibliotheken tensorflow/models und tensorflow/text immer versuchen, Open Source neu zu installieren TensorFlow. Wenn Sie diese Bibliotheken installieren müssen, um eine bestimmte Version für Ihren Anwendungsfall auszuwählen, empfehlen wir Ihnen, sich die SageMaker TensorFlow DLC-Dockerfiles für v2.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 AWS verwaltete TensorFlow Binärdateien (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:

Führen Sie mit dem SageMaker Python-SDK-Schätzer aus

Verwenden Sie den SageMaker TensorFlow Framework-Schätzer 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 Compilers mithilfe der SageMaker CreateTrainingJob API-Operation

SageMaker Die Konfigurationsoptionen des Training Compilers müssen über das HyperParameters Feld AlgorithmSpecification und in der Anforderungssyntax für die APICreateTrainingJob-Operation 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 SageMaker Training Compiler implementiert ist, finden Sie unter Unterstützte Frameworks.