Optimieren der Hyperparameter eines Modells (v2)

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Automatisieren Sie die effiziente Optimierung von Hyperparametern mit dem Azure Machine Learning SDK v2 und der CLI v2 über den SweepJob-Typ.

  1. Definieren des Parametersuchbereichs für Ihre Testversion
  2. Angeben des Samplingalgorithmus für Ihren Sweep-Auftrag
  3. Angeben des zu optimierenden Ziels
  4. Festlegen einer Richtlinie für die frühzeitige Beendigung bei Aufträgen mit geringer Leistung
  5. Definieren von Grenzwerten für den Sweep-Auftrag
  6. Starten eines Experiments mit der definierten Konfiguration
  7. Visualisieren der Trainingsaufträge
  8. Auswählen der für Ihr Modell am besten geeigneten Konfiguration

Was ist die Hyperparameteroptimierung?

Hyperparameter sind anpassbare Parameter, mit denen Sie den Modelltrainingsprozess steuern können. Bei neuronalen Netzen legen Sie beispielsweise die Anzahl der verborgenen Ebenen sowie die Anzahl der Knoten in den einzelnen Ebenen fest. Die Modellleistung hängt stark von Hyperparametern ab.

Die Hyperparameteroptimierung ist der Prozess, bei dem nach der Hyperparameterkonfiguration gesucht wird, die die beste Leistung liefert. Der Prozess ist in der Regel rechenintensiv und muss manuell durchgeführt werden.

Mit Azure Machine Learning können Sie die Hyperparameteroptimierung automatisieren und parallel Experimente durchführen, um Hyperparameter effizient zu optimieren.

Definieren des Suchbereichs

Optimieren Sie Hyperparameter, indem Sie den für jeden Hyperparameter definierten Wertebereich untersuchen.

Hyperparameter können diskret oder kontinuierlich sein und weisen eine Verteilung von Werten auf, die durch einen Parameterausdruck beschrieben wird.

Diskrete Hyperparameter

Diskrete Hyperparameter werden als eine Choice unter diskreten Werten angegeben. Choice kann Folgendes sein:

  • Ein oder mehrere durch Trennzeichen getrennte Werte
  • Ein range-Objekt
  • Ein beliebiges list-Objekt
from azure.ai.ml.sweep import Choice

command_job_for_sweep = command_job(
    batch_size=Choice(values=[16, 32, 64, 128]),
    number_of_hidden_layers=Choice(values=range(1,5)),
)

In diesem Fall wird für batch_size einer der Werte [16, 32, 64, 128] und für number_of_hidden_layers einer der Werte [1, 2, 3, 4] verwendet.

Die folgenden erweiterten diskreten Hyperparameter können ferner mithilfe einer Verteilung angegeben werden:

  • QUniform(min_value, max_value, q) – Gibt einen Wert zurück wie round(Uniform(min_value, max_value) / q) * q
  • QLogUniform(min_value, max_value, q) – Gibt einen Wert zurück wie round(exp(Uniform(min_value, max_value)) / q) * q
  • QNormal(mu, sigma, q) – Gibt einen Wert zurück wie round(Normal(mu, sigma) / q) * q
  • QLogNormal(mu, sigma, q) – Gibt einen Wert zurück wie round(exp(Normal(mu, sigma)) / q) * q

Kontinuierliche Hyperparameter

Die kontinuierlichen Hyperparameter werden als Verteilung über einen kontinuierlichen Wertebereich angegeben:

  • Uniform(min_value, max_value) – Gibt einen Wert zurück, der gleichmäßig zwischen min_value und max_value verteilt ist
  • LogUniform(min_value, max_value) – Gibt einen gemäß „exp(Uniform(min_value, max_value))“ ermittelten Wert zurück, sodass der Logarithmus des Rückgabewerts einheitlich verteilt ist
  • Normal(mu, sigma): Gibt einen realen Wert zurück, der mit einem Mittelwert mu und der Standardabweichung sigma normalverteilt ist
  • LogNormal(mu, sigma) – Gibt einen gemäß „exp(Normal(mu, sigma))“ ermittelten Wert zurück, sodass der Logarithmus des Rückgabewerts normalverteilt ist

