Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Optuna é uma biblioteca Python de software livre para ajuste de hiperparâmetro que pode ser dimensionada horizontalmente em vários recursos de computação.
O MLflow 3.0 apresenta novos recursos avançados para otimização de hiperparâmetro integrando-se ao Optuna.
-
MlflowStorageA classe permite que o Optuna use o Servidor de Acompanhamento do MLflow como seu back-end de armazenamento. -
MlflowSparkStudyA classe permite iniciar estudos paralelos do Optuna usando executores do PySpark.
Instalar o Optuna
O MLflow 3.0 é pré-instalado no Databricks Runtime 17.0 ML e superior. Em runtimes mais antigos, use os comandos a seguir para instalar a versão mais recente do Optuna e do MLFlow.
%pip install mlflow --upgrade
%pip install optuna
Executar a otimização do Optuna em paralelo
Estas são as etapas em um fluxo de trabalho do Optuna:
Defina uma função objetiva para otimizar. Dentro da função de objetivo, defina o espaço de pesquisa do hiperparâmetro. Para obter mais detalhes, consulte a documentação do Optuna.
Veja abaixo um exemplo de seleção de modelo e ajuste de hiperparâmetro com sckit-learn. O exemplo define a função
objectivede objetivo e chama asuggest_floatfunção 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
MlflowStorage, você pode usar o Servidor de Acompanhamento do MLflow como o back-end 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
optimizedo objeto Study.MlflowSparkStudypode executar o lançamento de estudos paralelos do Optuna usando executores do PySpark.
Veja abaixo um exemplo da documentação do Optuna.
- Crie um Estudo e otimize a função
objectivecom 8 avaliações (8 chamadas da funçãoobjectivecom valores diferentes da funçãox). - Obter 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
Exemplo de notebook
Este notebook fornece um exemplo de como usar o Optuna para selecionar um modelo scikit-learn e um conjunto de hiperparâmetros para o conjunto de dados Iris.
Dimensionando o ajuste do hiperparâmetro com Optuna e MLflow
API de integração do MLFlow Optuna
MlflowStorage
MlflowStorage é uma classe de armazenamento baseada em MLflow para Optuna com processamento em lote para evitar a limitação da API REST.
| Nome do parâmetro de classe | Tipo | Description |
|---|---|---|
experiment_id |
str |
ID do experimento do MLflow relacionado ao armazenamento |
name |
str |
Nome do armazenamento |
batch_flush_interval |
float |
Tempo em segundos entre liberações automáticas em lotes (padrão: 1.0) |
batch_size_threshold |
float |
Número máximo de itens em lote antes de disparar uma liberação (padrão: 100) |
MlflowSparkStudy
MlflowSparkStudy é um wrapper da classe ~optuna.study.Study para incorporar Optuna ao Spark por meio do experimento MLflow.
| Nome do parâmetro de classe | Tipo | Description |
|---|---|---|
study_name |
str |
Nome do estudo |
storage |
mlflow.optuna.MlflowStorage |
Classe de armazenamento baseada em MLflow |
sampler |
samplers.BaseSampler |
Um objeto amostrador que implementa o algoritmo de segundo plano para sugestão de valor.
optuna.samplers.TPESampler é usadocomo o padrão. |
pruner |
float |
Um objeto aparador que decide a interrupção antecipada de testes não promissores.
optuna.pruners.MedianPruner é usadocomo o padrão. |