Zugriff auf einen Trainingscontainer über AWS Systems Manager für Remote-Debugging - 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.

Zugriff auf einen Trainingscontainer über AWS Systems Manager für Remote-Debugging

Sie können sich sicher über AWS Systems Manager (SSM) mit SageMaker Trainingscontainern verbinden. Auf diese Weise erhalten Sie Zugriff auf Shell-Ebene, um Trainingsaufträge zu debuggen, die im Container ausgeführt werden. Sie können auch Befehle und Antworten protokollieren, die an Amazon gestreamt werden CloudWatch. Wenn Sie Ihre eigene Amazon Virtual Private Cloud (VPC) zum Trainieren eines Modells verwenden, können Sie verwenden, AWS PrivateLink um einen VPC-Endpunkt für SSM einzurichten und eine private Verbindung zu Containern über SSM herzustellen.

Sie können eine Verbindung zu SageMaker Framework Containers herstellen oder eine Verbindung zu Ihrem eigenen Trainingscontainer herstellen, der mit der SageMaker Trainingsumgebung eingerichtet wurde.

Einrichten von IAM-Berechtigungen

Um SSM in Ihrem SageMaker Trainingscontainer zu aktivieren, müssen Sie eine IAM-Rolle für den Container einrichten. Damit Sie oder Benutzer in Ihrem AWS Konto über SSM auf die Trainingscontainer zugreifen können, müssen Sie IAM-Benutzer mit Berechtigungen zur Verwendung von SSM einrichten.

IAM-Rolle

Damit ein SageMaker Trainingscontainer mit dem SSM-Agenten beginnen kann, geben Sie eine IAM-Rolle mit SSM-Berechtigungen an.

Um das Remote-Debugging für Ihren Trainingsauftrag zu aktivieren, SageMaker muss den SSM-Agenten im Trainingscontainer starten, wenn der Trainingsauftrag beginnt. Damit der SSM-Agent mit dem SSM-Service kommunizieren kann, fügen Sie der IAM-Rolle, die Sie zum Ausführen Ihres Trainingsauftrags verwenden, die folgende Richtlinie hinzu.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

IAM-Benutzer

Fügen Sie die folgende Richtlinie hinzu, um einem IAM-Benutzer SSM-Sitzungsberechtigungen zum Herstellen einer Verbindung mit einem SSM-Ziel zu erteilen. In diesem Fall ist das SSM-Ziel ein SageMaker Trainingscontainer.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": "*" } ] }

Sie können IAM-Benutzer so einschränken, dass sie sich nur mit Containern für bestimmte Trainingsaufträge verbinden können, indem Sie den Condition Schlüssel hinzufügen, wie im folgenden Richtlinienbeispiel gezeigt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "sagemaker-training-job:*" ] } } } ] }

Sie können den sagemaker:EnableRemoteDebug Bedingungsschlüssel auch explizit verwenden, um das Remote-Debugging einzuschränken. Im Folgenden finden Sie ein Beispiel für eine Richtlinie für IAM-Benutzer zum Einschränken des Remote-Debuggings.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyRemoteDebugInTrainingJob", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:UpdateTrainingJob" ], "Resource": "*", "Condition": { "BoolIfExists": { "sagemaker:EnableRemoteDebug": false } } } ] }

Weitere Informationen finden Sie unter Bedingungsschlüssel für Amazon SageMaker in der AWS Service-Autorisierungs-Referenz.

So aktivieren Sie Remote-Debugging für einen SageMaker Trainingsauftrag

In diesem Abschnitt erfahren Sie, wie Sie das Remote-Debugging aktivieren, wenn Sie einen Trainingsauftrag in Amazon starten oder aktualisieren SageMaker.

SageMaker Python SDK

Mit der Schätzerklasse im SageMaker Python SDK können Sie das Remote-Debugging mithilfe des enable_remote_debug Parameters oder der disable_remote_debug() Methoden enable_remote_debug() und ein- oder ausschalten.

