Pular para o conteúdo principal

Ajuste de hiperparâmetros com Optuna

Optuna é um código aberto Python biblioteca para ajuste de hiperparâmetros que pode ser dimensionado horizontalmente em vários compute recursos.

O MLflow 3.0 apresenta novos recursos avançados para a otimização de hiperparâmetros por meio da integração com o Optuna.

  • MlflowStorage permite que o Optuna use o servidor de acompanhamento MLflow como back-end de armazenamento.
  • MlflowSparkStudy permite iniciar estudos paralelos da Optuna usando o executor PySpark.

Instale Optuna

MLflow 3.0 vem pré-instalado no Databricks Runtime 17.0 ML e no acima. Em tempos de execução mais antigos, use o comando a seguir para instalar a versão mais recente do Optuna e do MLFlow.

%pip install mlflow --upgrade
%pip install optuna

execução Optuna optimization em paralelo

Aqui estão as etapas de um fluxo de trabalho do Optuna:

  1. Defina uma função objetivo a ser otimizada. Dentro da função objetivo, defina o espaço de busca de hiperparâmetros. Para obter mais detalhes, consulte a documentação do Optuna.

    abaixo é um exemplo de seleção de modelos e ajuste de hiperparâmetros com o sckit-learn. O exemplo define a função objetivo objective e chama a função suggest_float para definir o espaço de pesquisa para o parâmetro x.

Python
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
  1. Crie um armazenamento compartilhado para otimização distribuída. Com o MlflowStorage, o senhor pode usar o MLflow acompanhamento Server como backend de armazenamento.
Python
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)
  1. Crie um objeto Optuna Study e execute o algoritmo de ajuste chamando a função optimize do objeto Study. MlflowSparkStudy pode executar o lançamento de estudos paralelos da Optuna usando o executor PySpark.

abaixo é um exemplo da documentação do Optuna.

  • Crie um estudo e otimize a função objective com 8 tentativas (8 chamadas da função objective com valores diferentes de x).
  • Obtenha os melhores parâmetros do estudo
Python
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 exemplo

Este Notebook fornece um exemplo de uso do Optuna para selecionar um modelo scikit-learn e um conjunto de hiperparâmetros para o Iris dataset.

Ampliação do ajuste de hiperparâmetros com o Optuna e o MLflow

Open notebook in new tab

API de integração do MLFlow Optuna

Armazenamento de fluxo de ML

MlflowStorage é uma classe de armazenamento baseada em MLflow para Optuna com processamento de lotes para evitar REST API throttling.

Nome do parâmetro de classe

Tipo

Descrição

experiment_id

str

ID do experimento MLflow para o armazenamento

name

str

Nome do armazenamento

batch_flush_interval

float

Tempo em segundos entre as descargas automáticas de lotes (default: 1.0)

batch_size_threshold

float

Número máximo de itens em lotes antes de acionar uma descarga (default: 100)

Estudo ML Flowspark

MlflowSparkStudy é um wrapper da classe ~optuna.study.Study para incorporar o Optuna ao Spark por meio do experimento MLflow.

Nome do parâmetro de classe

Tipo

Descrição

study_name

str

Nome do estudo

storage

mlflow.optuna.MlflowStorage

Classe de armazenamento baseada em MLflow

sampler

samplers.BaseSampler

Um objeto amostrador que implementa um algoritmo de fundo para sugestão de valor. optuna.samplers.TPESampler é usado como o default.

pruner

float

Um objeto podador que decide interromper precocemente testes pouco promissores. optuna.pruners.MedianPruner é usado como o default.