Verwenden eines Sweepauftrags für die Hyperparameteroptimierung

Abgeschlossen

In Azure Machine Learning können Sie Hyperparameter optimieren, indem Sie einen Aufräumauftrag ausführen.

Erstellen eines Schulungsskripts für die Hyperparameteroptimierung

Zum Ausführen eines Sweepauftrags müssen Sie wie für jeden anderen Trainingsauftrag ein Trainingsskript erstellen, mit dem Unterschied, dass das Skript folgende Bedingungen erfüllen muss:

  • Fügen Sie ein Argument für jeden Hyperparameter ein, den Sie variieren möchten.
  • Protokollieren Sie die Zielleistungsmetrik mit MLflow. Eine protokollierte Metrik ermöglicht dem Sweepauftrag, die Leistung der von ihm initiierten Tests auszuwerten und den Durchlauf zu identifizieren, der das Modell mit der besten Leistung hervorbringt.

Das folgende Beispielskript trainiert beispielsweise ein Logistisches Regressionsmodell mithilfe eines --regularization Arguments zum Festlegen des Hyperparameters für die Normalisierungsrate und protokolliert die Genauigkeitsmetrik mit dem Namen Accuracy:

import argparse
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import mlflow

# get regularization hyperparameter
parser = argparse.ArgumentParser()
parser.add_argument('--regularization', type=float, dest='reg_rate', default=0.01)
args = parser.parse_args()
reg = args.reg_rate

# load the training dataset
data = pd.read_csv("data.csv")

# separate features and labels, and split for training/validatiom
X = data[['feature1','feature2','feature3','feature4']].values
y = data['label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

# train a logistic regression model with the reg hyperparameter
model = LogisticRegression(C=1/reg, solver="liblinear").fit(X_train, y_train)

# calculate and log accuracy
y_hat = model.predict(X_test)
acc = np.average(y_hat == y_test)
mlflow.log_metric("Accuracy", acc)

Konfigurieren und Ausführen einer Sweep-Aufgabe

Um den Aufräumauftrag vorzubereiten, müssen Sie zuerst einen Basisbefehlsauftrag erstellen, der angibt, welches Skript ausgeführt werden soll, und definiert die vom Skript verwendeten Parameter:

from azure.ai.ml import command

# configure command job as base
job = command(
    code="./src",
    command="python train.py --regularization ${{inputs.reg_rate}}",
    inputs={
        "reg_rate": 0.01,
    },
    environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest",
    compute="aml-cluster",
    )

Anschließend können Sie Ihre Eingabeparameter mit Ihrem Suchbereich überschreiben:

from azure.ai.ml.sweep import Choice

command_job_for_sweep = job(
    reg_rate=Choice(values=[0.01, 0.1, 1]),
)

Rufen Sie schließlich sweep() bei Ihrem Kommandoauftrag auf, um Ihren Suchbereich zu durchsuchen:

from azure.ai.ml import MLClient

# apply the sweep parameter to obtain the sweep_job
sweep_job = command_job_for_sweep.sweep(
    compute="aml-cluster",
    sampling_algorithm="grid",
    primary_metric="Accuracy",
    goal="Maximize",
)

# set the name of the sweep job experiment
sweep_job.experiment_name="sweep-example"

# define the limits for this sweep
sweep_job.set_limits(max_total_trials=4, max_concurrent_trials=2, timeout=7200)

# submit the sweep
returned_sweep_job = ml_client.create_or_update(sweep_job)

Überwachen und Überprüfen von Sweepaufträgen

Sie können Sweep-Aufträge in Azure Machine Learning Studio überwachen. Der Sweepauftrag initiiert Tests für jede Hyperparameterkombination, die getestet werden soll. Für jede Testversion können Sie alle protokollierten Metriken überprüfen.

Darüber hinaus können Sie Modelle auswerten und vergleichen, indem Sie die Testversionen im Studio visualisieren. Sie können jedes Diagramm so anpassen, dass die Hyperparameterwerte und Metriken für jede Testversion angezeigt und verglichen werden.

Tipp

Erfahren Sie mehr darüber, wie Sie Hyperparameter-Optimierungsaufträge visualisieren.