Durchführen eines Hyperparameter-Optimierungsauftrags mit Warmstart - 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.

Durchführen eines Hyperparameter-Optimierungsauftrags mit Warmstart

Nutzen Sie einen Warmstart zum Starten eines Hyperparameter-Optimierungsauftrags mit einem oder mehreren vorherigen Optimierungsaufträgen als Ausgangspunkt. Die Ergebnisse der vorherigen Optimierungsaufträge werden verwendet, um Informationen darüber bereitzustellen, welche Kombinationen von Hyperparametern im neuen Optimierungsauftrag durchsucht werden sollen. Die Hyperparameter-Optimierung nutzt die Bayes- oder die Zufallssuche, um Kombinationen von Hyperparameter-Werten aus den von Ihnen angegebenen Bereichen auszuwählen. Weitere Informationen finden Sie unter So funktioniert das Hyperparameter-Tuning mit Amazon SageMaker . Durch die Verwendung von Informationen aus früheren Hyperparameter-Optimierungsaufträgen kann die Leistung des neuen Hyperparameter-Optimierungsauftrags verbessert werden, da die Suche nach der besten Kombination von Hyperparametern effizienter verläuft.

Anmerkung

Optimierungsaufträge mit Warmstart benötigen für den Start üblicherweise mehr Zeit als Standard-Hyperparameter-Optimierungsaufträge, da die Ergebnisse der übergeordneten Aufträge geladen werden müssen, bevor der Auftrag gestartet werden kann. Die längere Zeit ist abhängig von der Gesamtzahl der Trainingsaufträge, die von den übergeordneten Aufträgen gestartet werden.

Zu den folgenden Gründen, die für einen Warmstart sprechen, gehören:

  • Allmähliche Erhöhung der Anzahl der Trainingsaufträge über mehrere Abstimmungsaufträge auf der Grundlage der Ergebnisse nach jeder Iteration.

  • Um ein Modell mithilfe neuer Daten, die Sie erhalten haben, zu optimieren.

  • Um Hyperparameterbereiche zu ändern, die Sie in einem früheren Optimierungsauftrag verwendet haben, ändern Sie statische Hyperparameter in abstimmbare oder abstimmbare Hyperparameter in statische Werte.

  • Sie haben einen früheren Hyperparameter-Auftrag vorzeitig beendet oder er wurde unerwartet beendet.

Arten von Optimierungsaufträgen mit Warmstart

Es gibt zwei verschiedene Arten von Optimierungsaufträgen mit Warmstart:

IDENTICAL_DATA_AND_ALGORITHM

Der neue Hyperparameter-Optimierungsauftrag verwendet dieselben Eingabedaten und dasselbe Trainings-Image wie die übergeordneten Optimierungsaufträge. Sie können die zu durchsuchenden Hyperparameter-Bereiche und die maximale Anzahl an Trainingsaufträgen, die der Hyperparameter-Optimierungsauftrag startet, ändern. Sie können außerdem Hyperparameter von optimierbar zu statisch und von statisch zu optimierbar ändern, die Gesamtzahl der statischen plus optimierbaren Hyperparameter muss jedoch dieselbe bleiben wie in allen übergeordneten Aufträgen. Es ist nicht möglich, eine neue Version des Trainingsalgorithmus zu verwenden, es sei denn, die Änderungen in der neuen Version wirken sich nicht auf den Algorithmus selbst aus. Beispiel: Änderungen, die die Protokollierung verbessern oder Unterstützung für ein anderes Datenformat hinzufügen, sind zulässig.

Verwenden Sie identische Daten und Algorithmen, wenn Sie dieselben Trainingsdaten wie in einem vorherigen Hyperparameter-Optimierungsauftrag nutzen, jedoch die Gesamtzahl an Trainingsaufträgen erhöhen oder Bereiche oder Werte für Hyperparameter ändern möchten.

Wenn Sie einen Optimierungsauftrag mit Warmstart des Typs IDENTICAL_DATA_AND_ALGORITHM ausführen, gibt es in der Antwort DescribeHyperParameterTuningJob ein zusätzliches Feld mit dem Namen OverallBestTrainingJob. Der Wert dieses Feldes ist der Wert TrainingJobSummaryfür den Trainingsjob mit dem besten objektiven Metrikwert aller Trainingsjobs, die durch diesen Optimierungsjob gestartet wurden, und aller übergeordneten Jobs, die für den Warmstart-Tuning-Job angegeben wurden.

TRANSFER_LEARNING

