Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Optuna ist eine Open-Source-Python-Bibliothek für die Optimierung von Hyperparametern, die horizontal über mehrere Computeressourcen skaliert werden kann.
MLflow 3.0 bietet leistungsstarke neue Funktionen für die Hyperparameteroptimierung durch Integration in Optuna.
-
MlflowStorageKlasse ermöglicht es Optuna, den MLflow Tracking Server als Backend für die Speicherung zu verwenden. -
MlflowSparkStudydie Klasse ermöglicht das Starten paralleler Optuna-Studien mit PySpark-Executoren.
Optuna installieren
MLflow 3.0 ist in Databricks Runtime 17.0 ML und höher vorinstalliert. Verwenden Sie in älteren Laufzeiten die folgenden Befehle, um die neueste Version von Optuna und MLFlow zu installieren.
%pip install mlflow --upgrade
%pip install optuna
Parallele Optuna-Optimierung ausführen
Hier sind die Schritte in einem Optuna-Workflow:
Definieren Sie eine Zielfunktion, die optimiert werden soll. Definieren Sie innerhalb der Zielfunktion den Suchbereich für Hyperparameter. Weitere Details finden Sie in der Optuna-Dokumentation.
Nachfolgend finden Sie ein Beispiel für die Modellauswahl und die Hyperparameteroptimierung mit sckit-learn. Das Beispiel definiert die Zielfunktion
objectiveund ruft diesuggest_floatFunktion auf, um den Suchbereich für den Parameterxzu definieren.
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
- Erstellen Sie einen freigegebenen Speicherplatz für die verteilte Optimierung. Mit
MlflowStorage, können Sie MLflow Tracking Server als Speicher-Back-End verwenden.
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)
- Erstellen Sie ein Optuna Study-Objekt, und führen Sie den Optimierungsalgorithmus aus, indem Sie die
optimize-Funktion des Study-Objekts aufrufen.MlflowSparkStudykann parallele Optuna-Studien mit PySpark-Executoren starten.
Nachfolgend finden Sie ein Beispiel aus der Optuna-Dokumentation.
- Erstellen Sie eine Studie, und optimieren Sie die
objectiveFunktion mit 8 Versuchen (8 Aufrufe derobjectiveFunktion mit unterschiedlichen Werten vonx). - Abrufen der besten Parameter des Study-Objekts
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
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.
Hochskalieren der Optimierung von Hyperparametern mit Optuna und MLflow
MLFlow Optuna-Integrations-API
MlflowStorage
MlflowStorage ist eine MLflow-basierte Speicherklasse für Optuna mit Batchverarbeitung, um die REST-API-Drosselung zu vermeiden.
| Klassenparametername | Typ | Description |
|---|---|---|
experiment_id |
str |
MLflow Experiment ID für den Speicher |
name |
str |
Name des Speichers |
batch_flush_interval |
float |
Zeit in Sekunden zwischen automatischen Batchlöschungen (Standard: 1,0) |
batch_size_threshold |
float |
Maximale Anzahl von Elementen im Batch vor dem Auslösen einer Leerung (Standard: 100) |
MlflowSparkStudy
MlflowSparkStudy ist ein Wrapper der Klasse ~optuna.study.Study , um Optuna mit Spark via MLflow Experiment zu integrieren.
| Klassenparametername | Typ | Description |
|---|---|---|
study_name |
str |
Name der Studie |
storage |
mlflow.optuna.MlflowStorage |
MLflow-basierte Speicherklasse |
sampler |
samplers.BaseSampler |
Ein Samplerobjekt, das den Hintergrundalgorithmus für Wertvorschlag implementiert.
optuna.samplers.TPESampler wird verwendetals Standard. |
pruner |
float |
Ein Pruner-Objekt, das ein frühzeitiges Beenden von nicht vielversprechenden Versuchen bestimmt.
optuna.pruners.MedianPruner wird verwendetals Standard. |