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 Funktionsweise der Hyperparameter-Optimierung. 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 Schulungsaufträge, die von den übergeordneten Aufträgen gestartet werden.

Mögliche Gründe für einen Warmstart:

  • Sie möchten schrittweise die Anzahl an Schulungsaufträgen über mehrere Optimierungsaufträge hinweg erhöhen, basierend auf den Ergebnissen nach jedem Durchlauf.

  • Sie erhalten neue Daten und möchten ein Modell unter Verwendung der neuen Daten optimieren.

  • Sie möchten die Bereiche für Hyperparameter ändern, die Sie in einem früheren Optimierungsauftrag verwendet haben, statische in optimierbare Hyperparameter umwandeln oder optimierbare Hyperparameter zu statischen Werten ändern.

  • 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 Schulungs-Image wie die übergeordneten Optimierungsaufträge. Sie können die zu durchsuchenden Hyperparameter-Bereiche und die maximale Anzahl an Schulungsaufträ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 Schulungsalgorithmus 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 Schulungsdaten wie in einem vorherigen Hyperparameter-Optimierungsauftrag nutzen, jedoch die Gesamtzahl an Schulungsaufträ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 Felds ist die TrainingJobSummary für den Schulungsauftrag mit dem besten objektiven Metrikwert aller Schulungsaufträge, die von diesem Optimierungsauftrag und allen übergeordneten Aufträgen, die für den Optimierungsauftrag mit Warmstart angegeben wurden, gestartet wurden.

TRANSFER_LEARNING

Der neue Hyperparameter-Optimierungsauftrag kann Eingabedaten, Hyperparameter-Bereiche, die maximale Anzahl gleichzeitiger Schulungsaufträge und die maximale Anzahl an Schulungsaufträ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 Schulungsalgorithmus-Image kann ebenfalls von der Version im übergeordneten Hyperparameter-Optimierungsauftrag abweichen. Wenn Sie Transferlernen verwenden, können Änderungen des Datasets 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. Jeder Wert in einem kategorischen Hyperparameter wird auf dieses Limit angerechnet. 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 Schulungsaufträge, die von allen übergeordneten Aufträgen in einem Optimierungsauftrag mit Warmstart gestartet werden, werden auf die maximal 500 Schulungsaufträ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 Beispiel-Notebook, das veranschaulicht, wie Sie die Optimierung mit Warmstart verwenden, 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-Instances, die Sie verwenden können, um das Beispiel in SageMager auszuführen, finden Sie unterBeispiel-Notebooksaus. Sobald Sie eine Notebook-Instance erstellt und geöffnet haben, wählen Sie dieBeispiele für SageMakerSo sehen Sie eine Liste aller SageMaker -Beispiele 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 Low-Level verwendenAWSSDK für Python (Boto 3) oder das High-Level—SageMager-Python-SDK zum Erstellen eines Optimierungsauftrags mit Warmstart.

Erstellen eines Optimierungsauftrags mit Warmstart (Low-Level SageMaker API für Python (Boto3))

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 demonstriert die Erstellung einesHyperParameterTuningJobWarmStartConfigObjekt und übergeben Sie es anCreateHyperParameterTuningJobAuftrag unter Verwendung des -Low-Level SageMaker API für Python (Boto3).

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)

Erstellen eines Optimierungsauftrags mit Warmstart (SageMaker Python SDK)

So verwenden Sie denAmazon SageMaker Python SDKUm einen Optimierungsauftrag mit Warmstart auszuführen, 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 HyperparameterTuner-Objekts.

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

Weitere Informationen zur Verwendung derAmazon SageMaker Python SDKfür Hyperparameter-Tuning siehehttps://github.com/aws/sagemaker-python-sdk#sagemaker-automatic-model-tuningaus.

Dieses Beispiel verwendet eine Schätzfunktion, die den Bildklassifikationsalgorithmus-Algorithmus für die Schulung 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 Schulungsauftrag, 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)