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.
- Definieren des Parametersuchbereichs für Ihre Testversion
- Angeben des Samplingalgorithmus für Ihren Sweep-Auftrag
- Angeben des zu optimierenden Ziels
- Festlegen einer Richtlinie für die frühzeitige Beendigung bei Aufträgen mit geringer Leistung
- Definieren von Grenzwerten für den Sweep-Auftrag
- Starten eines Experiments mit der definierten Konfiguration
- Visualisieren der Trainingsaufträge
- 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) * qQLogUniform(min_value, max_value, q)
– Gibt einen Wert zurück wie round(exp(Uniform(min_value, max_value)) / q) * qQNormal(mu, sigma, q)
– Gibt einen Wert zurück wie round(Normal(mu, sigma) / q) * qQLogNormal(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 istLogUniform(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 istNormal(mu, sigma)
: Gibt einen realen Wert zurück, der mit einem Mittelwert mu und der Standardabweichung sigma normalverteilt istLogNormal(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 übereinstimmengoal
:Kann entwederMaximize
oderMinimize
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ürevaluation_interval
wird die Richtlinie jedes Mal angewendet, wenn das Trainingsskript die primäre Metrik meldet. Beim Wert 2 fürevaluation_interval
wird die Richtlinie bei jeder zweiten Meldung angewendet. Wenn kein Intervall angegeben wird, wirdevaluation_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, wirddelay_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
oderslack_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 Richtliniedelay_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 Richtliniedelay_evaluation
: (optional) verzögert die erste Auswertung der Richtlinie für eine angegebene Anzahl Intervalleexclude_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ürdelay_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 zugehörigen Tests).trial_timeout
: Die maximale Zeit in Sekunden, die jeder Testauftrag ausgeführt werden darf. Sobald dieser Grenzwert erreicht ist, bricht das System den Test 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. Die vorzeitige Beendigung von Aufträgen wird durch eine Richtlinie vom Typ MedianStoppingPolicy
bestimmt, die einen Auftrag beendet, dessen primärer Metrikwert schlechter ist als der Median der Durchschnittswerte aller Trainingsaufträge. (Weitere Informationen finden Sie in der 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.
Diagramm mit parallelen Koordinaten: Diese Visualisierung zeigt die Korrelation zwischen der Leistung der primären Metrik und individuellen Hyperparameterwerten. Das Diagramm ist interaktiv. Das bedeutet, die Achsen können durch Auswählen 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.
Zweidimensionales Punktdiagramm: Diese Visualisierung zeigt die Korrelation zwischen zwei individuellen Hyperparametern zusammen mit ihrem zugeordneten primären Metrikwert.
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 das Diagramm auswählen und ziehen, um die Ausrichtung des Diagramms zu ändern und verschiedene Korrelationen im dreidimensionalen Raum anzuzeigen.
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
- Hyperparameter-Optimierungsbeispiel
- YAML-Schema für Sweep-Aufträge in der Befehlszeilenschnittstelle (v2)