Einen Tuning-Job für die Hyperparameter-Optimierung für einen oder mehrere Algorithmen erstellen (Konsole) - 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.

Einen Tuning-Job für die Hyperparameter-Optimierung für einen oder mehrere Algorithmen erstellen (Konsole)

Diese Anleitung zeigt Ihnen, wie Sie einen neuen Tuning-Job für Hyperparameter-Optimierung (HPO) für einen oder mehrere Algorithmen erstellen. Um einen HPO-Job zu erstellen, definieren Sie die Einstellungen für den Optimierungsjob und erstellen Sie Trainingsjobdefinitionen für jeden Algorithmus, der optimiert wird. Als Nächstes konfigurieren Sie die Ressourcen für den Tuning-Job und erstellen ihn. Die folgenden Abschnitte stellen Details bereit, wie Sie die einzelnen Schritte ausführen. Am Ende dieses Handbuchs finden Sie ein Beispiel dafür, wie Sie mehrere Algorithmen mithilfe des SageMaker SDK Python For-Clients optimieren können.

Bestandteile eines Tuning-Jobs

Ein HPO-Tuning-Job besteht aus den folgenden drei Komponenten:

  • Definieren von Optimierungsjobeinstellungen

  • Trainingsjobdefinitionen

  • Optimieren der Auftragskonfiguration

Die Art und Weise, wie diese Komponenten in Ihrem HPO-Tuning-Job enthalten sind, hängt davon ab, ob Ihr Tuning-Job einen oder mehrere Trainingsalgorhythmen enthält. Die folgende Anleitung beschreibt die einzelnen Komponenten und gibt ein Beispiel für beide Arten von Tuning-Jobs.

Ihre Einstellungen für den Optimierungsauftrag werden auf alle Algorithmen im HPO-Optimierungsauftrag angewendet. Warmstart und Frühstopp sind nur verfügbar, wenn Sie einen einzelnen Algorithmus abstimmen. Nachdem Sie die Auftragseinstellungen festgelegt haben, können Sie für jeden Algorithmus oder jede Variante, die Sie optimieren möchten, individuelle Trainingsdefinitionen erstellen.

Warmstart

Wenn Sie diesen Job geklont haben, können Sie die Ergebnisse eines früheren Tuning-Jobs verwenden, um die Leistung des neuen Tuning-Jobs zu verbessern. Dies ist die Warmstartfunktion, und sie ist nur verfügbar, wenn ein einzelner Algorithmus optimiert wird. Mit der Warmstartoption können Sie bis zu fünf vorherige Hyperparameter-Tuning-Jobs auswählen, die Sie verwenden möchten. Alternativ können Sie Transfer Learning verwenden, um dem übergeordneten Tuning-Job zusätzliche Daten hinzuzufügen. Wenn Sie diese Option auswählen, wählen Sie einen vorherigen Optimierungsauftrag als übergeordnetes Element aus.

Anmerkung

Der Warmstart ist nur mit Optimierungsaufträgen kompatibel, die nach dem 1. Oktober 2018 geschaffen wurden. Weitere Informationen finden Sie unter Ausführen eines Warmstartauftrags.

Frühzeitiges Stoppen

Um die Berechnungszeit zu verkürzen und eine Überanpassung des Modells zu vermeiden, können Sie Trainingsaufträge frühzeitig abbrechen. Ein frühzeitiges Abbrechen ist hilfreich, wenn es unwahrscheinlich ist, dass der Trainingsauftrag die derzeit beste objektive Metrik des Hyperparameter-Abstimmungsauftrags verbessert. Wie bei einem Warmstart ist diese Funktion nur verfügbar, wenn ein einzelner Algorithmus optimiert wird. Dies ist eine automatische Funktion ohne Konfigurationsoptionen, die standardmäßig deaktiviert ist. Weitere Informationen darüber, wie das frühe Stoppen funktioniert, welche Algorithmen es unterstützen und wie Sie es mit Ihren eigenen Algorithmen verwenden können, finden Sie unter Trainingsjobs vorzeitig beenden.

