Freigeben über


Optimierung von Hyperparametern mit Optuna

Optuna ist eine Open-Source-Python-Bibliothek für die Optimierung von Hyperparametern, die horizontal über mehrere Computeressourcen skaliert werden kann. Optuna lässt sich in MLflow für Modell- und Testnachverfolgung und -überwachung integriert.

Optuna installieren

Verwenden Sie die folgenden Befehle, um Optuna und dessen Integrationsmodul zu installieren.

%pip install optuna
%pip install optuna-integration # Integration with MLflow

Definieren des Suchbereichs und Ausführen der Optuna-Optimierung

Hier sind die Schritte in einem Optuna-Workflow:

  1. Definieren Sie eine Zielfunktion, die optimiert werden soll. Definieren Sie innerhalb der Zielfunktion den Suchbereich für Hyperparameter.
  2. Erstellen Sie ein Optuna Study-Objekt, und führen Sie den Optimierungsalgorithmus aus, indem Sie die optimize-Funktion des Study-Objekts aufrufen.

Im Folgenden finden Sie ein minimales Beispiel aus der Optuna-Dokumentation.

  • Definieren Sie die Zielfunktion objective, und rufen Sie die suggest_float-Funktion auf, um den Suchbereich für den Parameter x zu definieren.
  • Erstellen Sie ein Study-Objekt, und optimieren Sie die objective-Funktion mit 100 Versuchen, d. h. 100 Aufrufe der objective-Funktion mit unterschiedlichen Werten von x.
  • Abrufen der besten Parameter des Study-Objekts
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

Parallelisieren von Optuna-Testversionen auf mehreren Computern

Sie können Optuna-Testversionen mit dem Apache Spark-Back-End für Joblib an mehrere Computer in einem Azure Databricks-Cluster verteilen.

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)

Integration in MLflow

Verwenden Sie zum Nachverfolgen von Hyperparametern und Metriken aller Optuna-Testversionen das MLflowCallback-Element der Optuna-Integrationsmodule, wenn Sie die optimize-Funktion aufrufen.

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])

Notebook-Beispiel

Dieses Notebook enthält ein Beispiel für die Verwendung von Optuna zum Auswählen eines Scikit-learn-Modells und einer Reihe von Hyperparametern für das Iris-Dataset.

Neben einem Optuna-Workflow mit einem einzelnen Computer zeigt das Notebook, wie

  • Optuna-Testversionen über Joblib auf mehreren Computern parallelisiert werden
  • Ausführungen von Testversionen mit MLflow nachverfolgt werden

Hochskalieren der Optimierung von Hyperparametern mit Optuna und MLflow

Notebook abrufen