Usar um trabalho de varredura para ajuste de hiperparâmetro

Concluído

No Azure Machine Learning, você pode ajustar os hiperparâmetros executando um trabalho de varredura.

Criar um script de treinamento para ajuste de hiperparâmetro

Para executar um trabalho de varredura, é necessário criar um script de treinamento exatamente como você faria para qualquer outro trabalho de treinamento, exceto pelo fato de que o script deve:

  • Incluir um argumento para cada hiperparâmetro que você deseja variar.
  • Registrar a métrica de desempenho de destino com MLflow. Uma métrica registrada em log permite que o trabalho de varredura avalie o desempenho das avaliações iniciadas e identifique a que produz o modelo de melhor desempenho.

Por exemplo, o script de exemplo a seguir treina um modelo de regressão logística usando um argumento --regularization para definir o hiperparâmetro de taxa de regularização e registra a métrica de precisão com o nome 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)

Configurar e executar um trabalho de varredura

Para preparar o trabalho de varredura, primeiro você deve criar um trabalho de comando base que especifique qual script executar e defina os parâmetros usados pelo script:

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",
    )

Em seguida, você pode substituir os parâmetros de entrada pelo espaço de pesquisa:

from azure.ai.ml.sweep import Choice

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

Por fim, chame sweep() em seu trabalho de comando para varrer o espaço de pesquisa:

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)

Monitorar e revisar trabalhos de varredura

Você pode monitorar trabalhos de varredura no Estúdio do Azure Machine Learning. O trabalho de varredura iniciará avaliações para cada combinação de hiperparâmetro a ser testada. Para cada avaliação, você pode examinar todas as métricas registradas.

Além disso, você pode avaliar e comparar modelos visualizando as avaliações no estúdio. Você pode ajustar cada gráfico para mostrar e comparar os valores e as métricas do hiperparâmetro para cada avaliação.