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.
Themen
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
Weitere Informationen, die zu Ihrem Anwendungsfall passen, finden Sie unter einer der folgenden Optionen.
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_versionodertensorflow_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_versionangeben.Wenn Sie den Hugging-Face-Schätzer von SageMaker AI verwenden, müssen Sie sowohl
transformers_versionals auchtensorflow_versionangeben. -
hyperparameters(dict) – Optional. Geben Sie Hyperparameter für den Trainingsjob an, z. B.n_gpusbatch_size, undlearning_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 KlasseTrainingCompilerConfigaufgeführt.-
enabled(bool) – Optional. Geben SieTrueoderFalsean, um den SageMaker Training Compiler zu aktivieren oder zu deaktivieren. Der Standardwert istTrue. -
debug(bool) – Optional. Um detailliertere Trainingsprotokolle von Ihren Compiler-beschleunigten Trainingsaufträgen zu erhalten, ändern Sie es zuTrue. Die zusätzliche Protokollierung kann jedoch den Aufwand erhöhen und den kompilierten Trainingsjob verlangsamen. Der Standardwert istFalse.
-
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
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/modelstensorflow/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.zRUN 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
"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.