Im Folgenden sehen Sie ein Beispiel für die Definition des Parameterbereichs:

from azure.ai.ml.sweep import Normal, Uniform

command_job_for_sweep = command_job(   
    learning_rate=Normal(mu=10, sigma=3),
    keep_probability=Uniform(min_value=0.05, max_value=0.1),
)

Dieser Code definiert einen Suchbereich mit zwei Parametern: learning_rate und keep_probability. learning_rate weist eine Normalverteilung mit dem Mittelwert 10 und der Standardabweichung 3 auf. keep_probability weist eine gleichmäßige Verteilung mit dem Mindestwert 0,05 und dem Höchstwert 0,1 auf.

Für die Befehlszeilenschnittstelle können Sie das YAML-Schema des Sweep-Auftrags verwenden, um den Suchbereich in Ihrem YAML-Code zu definieren:

    search_space:
        conv_size:
            type: choice
            values: [2, 5, 7]
        dropout_rate:
            type: uniform
            min_value: 0.1
            max_value: 0.2

Stichprobenentnahme im Hyperparameterraum

Legen Sie die für den Hyperparameterbereich zu verwendende Parametersamplingmethode fest. Azure Machine Learning unterstützt die folgenden Methoden:

  • Zufallssampling
  • Rastersampling
  • Bayessches Sampling

Zufallssampling

Zufallssampling unterstützt diskrete und kontinuierliche Hyperparameter. Diese Methode unterstützt die vorzeitige Beendigung von Aufträgen mit geringer Leistung. Einige Benutzer führen eine erste Suche mit Zufallssampling durch und optimieren danach den Suchbereich zur Verbesserung der Ergebnisse.

Beim Zufallssampling werden Hyperparameterwerte zufällig aus dem definierten Suchbereich ausgewählt. Nachdem Sie Ihren Befehlsauftrag erstellt haben, können Sie mit dem Sweep-Parameter den Samplingalgorithmus festlegen.

from azure.ai.ml.sweep import Normal, Uniform, RandomParameterSampling

command_job_for_sweep = command_job(   
    learning_rate=Normal(mu=10, sigma=3),
    keep_probability=Uniform(min_value=0.05, max_value=0.1),
    batch_size=Choice(values=[16, 32, 64, 128]),
)

sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm = "random",
    ...
)

Sobol

Sobol ist eine Art zufälliges Sampling, das von Sweep-Auftragstypen unterstützt wird. Sie können Sobol verwenden, um Ihre Ergebnisse mit Seed zu reproduzieren und die Suchbereichsverteilung gleichmäßiger abzudecken.

Zur Verwendung von Sobol verwenden Sie die RandomParameterSampling-Klasse, um den Seed und die Regel hinzuzufügen, wie im folgenden Beispiel gezeigt.

from azure.ai.ml.sweep import RandomParameterSampling

sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm = RandomParameterSampling(seed=123, rule="sobol"),
    ...
)

Rastersampling

Rastersampling unterstützt diskrete Hyperparameter. Verwenden Sie das Rastersampling, wenn Sie es sich leisten können, Suchbereiche umfassend zu durchsuchen. Dies unterstützt die vorzeitige Beendigung von Aufträgen mit geringer Leistung.

Beim Rastersampling wird eine einfache Rastersuche für alle möglichen Werte durchgeführt. Das Rastersampling kann nur für choice-Hyperparameter verwendet werden. Der folgende Bereich enthält insgesamt sechs Stichproben:

from azure.ai.ml.sweep import Choice

command_job_for_sweep = command_job(
    batch_size=Choice(values=[16, 32]),
    number_of_hidden_layers=Choice(values=[1,2,3]),
)

sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm = "grid",
    ...
)

Bayessches Sampling

Bayessches Sampling basiert auf dem bayesschen Optimierungsalgorithmus. Bei dieser Methode werden Stichproben auf der Grundlage des Ergebnisses vorheriger Stichproben so gewählt, dass die primäre Metrik durch die neuen Stichproben verbessert wird.

