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. In dieser Anleitung wird auch gezeigt, wie Umgebungsvariablen während eines Jobs zur automatischen Modelloptimierung (AMT) angegeben werden.

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 an den CreateHyperParameterTuningJobAPIim TrainingJobDefinition Parameter im MetricDefinitions Feld vonAlgorithmSpecification.

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 den verwenden SageMaker API, geben Sie den Wert des name Schlüssels im HyperParameterTuningJobObjective Feld des HyperParameterTuningJobConfig Parameters an, den Sie an die CreateHyperParameterTuningJobOperation senden.

So geben Sie Umgebungsvariablen an

SageMaker AMToptimiert 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 innerhalb des Environment SageMaker HyperParameterTrainingJobDefinitionAPI. Geben Sie diese Definition des Schulungsauftrags an die weiter 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 zum Debuggen Ihrer Container-Logs festzulegen, setzen Sie die Umgebungsvariable innerhalb von wie folgt. HyperParameterTrainingJobDefinition

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