Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Optuna è una libreria Python open source per l’ottimizzazione degli iperparametri che può essere ridimensionata orizzontalmente tra più risorse di calcolo.
MLflow 3.0 introduce nuove potenti funzionalità per l'ottimizzazione degli iperparametri grazie all'integrazione con Optuna.
-
MlflowStorage
La classe consente a Optuna di usare il server di rilevamento MLflow come back-end di archiviazione. -
MlflowSparkStudy
classe abilita l'avvio di studi paralleli Optuna usando executor PySpark.
Installare Optuna
MLflow 3.0 è preinstallato in Databricks Runtime 17.0 ML e versioni successive. Nei runtime meno recenti usare i comandi seguenti per installare la versione più recente di Optuna e MLFlow.
%pip install mlflow --upgrade
%pip install optuna
Eseguire l'ottimizzazione Optuna in parallelo
Ecco i passaggi in un flusso di lavoro Optuna:
Come definire una funzione obiettivo. All’interno della funzione obiettivo definire lo spazio di ricerca degli iperparametri. Per altri dettagli, vedere la documentazione di Optuna.
Di seguito è riportato un esempio per la selezione del modello e l'ottimizzazione degli iperparametri con sckit-learn. L'esempio definisce la funzione
objective
obiettivo e chiama lasuggest_float
funzione per definire lo spazio di ricerca per il parametrox
.
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
- Creare una risorsa di archiviazione condivisa per l'ottimizzazione distribuita. Con
MlflowStorage
è possibile usare MLflow Tracking Server come back-end di archiviazione.
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)
- Creare un oggetto Optuna Study ed eseguire l’algoritmo di ottimizzazione chiamando la
optimize
funzione dell’oggetto Study.MlflowSparkStudy
può avviare studi Optuna paralleli usando gli executor PySpark.
Di seguito è riportato un esempio della documentazione di Optuna.
- Creare uno studio e ottimizzare la
objective
funzione con 8 prove (8 chiamate dellaobjective
funzione con valori diversi dix
). - Ottenere i parametri migliori dello studio
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
Esempio di notebook
Questo notebook fornisce un esempio di uso di Optuna per selezionare un modello scikit-learn e un set di iperparametri per il set di dati Iris.
Aumento dell'ottimizzazione degli iperparametri con Optuna e MLflow
API di integrazione di MLFlow Optuna
MlflowStorage
MlflowStorage
è una classe di archiviazione con base MLflow per Optuna con elaborazione batch per evitare il throttling dell'API REST.
Nome del parametro della classe | TIPO | Descrizione |
---|---|---|
experiment_id |
str |
L'ID dell'esperimento MLflow per l'archiviazione |
name |
str |
Nome dell'archiviazione |
batch_flush_interval |
float |
Tempo in secondi tra gli scaricamenti automatici del batch (impostazione predefinita: 1,0) |
batch_size_threshold |
float |
Numero massimo di elementi in batch prima di attivare uno scaricamento (impostazione predefinita: 100) |
MlflowSparkStudy
MlflowSparkStudy
è un wrapper della classe ~optuna.study.Study
per incorporare Optuna con Spark tramite l'esperimento MLflow.
Parametro della classe | TIPO | Descrizione |
---|---|---|
study_name |
str |
Nome dello studio |
storage |
mlflow.optuna.MlflowStorage |
Classe di archiviazione basata su MLflow |
sampler |
samplers.BaseSampler |
Oggetto sampler che implementa l'algoritmo di sfondo per il suggerimento di valore.
optuna.samplers.TPESampler viene usatocome impostazione predefinita. |
pruner |
float |
Oggetto di potatura che decide l'interruzione anticipata delle prove non promettenti.
optuna.pruners.MedianPruner viene usatocome impostazione predefinita. |