Bayessches Sampling wird empfohlen, wenn Sie es sich leisten können, den Hyperparameterbereich zu erkunden. Optimale Ergebnisse erzielen Sie mit einer maximalen Anzahl von Aufträgen, die größer als oder gleich dem 20-fachen der Anzahl der zu optimierenden Hyperparameter ist.

Die Anzahl der gleichzeitigen Aufträge wirkt sich auf die Effektivität des Optimierungsprozesses aus. Eine kleinere Anzahl gleichzeitiger Aufträge kann zu einer besseren Samplingkonvergenz führen, da durch den geringeren Parallelitätsgrad die Anzahl der Aufträge zunimmt, die von früheren Aufträgen profitieren.

Bayessches Sampling unterstützt nur choice-, uniform- und quniform-Verteilungen über den Suchraum.

from azure.ai.ml.sweep import Uniform, Choice

command_job_for_sweep = command_job(   
    learning_rate=Uniform(min_value=0.05, max_value=0.1),
    batch_size=Choice(values=[16, 32, 64, 128]),
)

sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm = "bayesian",
    ...
)

Angeben des Sweep-Ziels

Definieren Sie das Ziel Ihres Sweep-Auftrags, indem Sie die primäre Metrik und das Ziel angeben, die durch die Hyperparameteroptimierung optimiert werden sollen. Jeder Trainingsauftrag wird im Hinblick auf die primäre Metrik ausgewertet. Bei der Richtlinie zur vorzeitigen Beendigung wird die primäre Metrik zum Erkennen von Aufträgen mit geringer Leistung verwendet.

  • primary_metric: Der Name der primären Metrik muss exakt mit dem Namen der vom Trainingsskript protokollierten Metrik übereinstimmen
  • goal:Kann entweder Maximize oder Minimize sein und bestimmt, ob die primäre Metrik beim Auswerten der Aufträge maximiert oder minimiert wird.
from azure.ai.ml.sweep import Uniform, Choice

command_job_for_sweep = command_job(   
    learning_rate=Uniform(min_value=0.05, max_value=0.1),
    batch_size=Choice(values=[16, 32, 64, 128]),
)

sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm = "bayesian",
    primary_metric="accuracy",
    goal="Maximize",
)

In diesem Beispiel wird "accuracy" maximiert.

Protokollieren von Metriken für die Hyperparameteroptimierung

Das Trainingsskript für Ihr Modell muss die primäre Metrik während des Modelltrainings unter Verwendung desselben entsprechenden Metriknamens protokollieren, damit der SweepJob für die Optimierung der Hyperparameter darauf zugreifen kann.

Protokollieren Sie die primäre Metrik mit dem folgenden Beispielcodeausschnitt in Ihrem Trainingsskript:

import mlflow
mlflow.log_metric("accuracy", float(val_accuracy))

Mit dem Trainingsskript wird der val_accuracy-Wert berechnet und als die primäre Metrik „accuracy“ protokolliert. Jedes Mal, wenn die Metrik protokolliert wird, wird der Wert vom Dienst zur Hyperparameteroptimierung empfangen. Die Häufigkeit der Berichterstellung können Sie bestimmen.

Weitere Informationen zur Protokollierung von Werten für Trainingsaufträge finden Sie unter Aktivieren der Protokollierung in Azure Machine Learning-Trainingsaufträgen.

Festlegen einer Richtlinie für vorzeitige Beendigung

Aufträge mit schlechter Leistung können mit einer Richtlinie für vorzeitige Beendigung automatisch beendet werden. Durch die vorzeitige Beendigung lässt sich die Recheneffizienz steigern.