So aktivieren Sie das Remote-Debugging beim Erstellen eines Trainingsauftrags

Um das Remote-Debugging zu aktivieren, wenn Sie einen neuen Trainingsauftrag erstellen, setzen Sie den enable_remote_debug Parameter auf True. Der Standardwert ist False. Wenn Sie diesen Parameter also überhaupt nicht oder explizit auf festlegenFalse, ist die Remote-Debugging-Funktion deaktiviert.

import sagemaker session = sagemaker.Session() estimator = sagemaker.estimator.Estimator( ..., sagemaker_session=session, image_uri="<your_image_uri>", #must be owned by your organization or Amazon DLCs role=role, instance_type="ml.m5.xlarge", instance_count=1, output_path=output_path, max_run=1800, enable_remote_debug=True )

So aktivieren Sie das Remote-Debugging durch Aktualisieren eines Trainingsauftrags

Mit den folgenden Methoden der Schätzerklasse können Sie Remote-Debugging aktivieren oder deaktivieren, während ein Trainingsauftrag ausgeführt wird, wenn der SecondaryStatus des Auftrags Downloading oder istTraining.

# Enable RemoteDebug estimator.enable_remote_debug() # Disable RemoteDebug estimator.disable_remote_debug()
AWS SDK for Python (Boto3)

So aktivieren Sie das Remote-Debugging beim Erstellen eines Trainingsauftrags

Um das Remote-Debugging zu aktivieren, wenn Sie einen neuen Trainingsauftrag erstellen, legen Sie den Wert für den EnableRemoteDebug Schlüssel True im RemoteDebugConfig Parameter auf fest.

import boto3 sm = boto3.Session(region_name=region).client("sagemaker") # Start a training job sm.create_training_job( ..., TrainingJobName=job_name, AlgorithmSpecification={ // Specify a training Docker container image URI // (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, RoleArn=iam_role_arn, OutputDataConfig=output_path, ResourceConfig={ "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, StoppingCondition={ "MaxRuntimeInSeconds": 86400 }, RemoteDebugConfig={ "EnableRemoteDebug": True } )

So aktivieren Sie das Remote-Debugging durch Aktualisieren eines Trainingsauftrags

Mit der update_traing_job API können Sie Remote-Debugging aktivieren oder deaktivieren, während ein Trainingsauftrag ausgeführt wird, wenn der SecondaryStatus des Auftrags Downloading oder istTraining.

# Update a training job sm.update_training_job( TrainingJobName=job_name, RemoteDebugConfig={ "EnableRemoteDebug": True # True | False } )
AWS Command Line Interface (CLI)

So aktivieren Sie das Remote-Debugging beim Erstellen eines Trainingsauftrags

Bereiten Sie eine CreateTrainingJob Anforderungsdatei im JSON-Format wie folgt vor.

// train-with-remote-debug.json { "TrainingJobName": job_name, "RoleArn": iam_role_arn, "AlgorithmSpecification": { // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": output_path }, "ResourceConfig": { "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

Nachdem Sie die JSON-Datei gespeichert haben, führen Sie den folgenden Befehl in dem Terminal aus, in dem Sie den Schulungsauftrag einreichen. Der folgende Beispielbefehl geht davon aus, dass die JSON-Datei den Namen hattrain-with-remote-debug.json. Wenn Sie es von einem Jupyter-Notebook aus ausführen, fügen Sie am Anfang der Zeile ein Ausrufezeichen (!) hinzu.

aws sagemaker create-training-job \ --cli-input-json file://train-with-remote-debug.json

So aktivieren Sie das Remote-Debugging durch Aktualisieren eines Trainingsauftrags

Bereiten Sie eine -UpdateTrainingJobAnforderungsdatei im JSON-Format wie folgt vor.

// update-training-job-with-remote-debug-config.json { "TrainingJobName": job_name, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

Nachdem Sie die JSON-Datei gespeichert haben, führen Sie den folgenden Befehl in dem Terminal aus, in dem Sie den Schulungsauftrag einreichen. Der folgende Beispielbefehl geht davon aus, dass die JSON-Datei den Namen hattrain-with-remote-debug.json. Wenn Sie es von einem Jupyter-Notebook aus ausführen, fügen Sie am Anfang der Zeile ein Ausrufezeichen (!) hinzu.

aws sagemaker update-training-job \ --cli-input-json file://update-training-job-with-remote-debug-config.json

Zugriff auf Ihren Trainingscontainer

Sie können auf einen Trainingscontainer zugreifen, wenn der SecondaryStatus des entsprechenden Trainingsauftrags istTraining. Die folgenden Codebeispiele zeigen, wie Sie den Status Ihres Trainingsauftrags mithilfe der DescribeTrainingJob-API überprüfen, wie Sie die Trainingsauftragsprotokolle in überprüfen CloudWatchund wie Sie sich beim Trainingscontainer anmelden.

So überprüfen Sie den Status eines Trainingsauftrags

SageMaker Python SDK

Um die eines SecondaryStatus Trainingsauftrags zu überprüfen, führen Sie den folgenden SageMaker Python-SDK-Code aus.

import sagemaker session = sagemaker.Session() # Describe the job status training_job_info = session.describe_training_job(job_name) print(training_job_info)
AWS SDK for Python (Boto3)

Um die eines SecondaryStatus Trainingsauftrags zu überprüfen, führen Sie den folgenden SDK for Python (Boto3)-Code aus.

import boto3 session = boto3.session.Session() region = session.region_name sm = boto3.Session(region_name=region).client("sagemaker") # Describe the job status sm.describe_training_job(TrainingJobName=job_name)
AWS Command Line Interface (CLI)

Führen Sie den folgenden AWS CLI Befehl für aus, um die SecondaryStatus eines Trainingsauftrags zu überprüfen SageMaker.

aws sagemaker describe-training-job \ --training-job-name job_name

So finden Sie den Hostnamen eines Trainingscontainers

Um über SSM eine Verbindung zum Trainingscontainer herzustellen, verwenden Sie dieses Format für die Ziel-ID: sagemaker-training-job:<training-job-name>_algo-<n>, wobei der Name des Container-Hosts algo-<n> ist. Wenn Ihr Auftrag auf einer einzelnen Instance ausgeführt wird, ist der Host immer algo-1. Wenn Sie einen verteilten Schulungsauftrag auf mehreren Instances ausführen, SageMaker erstellt eine gleiche Anzahl von Hosts und Protokollstreams. Wenn Sie beispielsweise 4 Instances verwenden, SageMaker erstellt algo-1, algo-2algo-3, und algo-4. Sie müssen bestimmen, welchen Protokollstream Sie debuggen möchten, und seine Hostnummer. Gehen Sie wie folgt vor, um auf Protokollstreams zuzugreifen, die einem Trainingsauftrag zugeordnet sind.

  1. Öffnen Sie die Amazon- SageMaker Konsole unter https://console.aws.amazon.com/sagemaker/.

  2. Wählen Sie im linken Navigationsbereich Training und dann Training-Jobs aus.

  3. Wählen Sie in der Liste Schulungsaufträge den Schulungsauftrag aus, den Sie debuggen möchten. Die Seite mit den Trainingsauftragsdetails wird geöffnet.

  4. Wählen Sie im Abschnitt Überwachen die Option Protokolle anzeigen aus. Die zugehörige Liste der Protokollstreams für Trainingsaufträge wird in der - CloudWatch Konsole geöffnet.

  5. Protokollstreamnamen werden im <training-job-name>/algo-<n>-<time-stamp> Format angezeigt, wobei den Hostnamen algo-<n> darstellt.

Weitere Informationen dazu, wie Konfigurationsinformationen für verteilte Schulungen mit mehreren Instances SageMaker verwaltet, finden Sie unter Konfiguration verteilter Schulungen.

So greifen Sie auf den Trainingscontainer zu

Verwenden Sie den folgenden Befehl im Terminal, um die SSM-Sitzung (aws ssm start-session) zu starten und eine Verbindung zum Trainingscontainer herzustellen.

aws ssm start-session --target sagemaker-training-job:<training-job-name>_algo-<n>

Wenn der Name des Trainingsauftrags beispielsweise lautet training-job-test-remote-debug und der Hostname lautetalgo-1, wird die Ziel-ID zu sagemaker-training-job:training-job-test-remote-debug_algo-1. Wenn die Ausgabe dieses Befehls ähnlich ist wie Starting session with SessionId:xxxxx, ist die Verbindung erfolgreich.

SSM-Zugriff mit AWS PrivateLink

Wenn Ihre Trainingscontainer in einer Amazon Virtual Private Cloud ausgeführt werden, die nicht mit dem öffentlichen Internet verbunden ist, können Sie verwenden, AWS PrivateLink um SSM zu aktivieren. AWS PrivateLink schränkt den gesamten Netzwerkverkehr zwischen Ihren Endpunkt-Instances, SSM und Amazon EC2 auf das Amazon-Netzwerk ein. Weitere Informationen zum Einrichten des SSM-Zugriffs mit AWS PrivateLink finden Sie unter Einrichten eines Amazon-VPC-Endpunkts für Session Manager.

Protokollieren von SSM-Sitzungsbefehlen und -ergebnissen

Nachdem Sie die Anweisungen unter Erstellen eines Session Manager-Voreinstellungsdokuments (Befehlszeile) befolgt haben, können Sie SSM-Dokumente erstellen, die Ihre Einstellungen für SSM-Sitzungen definieren. Sie können SSM-Dokumente verwenden, um Sitzungsoptionen zu konfigurieren, einschließlich Datenverschlüsselung, Sitzungsdauer und Protokollierung. Sie können beispielsweise angeben, ob Sitzungsprotokolldaten in einem Amazon Simple Storage Service (Amazon S3)-Bucket oder in einer Amazon- CloudWatch Logs-Gruppe gespeichert werden sollen. Sie können Dokumente erstellen, die allgemeine Einstellungen für alle Sitzungen für ein AWS Konto und definieren AWS-Region, oder Dokumente, die Einstellungen für einzelne Sitzungen definieren.

Fehlerbehebung durch Überprüfen von Fehlerprotokollen von SSM

Amazon lädt Fehler vom SSM-Agenten in Ihre CloudWatch Protokolle in der /aws/sagemaker/TrainingJobs Protokollgruppe SageMaker hoch. SSM-Agent-Protokollstreams werden in diesem Format benannt: <job-name>/algo-<n>-<timestamp>/ssm. Wenn Sie beispielsweise einen Schulungsauftrag mit zwei Knoten mit dem Namen erstellentraining-job-test-remote-debug, training-job-test-remote-debug/algo-<n>-<timestamp>/ssm werden das Schulungsauftragsprotokoll training-job-test-remote-debug/algo-<n>-<timestamp> und mehrere SSM-Agent-Fehlerprotokolle in Ihre CloudWatch -Protokolle hochgeladen. In diesem Beispiel können Sie die */ssm Protokollstreams überprüfen, um SSM-Probleme zu beheben.

training-job-test-remote-debug/algo-1-1680535238 training-job-test-remote-debug/algo-2-1680535238 training-job-test-remote-debug/algo-1-1680535238/ssm training-job-test-remote-debug/algo-2-1680535238/ssm

Überlegungen

Beachten Sie Folgendes, wenn Sie SageMaker Remote-Debugging verwenden.

  • Remote-Debugging wird für SageMaker Algorithmus-Container oder Container von SageMaker auf nicht unterstützt AWS Marketplace.

  • Sie können keine SSM-Sitzung für Container starten, für die die Netzwerkisolierung aktiviert ist, da die Isolierung ausgehende Netzwerkaufrufe verhindert.