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 :

  1. Définissez une fonction objective à optimiser. Dans la fonction objective, définissez l’espace de recherche d’hyperparamètre.
  2. 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 objectiveet appelez la fonction suggest_float pour définir l’espace de recherche du paramètre x.
  • Créez une étude et optimisez la fonction objective avec 100 essais, c’est-à-dire 100 appels de la fonction objective avec différentes valeurs de x.
  • 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

Mise à l’échelle du réglage des hyperparamètres avec Optuna et MLflow

Obtenir le notebook