Optimierungsstrategie

Die Abstimmungsstrategie kann entweder zufällig, nach Bayes oder Hyperband. Diese Auswahlen geben an, wie automatische Optimierungsalgorithmen bestimmte Hyperparameterbereiche durchsuchen, die in einem späteren Schritt ausgewählt werden. Die Zufallssuche wählt zufällige Kombinationen von Werten aus den angegebenen Bereichen aus und kann sequentiell oder parallel ausgeführt werden. Die Bayessche Optimierung wählt Werte auf der Grundlage dessen aus, was aufgrund der bekannten Historie früherer Auswahlen wahrscheinlich das beste Ergebnis erzielt. Hyperband verwendet eine Multi-Fidelity-Strategie, bei der Ressourcen dynamisch gut ausgelasteten Aufträgen zugewiesen werden und Aufgaben, die unterdurchschnittlich abschneiden, automatisch gestoppt werden. Die neue Konfiguration, die nach dem Stoppen anderer Konfigurationen gestartet wird, wird nach dem Zufallsprinzip ausgewählt.

Hyperband kann nur mit iterativen Algorithmen oder Algorithmen verwendet werden, die Schritte in Iterationen ausführen, wie XGBoost oder Random Cut Forest. Hyperbandkann nicht mit nicht iterativen Algorithmen wie Entscheidungsbäumen oder K-Nearest Neighbors verwendet werden. Weitere Informationen zu Suchstrategien finden Sie unter Funktionsweise der Hyperparameter-Optimierung.

Anmerkung

Hyperband verwendet einen fortschrittlichen internen Mechanismus, um vorzeitiges Stoppen anzuwenden. Wenn Sie die Hyperband interne Funktion für frühes Stoppen verwenden, muss der Parameter TrainingJobEarlyStoppingType in der HyperParameterTuningJobConfig API daher auf gesetzt seinOFF.

Tags

Um Ihnen die Verwaltung von Tuning-Jobs zu erleichtern, können Sie Tags als Schlüssel-Wert-Paare eingeben, um Tuning-Jobs Metadaten zuzuweisen. Werte im Schlüssel-Wert-Paar sind nicht erforderlich. Sie können den Schlüssel ohne Werte verwenden. Um die einem Auftrag zugeordneten Schlüssel zu sehen, wählen Sie die Registerkarte Tags auf der Detailseite des Abstimmungsauftrags. Weitere Informationen zur Verwendung von Tags für Tuning-Aufträge finden Sie unter Aufgaben zur Optimierung und Training von Hyperparametern verwalten.

Um eine Trainingsjobdefinition zu erstellen, müssen Sie den Algorithmus und die Parameter konfigurieren, die Dateneingabe und -ausgabe definieren und Ressourcen konfigurieren. Geben Sie mindestens einen TrainingJobDefinition für jeden HPO-Tuning-Job an. Jede Trainingsdefinition gibt die Konfiguration für einen Algorithmus an.

Um mehrere Definitionen für Ihren Ausbildungsauftrag zu erstellen, können Sie eine Auftragsdefinition klonen. Das Klonen eines Jobs kann Zeit sparen, da dabei alle Jobeinstellungen kopiert werden, einschließlich Datenkanäle und Amazon S3-Speicherorte für Ausgabeartefakte. Sie können einen geklonten Job bearbeiten, um zu ändern, was Sie für Ihren Anwendungsfall benötigen.

Konfigurieren Sie den Algorithmus und die Parameter

In der folgenden Liste wird beschrieben, was Sie benötigen, um den Satz von Hyperparameterwerten für jeden Trainingsjob zu konfigurieren.

  • Ein Name für Ihren Tuning-Job

  • Erlaubnis zum Zugriff auf Dienste

  • Parameter für alle Algorithmusoptionen

  • Eine Zielmetrik

  • Der Bereich der Hyperparameterwerte, falls erforderlich

