Dela via


Hyperparameterjustering med Optuna

Optuna är ett Python-bibliotek med öppen källkod för hyperparameterjustering som kan skalas vågrätt över flera beräkningsresurser.

MLflow 3.0 introducerar kraftfulla nya funktioner för hyperparameteroptimering genom att integrera med Optuna.

  • MlflowStorage -klassen tillåter Optuna att använda MLflow Tracking Server som lagringsserverdel.
  • MlflowSparkStudy -klassen möjliggör start av parallella Optuna-studier med PySpark-exekutorer.

Installera Optuna

MLflow 3.0 är förinstallerat i Databricks Runtime 17.0 ML och senare. På äldre körmiljöer använder du följande kommandon för att installera den senaste versionen av Optuna och MLFlow.

%pip install mlflow --upgrade
%pip install optuna

Köra Optuna-optimering parallellt

Här följer stegen i ett Optuna-arbetsflöde:

  1. Definiera en objektiv funktion som ska optimeras. I målfunktionen definierar du sökutrymmet för hyperparameter. Mer information finns i Optuna-dokumentationen.

    Nedan visas ett exempel på modellval och hyperparameterjustering med sckit-learn. Exemplet definierar målfunktionen objectiveoch anropar suggest_float funktionen för att definiera sökutrymmet för parametern x.

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. Skapa en delad lagring för distribuerad optimering. Med MlflowStoragekan du använda MLflow Tracking Server som lagringsserverdel.
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. Skapa ett Optuna Study-objekt och kör justeringsalgoritmen genom att anropa optimize funktionen för objektet Studie. MlflowSparkStudy kan köra parallella Optuna-studier med PySpark-utförare.

Nedan visas ett exempel från Optuna-dokumentationen.

  • Skapa en studie och optimera objective-funktionen med 8 försök (8 anrop av objective-funktionen med olika värdenx).
  • Hämta de bästa parametrarna för studien
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

Notebook-exempel

Den här notebook-filen innehåller ett exempel på hur du använder Optuna för att välja en scikit-learn-modell och en uppsättning hyperparametrar för Iris-datauppsättningen.

Skala upp hyperparameterjustering med Optuna och MLflow

Hämta anteckningsbok

INTEGRERINGS-API för MLFlow Optuna

MlflowStorage

MlflowStorage är en MLflow-baserad lagringsklass för Optuna med batchbearbetning för att undvika REST API-begränsning.

Namn på klassparameter Typ Beskrivning
experiment_id str MLflow-experiment-ID för lagringen
name str Lagringens namn
batch_flush_interval float Tid i sekunder mellan automatiska batchspolningar (standard: 1,0)
batch_size_threshold float Maximalt antal objekt i batchen innan en tömning utlöses (standard: 100)

MlflowSparkStudy

MlflowSparkStudy är en omslutning av klassen ~optuna.study.Study för att införliva Optuna med Spark via MLflow-experiment.

Namn på klassparameter Typ Beskrivning
study_name str Studiens namn
storage mlflow.optuna.MlflowStorage MLflow-baserad lagringsklass
sampler samplers.BaseSampler Ett exempelobjekt som implementerar bakgrundsalgoritm för värdeförslag. optuna.samplers.TPESampler används
som standard.
pruner float Ett beskärningsobjekt som bestämmer ett tidigt avslut av otillräckliga försök. optuna.pruners.MedianPruner används
som standardinställning.