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:
-
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çãosuggest_float
para definir o espaço de pesquisa para o 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
- Crie um armazenamento compartilhado para otimização distribuída. Com o
MlflowStorage
, o senhor pode usar o MLflow acompanhamento Server como backend de armazenamento.
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)
- 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çãoobjective
com valores diferentes dex
). - Obtenha os melhores parâmetros do estudo
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
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 |
---|---|---|
|
| ID do experimento MLflow para o armazenamento |
|
| Nome do armazenamento |
|
| Tempo em segundos entre as descargas automáticas de lotes (default: 1.0) |
|
| 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 |
---|---|---|
|
| Nome do estudo |
|
| Classe de armazenamento baseada em MLflow |
|
| Um objeto amostrador que implementa um algoritmo de fundo para sugestão de valor. |
|
| Um objeto podador que decide interromper precocemente testes pouco promissores. |