Delen via


Hyperparameterafstemming met Optuna

Optuna is een opensource Python-bibliotheek voor hyperparameterafstemming die horizontaal kan worden geschaald over meerdere rekenresources.

MLflow 3.0 introduceert krachtige nieuwe mogelijkheden voor hyperparameteroptimalisatie door integratie met Optuna.

  • MlflowStorage met klasse kan Optuna de MLflow Tracking Server als opslagback-end gebruiken.
  • MlflowSparkStudy klasse maakt het starten van parallelle Optuna-studies mogelijk met behulp van PySpark-uitvoerders.

Optuna installeren

MLflow 3.0 is vooraf geïnstalleerd in Databricks Runtime 17.0 ML en hoger. Gebruik in oudere runtimes de volgende opdrachten om de nieuwste versie van Optuna en MLFlow te installeren.

%pip install mlflow --upgrade
%pip install optuna

Optuna-optimalisatie parallel uitvoeren

Dit zijn de stappen in een Optuna-werkstroom:

  1. Definieer een objectieve functie om te optimaliseren. Binnen de doelfunctie, definieer de hyperparameter zoekruimte. Zie de documentatie van Optuna voor meer informatie.

    Hieronder ziet u een voorbeeld voor modelselectie en hyperparameterafstemming met sckit-learn. In het voorbeeld wordt de doelfunctie objectivegedefinieerd en wordt de suggest_float functie aangeroepen om de zoekruimte voor de parameter xte definiëren.

import sklearn

def objective(trial):
    # Invoke suggest methods of a Trial object to generate hyperparameters.
    regressor_name = trial.suggest_categorical('classifier', ['SVR', 'RandomForest'])
    if regressor_name == 'SVR':
        svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
        regressor_obj = sklearn.svm.SVR(C=svr_c)
    else:
        rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
        regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)

    X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
    X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)

    regressor_obj.fit(X_train, y_train)
    y_pred = regressor_obj.predict(X_val)

    error = sklearn.metrics.mean_squared_error(y_val, y_pred)

    return error  # An objective value linked with the Trial object
  1. Maak een gedeelde opslag voor gedistribueerde optimalisatie. Met behulp van MlflowStorage, kunt u MLflow Tracking Server gebruiken als opslag-backend.
import mlflow
from mlflow.optuna.storage import MlflowStorage

experiment_id = mlflow.get_experiment_by_name(dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get()).experiment_id

mlflow_storage = MlflowStorage(experiment_id=experiment_id)
  1. Maak een Optuna Study-object en voer het afstemmingsalgoritme uit door de optimize functie van het object Study aan te roepen. MlflowSparkStudy kan parallelle Optuna-studies starten met behulp van PySpark-uitvoerders.

Hieronder ziet u een voorbeeld uit de optuna-documentatie.

  • Maak een studie en optimaliseer de objective functie met 8 experimenten (8 aanroepen van de objective functie met verschillende waarden).x
  • Haal de beste parameters van de studie op
from mlflow.pyspark.optuna.study import MlflowSparkStudy

mlflow_study = MlflowSparkStudy(
    study_name="spark-mlflow-tuning",
    storage=mlflow_storage,
)

mlflow_study.optimize(objective, n_trials=8, n_jobs=4)

best_params = study.best_params

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.

Hyperparameterafstemming omhoog schalen met Optuna en MLflow

Notebook krijgen

MLFlow Optuna Integration-API

MlflowStorage

MlflowStorage is een opslagklasse die op MLflow is gebaseerd voor Optuna, met batchverwerking om throttling van REST API's te voorkomen.

Naam van klasseparameter Typologie Beschrijving
experiment_id str MLflow-experiment-id voor de opslag
name str Naam van de opslag
batch_flush_interval float Tijd in seconden tussen automatische batchverversing (standaard: 1.0)
batch_size_threshold float Maximum aantal items in batch voordat een leegmaken wordt geactiveerd (standaard: 100)

MlflowSparkStudy

MlflowSparkStudy is een wrapper van de klasse ~optuna.study.Study om Optuna met Spark te integreren via een MLflow-experiment.

Naam van klasseparameter Typologie Beschrijving
study_name str Naam van het onderzoek
storage mlflow.optuna.MlflowStorage Opslagklasse op basis van MLflow
sampler samplers.BaseSampler Een voorbeeldobject dat achtergrondalgoritmen implementeert voor waardesuggesties. optuna.samplers.TPESampler wordt gebruikt
als de standaardwaarde.
pruner float Een pruner-object dat besluit vroegtijdig te stoppen van onpromisserende experimenten. optuna.pruners.MedianPruner wordt gebruikt
als de standaardwaarde.