Der neue Hyperparameter-Optimierungsauftrag kann Eingabedaten, Hyperparameter-Bereiche, die maximale Anzahl gleichzeitiger Trainingsaufträge und die maximale Anzahl an Trainingsaufträgen, die sich von denen der übergeordneten Hyperparameter-Optimierungsaufträge unterscheiden, umfassen. Sie können außerdem Hyperparameter von optimierbar zu statisch und von statisch zu optimierbar ändern, die Gesamtzahl der statischen plus optimierbaren Hyperparameter muss jedoch dieselbe bleiben wie in allen übergeordneten Aufträgen. Die Version des Trainingsalgorithmus-Image kann ebenfalls von der Version im übergeordneten Hyperparameter-Optimierungsauftrag abweichen. Wenn Sie Transferlernen verwenden, können Änderungen des Datensatzes oder Algorithmus, die wesentlichen Einfluss auf den Wert der objektiven Metrik haben, den Nutzen einer Optimierung mit Warmstart verringern.

Einschränkungen für die Optimierung mit Warmstart

Folgende Einschränkungen gelten für alle Optimierungsaufträge mit Warmstart:

  • Ein Optimierungsauftrag kann maximal 5 übergeordnete Aufträge haben und alle übergeordneten Aufträge müssen einen Endstatus aufweisen (Completed, Stopped oder Failed), bevor Sie den neuen Optimierungsauftrag starten.

  • Die im neuen Optimierungsauftrag verwendete objektive Metrik muss der objektiven Metrik entsprechen, die in den übergeordneten Aufträgen verwendet wurde.

  • Die Gesamtzahl der statischen plus optimierbaren Hyperparameter muss bei übergeordneten Aufträgen und neuem Optimierungsauftrag gleich sein. Aus diesem Grund sollten Sie einen Hyperparameter, den Sie möglicherweise als optimierbaren Hyperparameter in einem künftigen Optimierungsauftrag mit Warmstart verwenden möchten, als statischen Hyperparameter hinzufügen, wenn Sie einen Optimierungsauftrag erstellen.

  • Der Typ der einzelnen Hyperparameter (durchgehend, ganzzahlig, kategorisch) darf sich bei übergeordneten Aufträgen und dem neuen Optimierungsauftrag nicht unterscheiden.

  • Die Gesamtanzahl der Änderungen von optimierbaren Hyperparametern in den übergeordneten Aufträgen zu statischen Hyperparametern im neuen Optimierungsauftrag plus die Anzahl der Änderungen an den Werten der statischen Hyperparameter darf nicht höher als 10. Beispiel: Wenn der übergeordnete Auftrag über einen optimierbaren kategorischen Hyperparameter mit den möglichen Werten red und blue verfügt und Sie diesen Hyperparameter im neuen Optimierungsauftrag zu statisch ändern, wird dies als 2 Änderungen auf die insgesamt zulässigen 10 angerechnet. Wenn derselbe Hyperparameter den statischen Wert red im übergeordneten Auftrag aufwies und Sie den statischen Wert im neuen Optimierungsauftrag zu blue ändern, wird dies ebenfalls als 2 Änderungen angerechnet.

  • Eine Optimierung mit Warmstart ist nicht rekursiv. Beispiel: Wenn Sie MyTuningJob3 als Optimierungsauftrag mit Warmstart mit MyTuningJob2 als übergeordnetem Auftrag erstellen und MyTuningJob2 selbst ein Optimierungsauftrag mit Warmstart mit dem übergeordneten Auftrag MyTuningJob1 ist, werden die Erkenntnisse, die bei der Ausführung von MyTuningJob1 gewonnen wurden, nicht für MyTuningJob3 verwendet. Wenn Sie die Erkenntnisse aus MyTuningJob1 nutzen möchten, müssen Sie diesen explizit als übergeordneten Auftrag für MyTuningJob3 hinzufügen.

  • Die Trainingsaufträge, die von allen übergeordneten Aufträgen in einem Optimierungsauftrag mit Warmstart gestartet werden, werden auf die maximal 500 Trainingsaufträge pro Optimierungsauftrag angerechnet.

  • Hyperparameter-Optimierungsaufträge, die vor dem 1. Oktober 2018 erstellt wurden, können nicht als übergeordnete Aufträge für Optimierungsaufträge mit Warmstart verwendet werden.

Beispiel-Notebook für die Optimierung mit Warmstart

Ein Beispielnotizbuch, das zeigt, wie die Warmstartoptimierung verwendet wird, finden Sie unter https://github.com/awslabs/ amazon-sagemaker-examples /blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb. Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instanzen, in denen Sie das Beispiel ausführen können, finden Sie unter. SageMaker Beispiel-Notebooks Nachdem Sie eine Notebook-Instanz erstellt und geöffnet haben, wählen Sie die Registerkarte SageMaker Beispiele, um eine Liste aller Beispiele anzuzeigen. SageMaker Das Beispiel-Notebook für die Optimierung mit Warmstart finden Sie im Abschnitt Hyperparameter tuning (Hyperparameter-Optimierung). Es trägt den Namen hpo_image_classification_warmstart.ipynb. Zum Öffnen eines Notebooks klicken Sie auf die Registerkarte Use (Verwenden) und wählen Sie Create copy (Kopie erstellen) aus.