Sie können die folgenden Parameter konfigurieren, mit denen die Anwendung einer Richtlinie gesteuert wird:

  • evaluation_interval: die Anwendungshäufigkeit der Richtlinie. Jede Protokollierung der primären Metrik durch das Trainingsskript zählt als ein Intervall. Beim Wert 1 für evaluation_interval wird die Richtlinie jedes Mal angewendet, wenn das Trainingsskript die primäre Metrik meldet. Beim Wert 2 für evaluation_interval wird die Richtlinie bei jeder zweiten Meldung angewendet. Wenn kein Intervall angegeben wird, wird evaluation_interval standardmäßig auf 0 festgelegt.
  • delay_evaluation: Verzögert die erste Auswertung der Richtlinie für eine angegebene Anzahl Intervalle. Dies ist ein optionaler Parameter, der zum Verhindern der vorzeitigen Beendigung von Trainingsaufträgen die Ausführung aller Konfigurationen für eine Mindestanzahl von Intervallen ermöglicht. Wenn er angegeben wird, wird dir Richtlinie bei jedem Vielfachen von evaluation_interval angewendet, das größer als oder gleich groß wie delay_evaluation ist. Wenn kein Intervall angegeben wird, wird delay_evaluation standardmäßig auf 0 festgelegt.

Azure Machine Learning unterstützt die folgenden Richtlinien für vorzeitige Beendigung:

Banditenrichtlinie

Eine Banditenrichtlinie basiert auf einem Pufferbereich/Pufferbetrag und einem Bewertungsintervall. Die Banditenrichtlinie beendet einen Auftrag, wenn die primäre Metrik nicht innerhalb des angegebenen Pufferbereichs/Pufferbetrags der erfolgreichsten Ausführung liegt.

Legen Sie die folgenden Konfigurationsparameter fest:

  • slack_factor oder slack_amount: Der bezogen auf den Trainingsauftrag mit der besten Leistung zulässige Puffer. slack_factor gibt den zulässigen Puffer als Verhältnis an. slack_amount gibt den zulässigen Puffer als absoluten Betrag anstelle eines Verhältnisses an.

    Betrachten Sie als Beispiel die Anwendung einer Banditenrichtlinie auf das Intervall 10. Angenommen, der Auftrag mit der besten Leistung in Intervall 10 hat für das Ziel, die primäre Metrik zu maximieren, die primäre Metrik 0,8 gemeldet. Wenn die Richtlinie mit einem slack_factor von 0,2 angegeben wurde, werden alle Trainingsaufträge, deren beste Metrik im Intervall 10 kleiner als 0,66 (0,8/(1+slack_factor)) ist, beendet.

  • evaluation_interval: (optional) die Anwendungshäufigkeit der Richtlinie

  • delay_evaluation: (optional) verzögert die erste Auswertung der Richtlinie für eine angegebene Anzahl Intervalle

from azure.ai.ml.sweep import BanditPolicy
sweep_job.early_termination = BanditPolicy(slack_factor = 0.1, delay_evaluation = 5, evaluation_interval = 1)

