Verwenden Sie den Debugger mit benutzerdefinierten Schulungscontainern - 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.

Verwenden Sie den Debugger mit benutzerdefinierten Schulungscontainern

Amazon SageMaker Debugger ist für alle Deep-Learning-Modelle verfügbar, die Sie zu Amazon SageMaker mitbringen. DieAWS CLI, SageMakerEstimatorAPI und die Debugger-APIs ermöglichen es Ihnen, beliebige Docker-Basisimages zu verwenden, um Container zu erstellen und anzupassen, um Ihre Modelle zu trainieren. Um Debugger mit benutzerdefinierten Containern verwenden zu können, müssen Sie eine minimale Änderung an Ihrem Schulungsskript vornehmen, um den Debugger-Hook-Callback zu implementieren und Tensoren aus Schulungsaufträgen abzurufen.

Sie benötigen die folgenden Ressourcen, um einen benutzerdefinierten Container mit Debugger zu erstellen.

Ein umfassendes Beispiel für die Verwendung von Debugger mit einem benutzerdefinierten Trainingscontainer finden Sie im folgenden Beispiel-Notebook.

Tipp

Dieser benutzerdefinierte Container mit Debugger Guide ist eine Erweiterung desAnpassen Ihres eigenen SchulungscontainerAnleitung, mit der Sie gründlich erfahren, wie Sie Ihren benutzerdefinierten Schulungscontainer erstellen und an Amazon ECR schieben können.

Bereiten Sie sich darauf vor, einen benutzerdefinierten Trainingscontainer

Um einen Docker-Container zu erstellen, sollte die grundlegende Struktur von Dateien wie folgt aussehen:

├── debugger_custom_container_test_notebook.ipynb # a notebook to run python snippet codes └── debugger_custom_container_test_folder # this is a docker folder ├── your-training-script.py # your training script with Debugger hook └── Dockerfile # a Dockerfile to build your own container

Registrieren Sie Debugger Hook für Ihr Trainingsskript

Um Ihr Modelltraining zu debuggen, müssen Sie Ihrem Trainingsskript einen Debugger-Hook hinzufügen.

Anmerkung

Dieser Schritt ist erforderlich, um Modellparameter (Ausgangstensoren) für das Debuggen Ihres Modelltrainings zu sammeln. Wenn Sie nur überwachen und profilieren möchten, können Sie diesen Hook-Registrierungsschritt überspringen und dendebugger_hook_config-Parameter beim Erstellen eines Schätzers.

Der folgende Beispielcode zeigt die Struktur eines Trainingsskripts, das das Keras ResNet50-Modell verwendet, und wie der Debugger-Hook als Keras-Callback zum Debuggen übergeben wird. Um ein vollständiges Trainingsskript zu finden, sieheTensorFlow Trainingsskript mit SageMaker Debugger-Hookaus.

# An example of training script (your-training-script.py) import tensorflow.compat.v2 as tf from tensorflow.keras.applications.resnet50 import ResNet50 import smdebug.tensorflow as smd def train(batch_size, epoch, model, hook): ... model.fit(X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, # smdebug modification: Pass the Debugger hook in the main() as a Keras callback callbacks=[hook]) def main(): parser=argparse.ArgumentParser(description="Train resnet50 cifar10") # hyperparameter settings parser.add_argument(...) args = parser.parse_args() model=ResNet50(weights=None, input_shape=(32,32,3), classes=10) # Add the following line to register the Debugger hook for Keras. hook=smd.KerasHook.create_from_json_file() # Start the training. train(args.batch_size, args.epoch, model, hook) if __name__ == "__main__": main()

Weitere Informationen zum Registrieren des Debugger-Hook für die unterstützten Frameworks und Algorithmus finden Sie unter den folgenden Links in der SmDeBug-Clientbibliothek:

In den Trainingsskripten der folgenden Beispiel-Notebooks finden Sie weitere Beispiele, wie Sie die Debugger-Hooks zu Trainingsskripten hinzufügen und Ausgabe-Tensoren im Detail sammeln können:

  • Debugger im Skriptmodus mit dem TensorFlow 2.1-Framework

    Um den Unterschied zwischen der Verwendung von Debugger in einem Deep Learning-Container und in einem Skript-Modus zu sehen, öffnen Sie dieses Notebook und vergleichen Sie es mit dem vorherigen Notebook-Beispiel für Debugger in einem Deep Learning-Container in TensorFlow v2.1.

    Im Skriptmodus wird der Hook-Konfigurationsteil aus dem Skript entfernt, in dem Sie die Schätzfunktion festlegen. Stattdessen wird die Debugger-Hook-Funktion mit dem Trainingsskript zusammengeführt.TensorFlow Keras ResNet Trainingsskript im Skriptmodusaus. Das Trainingsskript importiert die smdebug-Bibliothek in die erforderliche TensorFlow Keras-Umgebung, um mit dem TensorFlow ResNet50-Algorithmus zu kommunizieren. Es implementiert auch manuell die smdebug-Hook-Funktionalität durch Hinzufügen des callbacks=[hook]-Arguments innerhalb der train-Funktion (in Zeile 49) und der manuellen Hook-Konfiguration (in Zeile 89), die über das SageMaker-Python-SDK bereitgestellt wird.

    In diesem Skriptmodus-Beispiel wird die Trainingsaufgabe im TF 2.1-Framework für den direkten Vergleich mit der Null-Skriptänderung im TF 2.1-Beispiel ausgeführt. Der Vorteil der Einrichtung von Debugger im Skriptmodus liegt in der Flexibilität bei der Auswahl von Framework-Versionen, die nicht von abgedeckt werdenAWSDeep Learning Containers

  • Verwenden von Amazon SageMaker SageMaker-Debugger in einem PyTorch-Container im Skriptmodus

    Dieses Notebook aktiviert Debugger im Skriptmodus im PyTorch v1.3.1-Framework. PyTorch v1.3.1 wird von SageMaker-Containern unterstützt, und dieses Beispiel zeigt Details zum Ändern eines Trainingsskripts.

    Die SageMaker PyTorch-Schätzfunktion befindet sich standardmäßig bereits im Skriptmodus. Sie werden im Notebook feststellen, dass die Zeile zur Aktivierung von script_mode nicht in der Schätzungskonfiguration enthalten ist.

    Dieses Notizbuch zeigt detaillierte Schritte zum Ändernein originales PyTorch Trainingsskriptzueine geänderte Version mit aktiviertem Debuggeraus. Darüber hinaus zeigt dieses Beispiel, wie Sie die integrierten Debugger-Regeln verwenden können, um Trainingsprobleme wie das Problem mit dem Verschwinden von Gradienten zu erkennen, und wie Sie die Debugger-Testfunktionen verwenden können, um die gespeicherten Tensoren aufzurufen und zu analysieren.

Erstellen und Konfigurieren einer Dockerfile

Öffnen Sie Ihren SageMaker JupyterLab und erstellen Sie einen neuen Ordner,debugger_custom_container_test_folderin diesem Beispiel, um Ihr Trainingsskript zu speichern undDockerfileaus. Das folgende Codebeispiel ist einDockerfiledas beinhaltet essentielle Docker-Build-Lob. Fügen Sie folgenden Code in dieDockerfileTextdatei und speichern Sie sie. Laden Sie Ihr Trainingsskript in denselben Ordner hoch.

# Specify a docker base image FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3 RUN /usr/bin/python3 -m pip install --upgrade pip RUN pip install --upgrade protobuf # Install required packages to enable the SageMaker Python SDK and the smdebug library RUN pip install sagemaker-training RUN pip install smdebug CMD ["bin/bash"]

Wenn Sie ein vorgefertigtes verwenden möchtenAWSDeep Learning Container-Bild, sieheVerfügbarAWSDeep Learning Containersaus.

Erstellen und schieben Sie den benutzerdefinierten Schulungscontainer an Amazon ECR

Erstellen Sie ein Test-Notizbuch,debugger_custom_container_test_notebook.ipynbführen Sie folgenden Code in der Notebook-Zelle aus. Dies wird auf diedebugger_byoc_test_docker-Verzeichnis, baue den Docker mit dem angegebenenalgorithm_nameund schieben Sie den Docker-Container zu Ihrem Amazon ECR.

import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'sagemaker-debugger-mnist-byoc-tf2' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) !docker build -t $ecr_repository docker !$(aws ecr get-login --region $region --registry-ids $account_id --no-include-email) !aws ecr create-repository --repository-name $ecr_repository !docker tag {ecr_repository + tag} $byoc_image_uri !docker push $byoc_image_uri
Tipp

Wenn Sie eines derAWSDeep Learning Container-Basisimages führen Sie den folgenden Code aus, um sich bei Amazon ECR anzumelden und auf das Deep Learning Container-Image-Repository zuzugreifen

! aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com

Ausführen und Debuggen von Schulungsaufträgen mit dem benutzerdefinierten Schulungscontainer

Nachdem Sie Ihren Docker-Container erstellt und an Amazon ECR weitergegeben haben, konfigurieren Sie einen SageMaker-Schätzer mit Ihrem Trainingsskript und den Debugger-spezifischen Parametern. Nachdem Sie dieestimator.fit()sammelt Debugger Output-Tensoren, überwacht sie und erkennt Trainingsprobleme. Mit den gespeicherten Tensoren können Sie den Schulungsjob weiter analysieren, indem Sie diesmdebugKernfunktionen und Tools. Konfigurieren eines Workflows des Debugger-Regelüberwachungsprozesses mit Amazon CloudWatch Events undAWS Lambdakönnen Sie einen Stopping-Schulungsauftrag automatisieren, wenn die Debugger-Regeln Schulungsprobleme erkennen.

import sagemaker from sagemaker.estimator import Estimator from sagemaker.debugger import Rule, DebuggerHookConfig, CollectionConfig, rule_configs profiler_config=ProfilerConfig(...) debugger_hook_config=DebuggerHookConfig(...) rules=[ Rule.sagemaker(rule_configs.built_in_rule()), ProfilerRule.sagemaker(rule_configs.BuiltInRule()) ] estimator=Estimator( image_uri=byoc_image_uri, entry_point="./debugger_custom_container_test_folder/your-training-script.py" role=sagemaker.get_execution_role(), base_job_name='debugger-custom-container-test', instance_count=1, instance_type='ml.p3.2xlarge', # Debugger-specific parameters profiler_config=profiler_config, debugger_hook_config=debugger_hook_config, rules=rules ) # start training estimator.fit()