Erstellen eines Optimierungsauftrags mit Warmstart

Sie können entweder das AWS Low-Level-SDK für Python (Boto 3) oder das SageMaker Python-SDK auf hoher Ebene verwenden, um einen Warmstart-Tuning-Job zu erstellen.

Einen Warmstart-Tuning-Job erstellen ( SageMaker Low-Level-API für Python (Boto 3))

Um die Optimierung mit Warmstart zu verwenden, legen Sie die Werte eines HyperParameterTuningJobWarmStartConfig-Objekts fest und übergeben dieses als WarmStartConfig-Feld in einem Aufruf an CreateHyperParameterTuningJob.

Der folgende Code zeigt, wie Sie mithilfe der SageMaker Low-Level-API für Python (Boto 3) ein HyperParameterTuningJobWarmStartConfigObjekt erstellen und an einen CreateHyperParameterTuningJobJob übergeben.

Erstellen Sie das HyperParameterTuningJobWarmStartConfig-Objekt:

warm_start_config = { "ParentHyperParameterTuningJobs" : [ {"HyperParameterTuningJobName" : 'MyParentTuningJob'} ], "WarmStartType" : "IdenticalDataAndAlgorithm" }

Erstellen Sie den Optimierungsauftrag mit Warmstart:

smclient = boto3.Session().client('sagemaker') smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = 'MyWarmStartTuningJob', HyperParameterTuningJobConfig = tuning_job_config, # See notebook for tuning configuration TrainingJobDefinition = training_job_definition, # See notebook for job definition WarmStartConfig = warm_start_config)

Einen Warmstart-Tuning-Job erstellen (SageMakerPython SDK)

Um das Amazon SageMaker Python SDK für die Ausführung eines Warmstart-Tuning-Jobs zu verwenden, gehen Sie wie folgt vor:

  • Geben Sie die übergeordneten Aufträge und die Art des Warmstarts mithilfe eines WarmStartConfig-Objekts an.

  • Übergeben Sie das WarmStartConfig Objekt als Wert des warm_start_config Arguments eines HyperparameterTunerObjekts.

  • Rufen Sie die fit-Methode des HyperparameterTuner-Objekts auf.

Weitere Informationen zur Verwendung des Amazon SageMaker Python SDK für die Hyperparameteroptimierung finden Sie unter https://github.com/aws/ sagemaker-python-sdk #. sagemaker-automatic-model-tuning

Dieses Beispiel verwendet eine Schätzfunktion, die den Bildklassifikation - MXNet-Algorithmus für das Training nutzt. Der folgende Code legt die Hyperparameter-Bereiche fest, die der Optimierungsauftrag mit Warmstart durchsucht, um die optimale Wertekombination zu ermitteln. Informationen zum Festlegen von Hyperparameter-Bereichen finden Sie unter Definieren von Hyperparameter-Bereichen.

hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1), 'momentum': ContinuousParameter(0.0, 0.99)}

Der folgende Code konfiguriert den Optimierungsauftrag mit Warmstart durch Erstellen eines WarmStartConfig-Objekts.

from sagemaker.tuner import WarmStartConfig,WarmStartTypes parent_tuning_job_name = "MyParentTuningJob" warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={parent_tuning_job_name})

Legen Sie nun die Werte für statische Hyperparameter fest. Dabei handelt es sich um Hyperparameter, die denselben Wert für jeden Trainingsauftrag, den der Optimierungsauftrag mit Warmstart startet, beibehalten. Im folgenden Code ist imageclassification eine Schätzfunktion, die zuvor erstellt wurde.

imageclassification.set_hyperparameters(num_layers=18, image_shape='3,224,224', num_classes=257, num_training_samples=15420, mini_batch_size=128, epochs=30, optimizer='sgd', top_k='2', precision_dtype='float32', augmentation_type='crop')

Erstellen Sie nun das HyperparameterTuner-Objekt und übergeben Sie das WarmStartConfig-Objekt, das Sie zuvor erstellt haben, als warm_start_config-Argument.

tuner_warm_start = HyperparameterTuner(imageclassification, 'validation:accuracy', hyperparameter_ranges, objective_type='Maximize', max_jobs=10, max_parallel_jobs=2, base_tuning_job_name='warmstart', warm_start_config=warm_start_config)

Schließlich rufen Sie die Methode fit des HyperparameterTuner-Objekts auf, um den Optimierungsauftrag mit Warmstart zu starten.

tuner_warm_start.fit( {'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)