Name

Geben Sie einen eindeutigen Namen für die Trainingsdefinition ein.

Berechtigungen

Amazon SageMaker benötigt die Erlaubnis, andere Dienste in Ihrem Namen anzurufen. Wählen Sie eine AWS Identity and Access Management (IAM-) Rolle oder lassen Sie eine Rolle AWS erstellen, der die AmazonSageMakerFullAccess IAM-Richtlinie beigefügt ist.

Optionale Sicherheitseinstellungen

Die Netzwerkisolationseinstellung hindert den Container daran, ausgehende Netzwerkaufrufe zu tätigen. Dies ist für Angebote zum AWS Marketplace maschinellen Lernen erforderlich.

Sie können sich auch für eine virtuelle private Cloud (VPC) entscheiden.

Anmerkung

Die Verschlüsselung zwischen Containern ist nur verfügbar, wenn Sie eine Auftragsdefinition über die API erstellen.

Algorithmusoptionen

Sie können integrierte Algorithmen, Ihren eigenen Algorithmus, Ihren eigenen Container mit einem Algorithmus wählen oder einen Algorithmus von AWS Marketplace abonnieren.

  • Wenn Sie einen integrierten Algorithmus wählen, werden die Amazon Elastic Container Registry (Amazon ECR)-Image-Informationen vorausgefüllt.

  • Wenn Sie Ihren eigenen Container wählen, müssen Sie die Bildinformationen (Amazon ECR) angeben. Sie können den Eingabemodus für den Algorithmus als Datei oder Pipe auswählen.

  • Wenn Sie Ihre Daten mit einer CSV-Datei von Amazon S3 bereitstellen möchten, sollten Sie die Datei auswählen.

Metriken

Wenn Sie einen integrierten Algorithmus auswählen, werden Metriken für Sie bereitgestellt. Wenn Sie sich für einen eigenen Algorithmus entscheiden, müssen Sie Ihre Metriken festlegen. Sie können bis zu 20 Metriken definieren, die Ihr Optimierungsauftrag überwachen soll. Sie müssen eine Metrik als Zielmetrik wählen. Weitere Informationen zum Definieren einer Metrik für einen Tuning-Auftrag finden Sie unter Definieren von Metriken.

Zielmetrik

Um den besten Ausbildungsjob zu finden, legen Sie eine objektive Kennzahl fest und legen Sie fest, ob diese maximiert oder minimiert werden soll. Nachdem der Trainingsjob abgeschlossen ist, können Sie die Detailseite für den Tuning-Job aufrufen. Die Detailseite bietet eine Zusammenfassung der besten Trainingsjobs, die anhand dieser objektiven Metrik gefunden wurden.

Hyperparameter-Konfiguration

Wenn Sie einen integrierten Algorithmus auswählen, werden die Standardwerte für dessen Hyperparameter für Sie festgelegt, wobei Bereiche verwendet werden, die für den abzustimmenden Algorithmus optimiert sind. Sie können diese Werte so ändern, wie Sie es für richtig halten. So können Sie beispielsweise anstelle eines Bereichs einen festen Wert für einen Hyperparameter festlegen, indem Sie den Parametertyp auf statisch setzen. Jeder Algorithmus hat unterschiedliche erforderliche und optionale Parameter. Weitere Informationen finden Sie unter Best Practices für die Hyperparameteroptimierung und Definieren von Hyperparameterbereichen.

Definieren Sie Dateneingaben und -ausgaben

Jede Trainingsjob-Definition für einen Tuning-Job muss die Kanäle für Dateneingaben, Datenausgabeorte und optional alle Checkpoint-Speicherorte für jeden Trainingsjob konfigurieren.

Eingabedatenkonfiguration

