Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Optuna est une bibliothèque Python open source pour le réglage des hyperparamètres qui peut être mise à l’échelle horizontalement sur plusieurs ressources de calcul.
MLflow 3.0 introduit de puissantes nouvelles fonctionnalités pour l’optimisation des hyperparamètres en s’intégrant à Optuna.
-
MlflowStorageLa classe permet à Optuna d’utiliser le serveur de suivi MLflow comme serveur principal de stockage. -
MlflowSparkStudyla classe permet de lancer des études Optuna parallèles à l’aide d’exécuteurs PySpark.
Installer Optuna
MLflow 3.0 est préinstallé dans Databricks Runtime 17.0 ML et versions ultérieures. Sur les anciens runtimes, utilisez les commandes suivantes pour installer la dernière version d’Optuna et MLFlow.
%pip install mlflow --upgrade
%pip install optuna
Exécuter l’optimisation Optuna en parallèle
Voici les étapes d’un flux de travail Optuna :
Définissez une fonction objective à optimiser. Dans la fonction objective, définissez l’espace de recherche d’hyperparamètre. Pour plus d’informations, consultez la documentation Optuna.
Voici un exemple de sélection de modèle et d’optimisation des hyperparamètres avec sckit-learn. L’exemple définit la fonction
objectiveobjective et appelle lasuggest_floatfonction pour définir l’espace de recherche du paramètrex.
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
- Créez un stockage partagé pour l’optimisation distribuée. Avec
MlflowStorage, vous pouvez utiliser le serveur de suivi MLflow comme back-end de stockage.
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)
- Créez un objet Optuna Study et exécutez l’algorithme de paramétrage en appelant la fonction
optimizede l’objet Study.MlflowSparkStudypeut lancer l'exécution d'études Optuna parallèles à l’aide d’exécuteurs PySpark.
Vous trouverez ci-dessous un exemple de la documentation Optuna.
- Créez une étude et optimisez la
objectivefonction avec 8 essais (8 appels de laobjectivefonction avec différentes valeurs dex). - Obtenir les meilleurs paramètres de l’étude
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
Exemple de notebook
Ce notebook fournit un exemple d’utilisation d’Optuna pour sélectionner un modèle scikit-learn et un ensemble d’hyperparamètres pour le jeu de données Iris.
Mise à l’échelle du réglage des hyperparamètres avec Optuna et MLflow
API d’intégration MLFlow Optuna
MlflowStorage
MlflowStorage est une classe de stockage basée sur MLflow pour Optuna avec traitement par lots afin d’éviter la limitation des API REST.
| Nom du paramètre de classe | Type | Descriptif |
|---|---|---|
experiment_id |
str |
ID d’expérience MLflow pour le stockage |
name |
str |
Nom du stockage |
batch_flush_interval |
float |
Durée en secondes entre les vidages automatiques des lots (valeur par défaut : 1,0) |
batch_size_threshold |
float |
Nombre maximal d’éléments par lots avant de déclencher un vidage (valeur par défaut : 100) |
MlflowSparkStudy
MlflowSparkStudy est un wrapper de la classe ~optuna.study.Study pour incorporer Optuna avec Spark via l’expérience MLflow.
| Nom du paramètre de classe | Type | Descriptif |
|---|---|---|
study_name |
str |
Nom de l’étude |
storage |
mlflow.optuna.MlflowStorage |
Classe de stockage basée sur MLflow |
sampler |
samplers.BaseSampler |
Objet sampler qui implémente l’algorithme d’arrière-plan pour la suggestion de valeur.
optuna.samplers.TPESampler est utilisécomme valeur par défaut. |
pruner |
float |
Objet d'élagage qui décide de l’arrêt anticipé des essais non concluants.
optuna.pruners.MedianPruner est utilisécomme valeur par défaut. |