Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Optuna is een opensource Python-bibliotheek voor hyperparameterafstemming die horizontaal kan worden geschaald over meerdere rekenresources.
MLflow 3.0 introduceert krachtige nieuwe mogelijkheden voor hyperparameteroptimalisatie door integratie met Optuna.
-
MlflowStoragemet klasse kan Optuna de MLflow Tracking Server als opslagback-end gebruiken. -
MlflowSparkStudyklasse maakt het starten van parallelle Optuna-studies mogelijk met behulp van PySpark-uitvoerders.
Optuna installeren
MLflow 3.0 is vooraf geïnstalleerd in Databricks Runtime 17.0 ML en hoger. Gebruik in oudere runtimes de volgende opdrachten om de nieuwste versie van Optuna en MLFlow te installeren.
%pip install mlflow --upgrade
%pip install optuna
Optuna-optimalisatie parallel uitvoeren
Dit zijn de stappen in een Optuna-werkstroom:
Definieer een objectieve functie om te optimaliseren. Binnen de doelfunctie, definieer de hyperparameter zoekruimte. Zie de documentatie van Optuna voor meer informatie.
Hieronder ziet u een voorbeeld voor modelselectie en hyperparameterafstemming met sckit-learn. In het voorbeeld wordt de doelfunctie
objectivegedefinieerd en wordt desuggest_floatfunctie aangeroepen om de zoekruimte voor de parameterxte definiëren.
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
- Maak een gedeelde opslag voor gedistribueerde optimalisatie. Met behulp van
MlflowStorage, kunt u MLflow Tracking Server gebruiken als opslag-backend.
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)
- Maak een Optuna Study-object en voer het afstemmingsalgoritme uit door de
optimizefunctie van het object Study aan te roepen.MlflowSparkStudykan parallelle Optuna-studies starten met behulp van PySpark-uitvoerders.
Hieronder ziet u een voorbeeld uit de optuna-documentatie.
- Maak een studie en optimaliseer de
objectivefunctie met 8 experimenten (8 aanroepen van deobjectivefunctie met verschillende waarden).x - Haal de beste parameters van de studie op
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
Voorbeeld van notitieblok
Dit notebook biedt een voorbeeld van het gebruik van Optuna om een scikit-learn-model en een set hyperparameters voor de Iris-gegevensset te selecteren.
Hyperparameterafstemming omhoog schalen met Optuna en MLflow
MLFlow Optuna Integration-API
MlflowStorage
MlflowStorage is een opslagklasse die op MLflow is gebaseerd voor Optuna, met batchverwerking om throttling van REST API's te voorkomen.
| Naam van klasseparameter | Typologie | Beschrijving |
|---|---|---|
experiment_id |
str |
MLflow-experiment-id voor de opslag |
name |
str |
Naam van de opslag |
batch_flush_interval |
float |
Tijd in seconden tussen automatische batchverversing (standaard: 1.0) |
batch_size_threshold |
float |
Maximum aantal items in batch voordat een leegmaken wordt geactiveerd (standaard: 100) |
MlflowSparkStudy
MlflowSparkStudy is een wrapper van de klasse ~optuna.study.Study om Optuna met Spark te integreren via een MLflow-experiment.
| Naam van klasseparameter | Typologie | Beschrijving |
|---|---|---|
study_name |
str |
Naam van het onderzoek |
storage |
mlflow.optuna.MlflowStorage |
Opslagklasse op basis van MLflow |
sampler |
samplers.BaseSampler |
Een voorbeeldobject dat achtergrondalgoritmen implementeert voor waardesuggesties.
optuna.samplers.TPESampler wordt gebruiktals de standaardwaarde. |
pruner |
float |
Een pruner-object dat besluit vroegtijdig te stoppen van onpromisserende experimenten.
optuna.pruners.MedianPruner wordt gebruiktals de standaardwaarde. |