Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
Optuna es una biblioteca de Python de código abierto para el ajuste de hiperparámetros que se puede escalar horizontalmente entre varios recursos de proceso.
MLflow 3.0 presenta nuevas funcionalidades eficaces para la optimización de hiperparámetros mediante la integración con Optuna.
-
MlflowStorageLa clase permite a Optuna usar el servidor de seguimiento de MLflow como back-end de almacenamiento. -
MlflowSparkStudyLa clase habilita el inicio de estudios Optuna paralelos mediante ejecutores de PySpark.
Instalar Optuna
MLflow 3.0 está preinstalado en Databricks Runtime 17.0 ML y versiones posteriores. En entornos de ejecución anteriores, use los siguientes comandos para instalar la versión más reciente de Optuna y MLFlow.
%pip install mlflow --upgrade
%pip install optuna
Ejecutar la optimización Optuna en paralelo
Estos son los pasos de un flujo de trabajo de Optuna:
Definir una función objetivo para optimizar. Dentro de la función objetivo, defina el espacio de búsqueda de hiperparámetros. Para obtener más información, consulte la documentación de Optuna.
A continuación se muestra un ejemplo de selección de modelos e ajuste de hiperparámetros con sckit-learn. En el ejemplo se define la función
objectiveobjetivo y se llama a lasuggest_floatfunción para definir el espacio de búsqueda del parámetrox.
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
- Cree un almacenamiento compartido para la optimización distribuida. Con
MlflowStorage, puede usar el servidor de seguimiento de MLflow como back-end de almacenamiento.
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)
- Cree un objeto Optuna Study y ejecute el algoritmo de optimización llamando a la función
optimizedel objeto Study.MlflowSparkStudypuede ejecutar en paralelo estudios de Optuna mediante ejecutores de PySpark.
A continuación se muestra un ejemplo de la documentación de Optuna.
- Cree un estudio y optimice la
objectivefunción con 8 evaluaciones (8 llamadas de laobjectivefunción con valores diferentes dex). - Obtener los mejores parámetros del Study
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
Ejemplo de cuaderno
En este cuaderno se proporciona un ejemplo del uso de Optuna para seleccionar un modelo scikit-learn y un conjunto de hiperparámetros para el conjunto de datos Iris.
Escalado vertical del ajuste de hiperparámetros con Optuna y MLflow
MLFlow Optuna Integration API
MlflowStorage
MlflowStorage es una clase de almacenamiento basada en MLflow para Optuna con procesamiento por lotes para evitar la limitación de la API REST.
| Nombre del parámetro de clase | Tipo | Description |
|---|---|---|
experiment_id |
str |
Identificador del experimento de MLflow para el almacenamiento |
name |
str |
Nombre del almacenamiento |
batch_flush_interval |
float |
Tiempo en segundos entre vaciados automáticos por lotes (valor predeterminado: 1.0) |
batch_size_threshold |
float |
Número máximo de elementos por lotes antes de desencadenar un vaciado (valor predeterminado: 100) |
MlflowSparkStudy
MlflowSparkStudy es un contenedor de la clase ~optuna.study.Study para incorporar Optuna con Spark a través del experimento de MLflow.
| Nombre del parámetro de clase | Tipo | Description |
|---|---|---|
study_name |
str |
Nombre del estudio |
storage |
mlflow.optuna.MlflowStorage |
Clase de almacenamiento basada en MLflow |
sampler |
samplers.BaseSampler |
Objeto de muestreo que implementa un algoritmo que opera en segundo plano para la sugerencia de valor.
optuna.samplers.TPESampler se usacomo valor predeterminado. |
pruner |
float |
Un objeto pruner que decide la detención temprana de ensayos poco prometedores.
optuna.pruners.MedianPruner se usacomo valor predeterminado. |