Definieren Sie Metriken und Umgebungsvariablen - 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.

Definieren Sie Metriken und Umgebungsvariablen

Ein Tuning-Job optimiert Hyperparameter für Trainingsjobs, die er startet, indem er eine Metrik zur Leistungsbewertung verwendet. Diese Anleitung zeigt, wie Sie Metriken definieren, sodass Sie einen benutzerdefinierten Algorithmus für das Training oder einen integrierten Algorithmus von Amazon verwenden können SageMaker. Dieses Handbuch zeigt auch, wie Sie Umgebungsvariablen während eines AMT-Jobs (Automatic Model Tuning) angeben.

Definieren von Metriken

Amazon SageMaker Hyperparameter Tuning analysiert Ihre Algorithmen stdout und stderr Streams für maschinelles Lernen, um Messwerte wie Verlust oder Validierungsgenauigkeit zu ermitteln. Die Metriken zeigen, wie gut das Modell mit dem Datensatz abschneidet.

In den folgenden Abschnitten wird erläutert, wie zwei Arten von Algorithmen für das Training verwendet werden: integrierte und benutzerdefinierte.

Verwenden Sie einen integrierten Algorithmus für das Training

Wenn Sie einen der SageMaker integrierten Algorithmen verwenden, sind die Metriken bereits für Sie definiert. Darüber hinaus senden die integrierten Algorithmen automatisch Metriken zur Optimierung an die Hyperparameter-Abstimmung. Diese Metriken werden auch in CloudWatch Amazon-Logs geschrieben. Weitere Informationen finden Sie unter SageMakerAmazon-Ereignisse mit Amazon protokollieren CloudWatch.

Wählen Sie als objektive Metrik für den Tuning-Auftrag eine der Metriken, die der integrierte Algorithmus ausgibt. Eine Liste der verfügbaren Metriken finden Sie im Abschnitt zur Modelloptimierung für den entsprechenden Algorithmus unter Verwenden von SageMaker Amazon-integrierten Algorithmen oder vortrainierten Modellen.

Sie können bis zu 40 Metriken wählen, die Ihr Optimierungsauftrag überwachen sollen. Wählen Sie eine dieser Metriken als Zielmetrik aus. Der Hyperparameter-Optimierungsjob gibt den Trainingsauftrag zurück, der im Vergleich zur Zielmetrik am besten abgeschnitten hat.

Anmerkung

Bei der Hyperparameter-Optimierung wird automatisch ein zusätzlicher Hyperparameter gesendet_tuning_objective_metric, um Ihre Zielmetrik an den Optimierungsjob weiterzuleiten, der während des Trainings verwendet werden kann.

Verwenden Sie einen benutzerdefinierten Algorithmus für das Training

In diesem Abschnitt wird gezeigt, wie Sie Ihre eigenen Metriken definieren, um Ihren eigenen benutzerdefinierten Algorithmus für das Training zu verwenden. Stellen Sie dabei sicher, dass Ihr Algorithmus mindestens eine Metrik in stderr oder schreibtstdout. Beim Hyperparameter-Tuning werden diese Streams analysiert, um Algorithmusmetriken zu finden, die zeigen, wie gut das Modell mit dem Datensatz abschneidet.

Sie können benutzerdefinierte Metriken definieren, indem Sie einen Namen und einen regulären Ausdruck für jede Metrik angeben, die Ihr Tuning-Job überwacht. Übergeben Sie diese Metrikdefinitionen dann im TrainingJobDefinition Parameter im MetricDefinitions Feld von AlgorithmSpecification an die CreateHyperParameterTuningJobAPI.

Im Folgenden sehen Sie eine Beispielausgabe aus einem Protokoll, das in stderr oder stdout von einem Trainingsalgorithmus geschrieben wurde.

GAN_loss=0.138318; Scaled_reg=2.654134; disc:[-0.017371,0.102429] real 93.3% gen 0.0% disc-combined=0.000000; disc_train_loss=1.374587; Loss = 16.020744; Iteration 0 took 0.704s; Elapsed=0s

Das folgende Codebeispiel zeigt, wie man reguläre Ausdrücke in Python (regex) verwendet. Dies wird verwendet, um die Beispielprotokollausgabe zu durchsuchen und die numerischen Werte von vier verschiedenen Metriken zu erfassen.

[ { "Name": "ganloss", "Regex": "GAN_loss=(.*?);", }, { "Name": "disc-combined", "Regex": "disc-combined=(.*?);", }, { "Name": "discloss", "Regex": "disc_train_loss=(.*?);", }, { "Name": "loss", "Regex": "Loss = (.*?);", }, ]

In regulären Ausdrücken werden Klammern () verwendet, um Teile des regulären Ausdrucks zu gruppieren.

  • Für die im Codebeispiel definierte loss Metrik erfasst der Ausdruck (.*?); jedes Zeichen zwischen dem exakten Text "Loss=" und dem ersten Semikolon (;).

  • Das Zeichen . weist den regulären Ausdruck an, einem beliebigen Zeichen zu entsprechen.

  • Das * Zeichen entspricht null oder mehr Zeichen.

  • Das Zeichen ? bedeutet, dass das ; Zeichen nur bis zur ersten Instance erfasst wird.

Die im Codebeispiel definierte Verlustmetrik wird Loss = 16.020744 aus der Beispielausgabe übernommen.

Wählen Sie eine der definierten Metriken als objektive Metrik für den Optimierungsauftrag aus. Wenn Sie die SageMaker API verwenden, geben Sie den Wert des name Schlüssels in das HyperParameterTuningJobObjective Feld des HyperParameterTuningJobConfig Parameters ein, den Sie an den CreateHyperParameterTuningJobVorgang senden.

So geben Sie Umgebungsvariablen an

SageMaker AMT optimiert Hyperparameter innerhalb eines Tuning-Jobs, um die besten Parameter für die Modellleistung zu finden. Sie können Umgebungsvariablen verwenden, um Ihren Tuning-Auftrag so zu konfigurieren, dass er sein Verhalten ändert. Sie können Umgebungsvariablen, die Sie während des Trainings verwendet haben, auch in Ihrem Tuning-Job verwenden.

Wenn Sie eine Umgebungsvariable aus Ihrem Optimierungsjob verwenden oder eine neue Umgebungsvariable angeben möchten, geben Sie Environment in der SageMaker HyperParameterTrainingJobDefinitionAPI einen Zeichenkettenwert für ein. Übergeben Sie diese Definition des Schulungsauftrags an die CreateHyperParameterTuningJobAPI.

Beispielsweise kann die Umgebungsvariable SM_LOG_LEVEL auf die folgenden Werte gesetzt werden, um die Ausgabe eines Python-Containers anzupassen.

NOTSET=0 DEBUG=10 INFO=20 WARN=30 ERROR=40 CRITICAL=50

Um beispielsweise die Protokollebene auf 10 das Debuggen Ihrer Container-Logs festzulegen, setzen Sie die Umgebungsvariable innerhalb von wie folgt. HyperParameterTrainingJobDefinition

{ "HyperParameterTuningJobConfig": { ..., } "TrainingJobDefinition": { ..., "Environment" : [ { "SM_LOG_LEVEL": 10 } ], ..., }, ..., }