In diesem Beispiel wird die Richtlinie zur frühzeitigen Beendigung bei jedem Intervall angewendet, wenn Metriken gemeldet werden, beginnend bei Auswertungsintervall 5. Alle Aufträge, deren beste Metrik kleiner als (1/(1+0,1) oder 91 % der Aufträge mit der besten Leistung ist, wird beendet.

Medianstopprichtlinie

Die Medianstopprichtlinie ist eine Richtlinie für vorzeitige Beendigung, die auf dem gleitenden Durchschnitt der von den Aufträgen gemeldeten primären Metriken basiert. Diese Richtlinie berechnet den gleitenden Durchschnitt für alle Trainingsaufträge und beendet Aufträge, bei denen der Wert der primären Metrik schlechter ist als der Median der Durchschnittswerte.

Diese Richtlinie akzeptiert die folgenden Konfigurationsparameter:

  • evaluation_interval: die Anwendungshäufigkeit der Richtlinie (optionaler Parameter).
  • delay_evaluation: verzögert die erste Auswertung der Richtlinie für eine angegebene Anzahl Intervalle (optionaler Parameter).
from azure.ai.ml.sweep import MedianStoppingPolicy
sweep_job.early_termination = MedianStoppingPolicy(delay_evaluation = 5, evaluation_interval = 1)

In diesem Beispiel wird die Richtlinie zur frühzeitigen Beendigung bei jedem Intervall angewendet, beginnend bei Auswertungsintervall 5. Ein Auftrag wird im fünften Intervall beendet, wenn die beste primäre Metrik schlechter als der Median des gleitenden Durchschnitts der Intervalle 1:5 für alle Trainingsaufträge ist.

Kürzungsauswahlrichtlinie

Die Kürzungsauswahlrichtlinie bricht bei jedem Auswertungsintervall einen Prozentsatz der Aufträge mit der schlechtesten Leistung ab. Aufträge werden anhand der primären Metrik verglichen.

Diese Richtlinie akzeptiert die folgenden Konfigurationsparameter:

  • truncation_percentage: Der Prozentsatz der Aufträge mit der schwächsten Leistung, die bei jedem Auswertungsintervall beendet werden sollen. Eine ganze Zahl zwischen 1 und 99.
  • evaluation_interval: (optional) die Anwendungshäufigkeit der Richtlinie
  • delay_evaluation: (optional) verzögert die erste Auswertung der Richtlinie für eine angegebene Anzahl Intervalle
  • exclude_finished_jobs: Gibt an, ob abgeschlossene Aufträge beim Anwenden der Richtlinie ausgeschlossen werden sollen.
from azure.ai.ml.sweep import TruncationSelectionPolicy
sweep_job.early_termination = TruncationSelectionPolicy(evaluation_interval=1, truncation_percentage=20, delay_evaluation=5, exclude_finished_jobs=true)

In diesem Beispiel wird die Richtlinie zur frühzeitigen Beendigung bei jedem Intervall angewendet, beginnend bei Auswertungsintervall 5. Ein Auftrag wird bei Intervall 5 beendet, wenn ihre Leistung in den unteren 20 % der Leistung aller Aufträge im Intervall 5 liegt. Beim Anwenden der Richtlinie werden abgeschlossene Aufträge ausgeschlossen.

Keine Beendigungsrichtlinie (Standard)

Ist keine Richtlinie angegeben, lässt der Dienst zur Optimierung von Hyperparametern alle Trainingsaufträge bis zum Abschluss ausführen.

sweep_job.early_termination = None

Wählen einer Richtlinie für frühzeitige Beendigung

  • Bei einer konservativen Richtlinie, die eine Ersparnis ohne Beendigung vielversprechender Aufträge ermöglicht, sollten Sie eine Medianstopprichtlinie mit den Werten 1 für evaluation_interval und 5 für delay_evaluation verwenden. Dies ist eine konservative Einstellung, die annähernd 25–35 % Ersparnis ohne Verluste bei der primären Metrik erbringen kann (bezogen auf unsere Auswertungsdaten).
  • Bei aggressiveren Einsparungen verwenden Sie die Banditenrichtlinie mit einem strengeren (kleineren) zulässigen Puffer oder die Kürzungsauswahlrichtlinie mit einem höheren Kürzungsprozentsatz.

Festlegen von Grenzwerten für Ihren Sweep-Auftrag

Kontrollieren Sie Ihr Ressourcenbudget, indem Sie Grenzwerte für Ihren Sweep-Auftrag festlegen.

  • max_total_trials: Maximale Anzahl von Testaufträgen. Muss eine ganze Zahl zwischen 1 und 1000 sein.
  • max_concurrent_trials: (Optional) Maximale Anzahl von Testaufträgen, die gleichzeitig ausgeführt werden können. Wenn hierfür kein Wert angegeben ist, werden so viele Aufträge parallel gestartet, wie durch „max_total_trials“ festgelegt. Wenn dieser Wert angegeben wird, muss es sich um eine ganze Zahl zwischen 1 und 1000 handeln.
  • timeout: Die maximale Zeit in Sekunden, die der gesamte Sweep-Auftrag ausgeführt werden darf. Sobald dieser Grenzwert erreicht ist, bricht das System den Sweep-Auftrag ab, einschließlich aller Testversionen.
  • trial_timeout: Die maximale Zeit in Sekunden, die jeder Testauftrag ausgeführt werden darf. Sobald dieser Grenzwert erreicht ist, bricht das System die Testversion ab.

Hinweis

Wenn sowohl „max_total_trials“ als auch „timeout“ angegeben ist, wird das Experiment zur Optimierung der Hyperparameter beendet, wenn der erste dieser beiden Schwellenwerte erreicht ist.

Hinweis

Die Anzahl der gleichzeitigen Testaufträge wird durch die im angegebenen Computeziel verfügbaren Ressourcen beschränkt. Stellen Sie sicher, dass das Computeziel die verfügbaren Ressourcen für die gewünschte Parallelität aufweist.

sweep_job.set_limits(max_total_trials=20, max_concurrent_trials=4, timeout=1200)

Mit diesem Code wird das Experiment zur Optimierung der Hyperparameter so konfiguriert, dass insgesamt maximal 20 Testaufträge verwendet werden, wobei jeweils vier Testaufträge mit einem Timeout von 1.200 Sekunden für den gesamten Sweep-Auftrag ausgeführt werden.

Konfigurieren des Experiments zur Hyperparameteroptimierung

Geben Sie Folgendes an, um Ihr Experiment zur Hyperparameteroptimierung zu konfigurieren:

  • Den definierten Suchbereich für Hyperparameter
  • Ihren Samplingalgorithmus
  • Ihre Richtlinie für vorzeitige Beendigung
  • Ihr Ziel
  • Ressourceneinschränkungen
  • CommandJob oder CommandComponent
  • SweepJob

SweepJob kann ein Hyperparameter-Sweeping für den Befehl oder die Befehlskomponente ausführen.

Hinweis

Das in sweep_job verwendete Computeziel muss über genügend Ressourcen für Ihren Parallelitätsgrad verfügen. Weitere Informationen zu Computezielen finden Sie unter Computeziele.

Konfigurieren Sie Ihr Experiment zur Hyperparameteroptimierung:

from azure.ai.ml import MLClient
from azure.ai.ml import command, Input
from azure.ai.ml.sweep import Choice, Uniform, MedianStoppingPolicy
from azure.identity import DefaultAzureCredential

# Create your base command job
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)

