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, SageMakerEstimator
API 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 Docker-Basisimage Ihrer Wahl
Ihr Trainingsskript mit registriertem Debugger-Hook — Weitere Informationen zum Registrieren eines Debugger-Hook für Ihr Trainingsskript finden Sie unterRegistrieren Sie Debugger Hook für Ihr Trainingsskriptaus.
Ein umfassendes Beispiel für die Verwendung von Debugger mit einem benutzerdefinierten Trainingscontainer finden Sie im folgenden Beispiel-Notebook.
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.
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-Hook
# 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 Skriptmodus
aus. Das Trainingsskript importiert die smdebug
-Bibliothek in die erforderliche TensorFlow Keras-Umgebung, um mit dem TensorFlow ResNet50-Algorithmus zu kommunizieren. Es implementiert auch manuell diesmdebug
-Hook-Funktionalität durch Hinzufügen descallbacks=[hook]
-Arguments innerhalb dertrain
-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 Trainingsskript
zueine geänderte Version mit aktiviertem Debugger aus. 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_folder
in diesem Beispiel, um Ihr Trainingsskript zu speichern undDockerfile
aus. Das folgende Codebeispiel ist einDockerfile
das beinhaltet essentielle Docker-Build-Lob. Fügen Sie folgenden Code in dieDockerfile
Textdatei 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 Containers
Erstellen und schieben Sie den benutzerdefinierten Schulungscontainer an Amazon ECR
Erstellen Sie ein Test-Notizbuch,debugger_custom_container_test_notebook.ipynb
führen Sie folgenden Code in der Notebook-Zelle aus. Dies wird auf diedebugger_byoc_test_docker
-Verzeichnis, baue den Docker mit dem angegebenenalgorithm_name
und 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
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 diesmdebug
Kernfunktionen 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()