Eingabedaten werden durch Kanäle definiert. Jeder Kanal verfügt über einen eigenen Quellspeicherort (Amazon S3 oder Amazon Elastic File System), Komprimierungs- und Formatoptionen. Sie können bis zu 20 Kanäle von Eingangsquellen definieren. Wenn der von Ihnen gewählte Algorithmus mehrere Eingangskanäle unterstützt, können Sie auch diese angeben. Wenn Sie z. B. das  XGBoost zur Abwanderungsprognose verwenden, können Sie zwei Kanäle hinzufügen: Training und Validierung.

Prüfpunkt-Konfiguration

Während des Trainings werden regelmäßig Prüfpunkte generiert. Damit die Prüfpunkte gespeichert werden können, müssen Sie einen Amazon S3-Speicherort auswählen. Prüfpunkte werden in der Metrik-Berichterstellung verwendet und werden auch verwendet, um verwaltete Spot-Trainingsaufträge wieder aufzunehmen. Weitere Informationen finden Sie unter Verwenden Sie Checkpoints in Amazon SageMaker.

Ausgabedatenkonfiguration

Definieren Sie einen Amazon S3-Speicherort, an dem die Artefakte des Trainingsauftrags gespeichert werden sollen. Sie haben die Möglichkeit, der Ausgabe mithilfe eines AWS Key Management Service (AWS KMS) -Schlüssels eine Verschlüsselung hinzuzufügen.

Konfigurieren Sie Ressourcen für Trainingsjobs

Jede Trainingsauftragsdefinition für einen Tuning-Job muss die bereitzustellenden Ressourcen konfigurieren, einschließlich Instance-Typen und -anzahl, verwaltetes Spot-Training und Abbruchbedingungen.

Ressourcenkonfiguration

Jede Trainingsdefinition kann eine andere Ressourcenkonfiguration haben. Sie wählen den Instance-Typ und die Anzahl der Knoten aus.

Managed Spot Training

Sie können Computerkosten für Jobs sparen, wenn Sie Flexibilität bei den Start- und Endzeiten haben, indem SageMaker Sie freie Kapazität für die Ausführung von Jobs nutzen können. Weitere Informationen finden Sie unter Verwenden von Managed Spot Training in Amazon SageMaker.

Stoppen

Die Abbruchbedingung gibt die maximale Dauer an, die für jeden Trainingsjob zulässig ist.

Hinzufügen oder Klonen eines Trainingsauftrags

Nachdem Sie eine Trainingsjob-Definition für einen Tuning-Job erstellt haben, kehren Sie zum Bereich Trainingsjob-Definition(en) zurück. In diesem Bereich können Sie zusätzliche Trainingsjobdefinitionen erstellen, um zusätzliche Algorithmen zu trainieren. Sie können die Option Definition für Trainingsjob hinzufügen auswählen und die Schritte zur Definition eines Trainingsjobs erneut ausführen.

Um eine bestehende Definition eines Trainingsauftrags zu replizieren und sie für den neuen Algorithmus zu bearbeiten, wählen Sie alternativ im Menü Aktion die Option Klonen. Die Klonoption kann Zeit sparen, da sie alle Einstellungen des Jobs kopiert, einschließlich der Datenkanäle und Amazon S3-Speicherorte. Mehr Informationen zum Klonen finden Sie unter Aufgaben zur Optimierung und Training von Hyperparametern verwalten.

Ressourcenlimits

Sie können die maximale Anzahl gleichzeitiger Trainingsjobs angeben, die ein Hyperparameter-Optimierungsjob gleichzeitig ausführen kann (maximal 10). Sie können auch die maximale Anzahl von Trainingsaufträgen angeben, die der Hyperparameter-Optimierungsjob ausführen kann (maximal 500). Die Anzahl der parallelen Aufträge sollte die Anzahl der Knoten, die Sie für alle Ihre Trainingsdefinitionen angefordert haben, nicht überschreiten. Die Gesamtzahl der Aufträge darf die Anzahl der Aufträge nicht überschreiten, deren Ausführung von Ihren Definitionen erwartet wird.