# Override your inputs with parameter expressions
command_job_for_sweep = command_job(
    learning_rate=Uniform(min_value=0.01, max_value=0.9),
    boosting=Choice(values=["gbdt", "dart"]),
)

# Call sweep() on your command job to sweep over your parameter expressions
sweep_job = command_job_for_sweep.sweep(
    compute="cpu-cluster",
    sampling_algorithm="random",
    primary_metric="test-multi_logloss",
    goal="Minimize",
)

# Specify your experiment details
sweep_job.display_name = "lightgbm-iris-sweep-example"
sweep_job.experiment_name = "lightgbm-iris-sweep-example"
sweep_job.description = "Run a hyperparameter sweep job for LightGBM on Iris dataset."

# Define the limits for this sweep
sweep_job.set_limits(max_total_trials=20, max_concurrent_trials=10, timeout=7200)

# Set early stopping on this one
sweep_job.early_termination = MedianStoppingPolicy(
    delay_evaluation=5, evaluation_interval=2
)

command_job wird als Funktion aufgerufen, damit wir die Parameterausdrücke auf die Sweep-Eingaben anwenden können. Die Funktion sweep wird dann mit trial, sampling-algorithm, objective, limits und compute konfiguriert. Der obige Codeausschnitt stammt aus dem Beispielnotebook Ausführen des Hyperparameter-Sweepings für einen Befehl oder eine Befehlskomponente. In diesem Beispiel werden die Parameter learning_rate und boosting optimiert. Das vorzeitige Beenden von Aufträgen wird durch eine MedianStoppingPolicy-Instanz bestimmt, die einen Auftrag beendet, dessen primärer Metrikwert schlechter ist als der Median der Durchschnittswerte aller Trainingsaufträge (siehe MedianStoppingPolicy-Klassenreferenz).

Erfahren Sie, wie die Parameterwerte empfangen, analysiert und an das Trainingsskript zur Optimierung weitergegeben werden, in diesem Codebeispiel.

