Réglage des hyperparamètres avec Optuna
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. Optuna s’intègre également à MLflow pour le suivi et la surveillance des modèles et des versions d’évaluation.
Installer Optuna
Utilisez les commandes suivantes pour installer Optuna et son module d’intégration.
%pip install optuna
%pip install optuna-integration # Integration with MLflow
Définir l’espace de recherche et exécuter l’optimisation Optuna
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.
- Créez un objet Optuna Study et exécutez l’algorithme de paramétrage en appelant la fonction
optimize
de l’objet Study.
Voici un exemple minimal de la documentation Optuna.
- Définissez la fonction objective
objective
et appelez la fonctionsuggest_float
pour définir l’espace de recherche du paramètrex
. - Créez une étude et optimisez la fonction
objective
avec 100 essais, c’est-à-dire 100 appels de la fonctionobjective
avec différentes valeurs dex
. - Obtenir les meilleurs paramètres de l’étude
def objective(trial):
x = trial.suggest_float("x", -10, 10)
return (x - 2) ** 2
study = optuna.create_study()
study.optimize(objective, n_trials=100)
best_params = study.best_params
Parallélisez les essais Optuna sur plusieurs machines
Vous pouvez distribuer des essais Optuna sur plusieurs machines d’un cluster Azure Databricks avec back-end Apache Spark Joblib.
import joblib
from joblibspark import register_spark
register_spark() # register Spark backend for Joblib
with joblib.parallel_backend("spark", n_jobs=-1):
study.optimize(objective, n_trials=100)
Intégrer à MLflow
Pour suivre les hyperparamètres et les métriques de tous les essais Optuna, utilisez la MLflowCallback
des modules d’intégration Optuna lorsque vous appelez la fonction optimize
.
import mlflow
from optuna.integration.mlflow import MLflowCallback
mlflow_callback = MLflowCallback(
tracking_uri="databricks",
metric_name="accuracy",
create_experiment=False,
mlflow_kwargs={
"experiment_id": experiment_id
}
)
study.optimize(objective, n_trials=100, callbacks=[mlflow_callback])
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.
En plus d’un flux de travail Optuna à un seul ordinateur, le bloc-notes montre comment procéder
- Paralléliser les essais Optuna sur plusieurs machines via Joblib
- Suivre les exécutions d’évaluation avec MLflow