Überprüfen Sie die Jobeinstellungen, die Definitionen der Trainingsjobs und die Ressourcenlimits. Wählen Sie dann Hyperparameter-Abstimmungsauftrag erstellen.

Beispiel für einen HPO-Tuning-Job

Um einen Trainingsjob zur Hyperparameteroptimierung (HPO) auszuführen, erstellen Sie zunächst eine Trainingsjobdefinition für jeden Algorithmus, der optimiert wird. Definieren Sie als Nächstes die Tuning-Job-Einstellungen und konfigurieren Sie die Ressourcen für den Tuning-Job. Führen Sie abschließend den Tuning-Job aus.

Wenn Ihr HPO-Tuning-Job einen einzigen Trainingsalgorhythmus enthält, ruft die SageMaker Tuning-Funktion die HyperparameterTuner API direkt auf und übergibt Ihre Parameter. Wenn Ihr HPO-Tuning-Job mehrere Trainingsalgorhythmen enthält, ruft Ihre Tuning-Funktion die create Funktion der HyperparameterTuner-API auf. Die create Funktion teilt der API mit, dass sie ein Wörterbuch mit einem oder mehreren Schätzern erwarten soll.

Im folgenden Abschnitt zeigen Codebeispiele, wie Sie einen Job optimieren, der entweder einen einzelnen Trainingsalgorhythmus oder mehrere Algorithmen enthält, mithilfe von. SageMaker Python SDK

Erstellen von Trainingsauftragsdefinitionen

Wenn Sie einen Optimierungsjob erstellen, der mehrere Trainingsalgorhythmen umfasst, umfasst Ihre Tuning-Job-Konfiguration die Schätzer und Metriken sowie andere Parameter für Ihre Trainingsjobs. Daher müssen Sie zuerst die Definition des Trainingsauftrags erstellen und dann Ihren Tuning-Job konfigurieren.

Das folgende Codebeispiel zeigt, wie zwei SageMaker Container abgerufen werden, die die integrierten Algorithmen XGBoostund enthalten Linear Learner. Wenn Ihr Optimierungsjob nur einen Trainingsalgorhythmus enthält, lassen Sie einen der Container und einen der Schätzer weg.

import sagemaker from sagemaker import image_uris from sagemaker.estimator import Estimator sess = sagemaker.Session() region = sess.boto_region_name role = sagemaker.get_execution_role() bucket = sess.default_bucket() prefix = "sagemaker/multi-algo-hpo" # Define the training containers and intialize the estimators xgb_container = image_uris.retrieve("xgboost", region, "latest") ll_container = image_uris.retrieve("linear-learner", region, "latest") xgb_estimator = Estimator( xgb_container, role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path='s3://{}/{}/xgb_output".format(bucket, prefix)', sagemaker_session=sess, ) ll_estimator = Estimator( ll_container, role, instance_count=1, instance_type="ml.c4.xlarge", output_path="s3://{}/{}/ll_output".format(bucket, prefix), sagemaker_session=sess, ) # Set static hyperparameters ll_estimator.set_hyperparameters(predictor_type="binary_classifier") xgb_estimator.set_hyperparameters( eval_metric="auc", objective="binary:logistic", num_round=100, rate_drop=0.3, tweedie_variance_power=1.4, )

Definieren Sie als Nächstes Ihre Eingabedaten, indem Sie die Trainings-, Validierungs- und Testdatensätze angeben, wie im folgenden Codebeispiel gezeigt. Dieses Beispiel veranschaulicht, wie Sie mehrere Trainingsalgorhythmen optimieren.

training_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/train".format(bucket, prefix), content_type="csv" ) validation_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/validate".format(bucket, prefix), content_type="csv" ) test_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/test".format(bucket, prefix), content_type="csv" ) train_inputs = { "estimator-1": { "train": training_data, "validation": validation_data, "test": test_data, }, "estimator-2": { "train": training_data, "validation": validation_data, "test": test_data, }, }