Wichtig

Das Training wird bei jedem Sweep-Auftrag für Hyperparameter von Grund auf neu gestartet (einschließlich Neuerstellung des Modells und aller Datenladeprogramme). Zur Kompensierung können Sie eine Azure Machine Learning-Pipeline oder einen manuellen Prozess verwenden, um einen möglichst großen Teil der Datenaufbereitung vor den Trainingsaufträgen durchzuführen.

Übermitteln des Experiments zur Hyperparameteroptimierung

Nachdem Sie Ihre Konfiguration für die Hyperparameteroptimierung definiert haben, übermitteln Sie den Auftrag:

# submit the sweep
returned_sweep_job = ml_client.create_or_update(sweep_job)
# get a URL for the status of the job
returned_sweep_job.services["Studio"].endpoint

Visualisieren der Aufträge zur Hyperparameteroptimierung

Sie können alle Ihre Aufträge zur Hyperparameteroptimierung im Azure Machine Learning Studio visualisieren. Weitere Informationen zum Anzeigen von Experimenten im Portal finden Sie unter Anzeigen von Auftragsaufzeichnungen in Studio.

  • Metrikdiagramm: Diese Visualisierung dient zum Nachverfolgen der Metriken, die im Rahmen der Hyperparameteroptimierung für die einzelnen untergeordneten HyperDrive-Aufträge protokolliert werden. Jede Zeile stellt einen untergeordneten Auftrag dar, und jeder Punkt misst den primären Metrikwert bei dieser Laufzeititeration.

    Metrikdiagramm für die Hyperparameteroptimierung

  • Diagramm mit parallelen Koordinaten: Diese Visualisierung zeigt die Korrelation zwischen der Leistung der primären Metrik und individuellen Hyperparameterwerten. Das Diagramm ist interaktiv. Da bedeutet, die Achsen können durch Klicken und Ziehen der Achsenbezeichnung verschoben werden. Außerdem können Werte auf einer einzelnen Achse hervorgehoben werden. (Klicken und ziehen Sie vertikal entlang einer einzelnen Achse, um einen gewünschten Wertebereich hervorzuheben.) Auf der rechten Seite des Diagramms mit parallelen Koordinaten befindet sich eine Achse, die den besten Metrikwert entsprechend der für diese Auftragsinstanz festgelegten Hyperparameter kennzeichnet. Mit dieser Achse wird die Diagrammgradientenlegende besser lesbar auf die Daten projiziert.

    Diagramm mit parallelen Koordinaten für die Hyperparameteroptimierung

  • Zweidimensionales Punktdiagramm: Diese Visualisierung zeigt die Korrelation zwischen zwei individuellen Hyperparametern zusammen mit ihrem zugeordneten primären Metrikwert.

    Zweidimensionales Punktdiagramm für die Hyperparameteroptimierung

  • Dreidimensionales Punktdiagramm: Diese Visualisierung ist mit der zweidimensionalen Variante identisch, ermöglicht jedoch die Verwendung von drei Hyperparameterdimensionen für die Korrelation mit dem primären Metrikwert. Sie können auch auf das Diagramm klicken und ziehen, um die Ausrichtung des Diagramms zu ändern und verschiedene Korrelationen im dreidimensionalen Raum anzuzeigen.

    Dreidimensionales Punktdiagramm für die Hyperparameteroptimierung

Suchen des besten Testauftrags

Sobald alle Aufträge für die Hyperparameteroptimierung abgeschlossen sind, rufen Sie die besten Testergebnisse ab:

# Download best trial model output
ml_client.jobs.download(returned_sweep_job.name, output_name="model")

Sie können die Befehlszeilenschnittstelle verwenden, um alle Standard- und benannten Ausgaben des besten Testauftrags und die Protokolle des Sweep-Auftrags herunterzuladen.

az ml job download --name <sweep-job> --all

Optional, um nur die beste Testausgabe herunterzuladen.

az ml job download --name <sweep-job> --output-name model

References

Nächste Schritte