Delen via


Hyperparameterafstemming met Optuna

Optuna is een opensource Python-bibliotheek voor hyperparameterafstemming die horizontaal kan worden geschaald over meerdere rekenresources. Optuna kan ook worden geïntegreerd met MLflow voor het bijhouden en bewaken van modellen en proefabonnementen.

Optuna installeren

Gebruik de volgende opdrachten om Optuna en de bijbehorende integratiemodule te installeren.

%pip install optuna
%pip install optuna-integration # Integration with MLflow

Zoekruimte definiëren en Optuna-optimalisatie uitvoeren

Dit zijn de stappen in een Optuna-werkstroom:

  1. Definieer een objectieve functie om te optimaliseren. Definieer binnen de doelfunctie de zoekruimte hyperparameter.
  2. Maak een Optuna Study-object en voer het afstemmingsalgoritme uit door de optimize functie van het object Study aan te roepen.

Hieronder ziet u een minimaal voorbeeld uit de optuna-documentatie.

  • Definieer de objectieve functie objectiveen roep de suggest_float functie aan om de zoekruimte voor de parameter xte definiëren.
  • Maak een studie en optimaliseer de objective functie met 100 experimenten, bijvoorbeeld 100 aanroepen van de objective functie met verschillende waarden.x
  • Haal de beste parameters van de studie op
def objective(trial):
    x = trial.suggest_float("x", -10, 10)
    return (x - 2) ** 2

study = optuna.create_study()
study.optimize(objective, n_trials=100)

best_params = study.best_params

Optuna-proefversies parallelliseren naar meerdere machines

U kunt Optuna-proefversies distribueren naar meerdere machines in een Azure Databricks-cluster met Joblib Apache Spark Backend.

import joblib
from joblibspark import register_spark

register_spark() # register Spark backend for Joblib
with joblib.parallel_backend("spark", n_jobs=-1):
    study.optimize(objective, n_trials=100)

Integreren met MLflow

Als u hyperparameters en metrische gegevens van alle optuna-experimenten wilt bijhouden, gebruikt u de MLflowCallback optuna-integratiemodules wanneer u de optimize functie aanroept.

import mlflow
from optuna.integration.mlflow import MLflowCallback

mlflow_callback = MLflowCallback(
    tracking_uri="databricks",
    metric_name="accuracy",
    create_experiment=False,
    mlflow_kwargs={
        "experiment_id": experiment_id
    }
)

study.optimize(objective, n_trials=100, callbacks=[mlflow_callback])

Voorbeeld van notitieblok

Dit notebook biedt een voorbeeld van het gebruik van Optuna om een scikit-learn-model en een set hyperparameters voor de Iris-gegevensset te selecteren.

Boven op een Optuna-werkstroom met één computer ziet u hoe u dit kunt doen

  • Optuna-experimenten parallelliseren naar meerdere machines via Joblib
  • Proefuitvoeringen bijhouden met MLflow

Hyperparameterafstemming omhoog schalen met Optuna en MLflow

Notebook downloaden