Hyperparameterafstemming met Optuna
Optuna is een opensource Python-bibliotheek voor hyperparameterafstemming die horizontaal kan worden geschaald over meerdere rekenresources. Optuna kan ook worden geïntegreerd met MLflow voor het bijhouden en bewaken van modellen en proefabonnementen.
Optuna installeren
Gebruik de volgende opdrachten om Optuna en de bijbehorende integratiemodule te installeren.
%pip install optuna
%pip install optuna-integration # Integration with MLflow
Zoekruimte definiëren en Optuna-optimalisatie uitvoeren
Dit zijn de stappen in een Optuna-werkstroom:
- Definieer een objectieve functie om te optimaliseren. Definieer binnen de doelfunctie de zoekruimte hyperparameter.
- Maak een Optuna Study-object en voer het afstemmingsalgoritme uit door de
optimize
functie van het object Study aan te roepen.
Hieronder ziet u een minimaal voorbeeld uit de optuna-documentatie.
- Definieer de objectieve functie
objective
en roep desuggest_float
functie aan om de zoekruimte voor de parameterx
te definiëren. - Maak een studie en optimaliseer de
objective
functie met 100 experimenten, bijvoorbeeld 100 aanroepen van deobjective
functie met verschillende waarden.x
- Haal de beste parameters van de studie op
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
Optuna-proefversies parallelliseren naar meerdere machines
U kunt Optuna-proefversies distribueren naar meerdere machines in een Azure Databricks-cluster met Joblib Apache Spark Backend.
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)
Integreren met MLflow
Als u hyperparameters en metrische gegevens van alle optuna-experimenten wilt bijhouden, gebruikt u de MLflowCallback
optuna-integratiemodules wanneer u de optimize
functie aanroept.
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])
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.
Boven op een Optuna-werkstroom met één computer ziet u hoe u dit kunt doen
- Optuna-experimenten parallelliseren naar meerdere machines via Joblib
- Proefuitvoeringen bijhouden met MLflow