Wenn Ihr Optimierungsalgorithmus nur einen Trainingsalgorhythmus enthält, train_inputs sollten Sie auch nur einen Schätzer enthalten.

Sie müssen die Eingaben für die Trainings-, Validierungs- und Trainingsdatensätze in Ihren Amazon-S3-Bucket hochladen, bevor Sie sie in einem HPO-Tuning-Job verwenden können.

Definieren Sie Ressourcen und Einstellungen für Ihren Tuning-Job

In diesem Abschnitt wird gezeigt, wie Sie einen Tuner initialisieren, Ressourcen definieren und Job-Einstellungen für Ihren Tuning-Job angeben. Wenn Ihr Tuning-Job mehrere Trainingsalgorhythmen enthält, werden diese Einstellungen auf alle Algorithmen angewendet, die in Ihrem Tuning-Job enthalten sind. Dieser Abschnitt enthält zwei Codebeispiele zur Definition eines Tuners. Die Codebeispiele zeigen Ihnen, wie Sie einen einzelnen Trainingsalgorhythmus optimieren können, gefolgt von einem Beispiel, wie Sie mehrere Trainingsalgorhythmen optimieren können.

Optimieren Sie einen einzelnen Trainingsalgorhythmus

Das folgende Codebeispiel zeigt, wie ein Tuner initialisiert und Hyperparameterbereiche für einen SageMaker integrierten Algorithmus festgelegt werden. XGBoost

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter hyperparameter_ranges = { "max_depth": IntegerParameter(1, 10), "eta": ContinuousParameter(0.1, 0.3), } objective_metric_name = "validation:accuracy" tuner = HyperparameterTuner( xgb_estimator, objective_metric_name, hyperparameter_ranges, objective_type="Maximize", max_jobs=5, max_parallel_jobs=2, )

Optimieren Sie mehrere Trainingsalgorhythmen

Für jeden Trainingsjob sind unterschiedliche Konfigurationen erforderlich, die mithilfe eines Wörterbuchs spezifiziert werden. Das folgende Codebeispiel zeigt, wie ein Tuner mit Konfigurationen für zwei SageMaker integrierte Algorithmen initialisiert wird, und. XGBoost Linear Learner Das Codebeispiel zeigt auch, wie eine Optimierungsstrategie und andere Jobeinstellungen, wie z. B. die Rechenressourcen für den Tuning-Job, festgelegt werden. Das folgende Codebeispiel verwendet metric_definitions_dict, was optional ist.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter # Initialize your tuner tuner = HyperparameterTuner.create( estimator_dict={ "estimator-1": xgb_estimator, "estimator-2": ll_estimator, }, objective_metric_name_dict={ "estimator-1": "validation:auc", "estimator-2": "test:binary_classification_accuracy", }, hyperparameter_ranges_dict={ "estimator-1": {"eta": ContinuousParameter(0.1, 0.3)}, "estimator-2": {"learning_rate": ContinuousParameter(0.1, 0.3)}, }, metric_definitions_dict={ "estimator-1": [ {"Name": "validation:auc", "Regex": "Overall test accuracy: (.*?);"} ], "estimator-2": [ { "Name": "test:binary_classification_accuracy", "Regex": "Overall test accuracy: (.*?);", } ], }, strategy="Bayesian", max_jobs=10, max_parallel_jobs=3, )

Führen Sie Ihren HPO-Tuning-Job aus

Jetzt können Sie Ihren Tuning-Job ausführen, indem Sie Ihre Trainingseingaben an die fit Funktion der HyperparameterTuner Klasse weitergeben. Das folgende Codebeispiel zeigt, wie Sie den train_inputs Parameter, der in einem vorherigen Codebeispiel definiert wurde, an Ihren Tuner übergeben.

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})