Sdílet prostřednictvím


Ladění hyperparametrů pomocí Optuna

Optuna je opensourcová knihovna Pythonu pro ladění hyperparametrů, která se dá horizontálně škálovat napříč několika výpočetními prostředky.

MLflow 3.0 zavádí výkonné nové funkce pro optimalizaci hyperparametrů díky integraci s Optuna.

  • MlflowStorage Třída umožňuje Optuna používat MLflow Tracking Server jako své úložiště backendu.
  • MlflowSparkStudy třída umožňuje spouštění paralelních studií Optuna pomocí exekutorů PySpark.

Instalace Optuna

MLflow 3.0 je předinstalovaný v Databricks Runtime 17.0 ML a vyšší. Ve starších běhových prostředích použijte následující příkazy k instalaci nejnovější verze Optuna a MLFlow.

%pip install mlflow --upgrade
%pip install optuna

Paralelní spuštění optimalizace Optuna

Tady jsou kroky v pracovním postupu Optuna:

  1. Definujte funkci cíle, která se má optimalizovat. V rámci objektivní funkce definujte prostor pro vyhledávání hyperparametrů. Další podrobnosti najdete v dokumentaci k Optuna.

    Níže je příklad pro výběr modelu a ladění hyperparametrů pomocí sckit-learn. Příklad definuje cílovou funkci objectivea zavolá suggest_float funkci k definování vyhledávacího prostoru pro parametr 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. Vytvořte sdílené úložiště pro distribuovanou optimalizaci. Pomocí MlflowStoragepříkazu MLflow Tracking Server můžete použít jako back-end úložiště.
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. Vytvořte objekt Optuna Study a spusťte algoritmus ladění voláním optimize funkce Study objektu. MlflowSparkStudy může spouštět paralelní studie Optuna pomocí exekutorů PySpark.

Níže je příklad z dokumentace k Optuna.

  • Vytvořte studii a optimalizujte objective funkci pomocí 8 pokusů (8 volání objective funkce s různými hodnotami x).
  • Získání nejlepších parametrů studie
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

Příklad poznámkového bloku

Tento poznámkový blok poskytuje příklad použití knihovny Optuna pro výběr modelu scikit-learn a sady hyperparametrů pro datovou sadu Iris.

Škálování ladění hyperparametrů pomocí Optuna a MLflow

Získejte poznámkový blok

MLFlow Optuna Integration API

MlflowStorage

MlflowStorage je třída úložiště založená na MLflow pro Optuna s dávkovým zpracováním, aby se zabránilo omezování rozhraní REST API.

Název parametru třídy Typ Popis
experiment_id str ID experimentu MLflow pro úložiště
name str Název úložiště
batch_flush_interval float Doba v sekundách mezi automatickým vyprazdňováním dávek (výchozí hodnota: 1,0)
batch_size_threshold float Maximální počet položek v dávce před spuštěním vyprázdnění (výchozí hodnota: 100)

MlflowSparkStudy

MlflowSparkStudy je obálka třídy ~optuna.study.Study pro začlenění Optuna se Sparkem prostřednictvím experimentu MLflow.

Název parametru třídy Typ Popis
study_name str Název studie
storage mlflow.optuna.MlflowStorage Třída úložiště založená na MLflow
sampler samplers.BaseSampler Objekt sampler, který implementuje algoritmus na pozadí pro návrh hodnot. optuna.samplers.TPESampler se používá
jako výchozí.
pruner float Objekt prořezávače, který rozhoduje o předčasném zastavení neperspektivních pokusů. optuna.pruners.MedianPruner se používá
jako výchozí.