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 Optuna também se integra ao site MLflow para acompanhamento e monitoramento de modelos e testes.

Instale Optuna

Use o comando a seguir para instalar o Optuna e seu módulo de integração.

%pip install optuna
%pip install optuna-integration # Integration with MLflow

Definir o espaço de busca e a execução da otimização Optuna

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.
  2. Crie um objeto Optuna Study e execute o algoritmo de ajuste chamando a função optimize do objeto Study.

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

  • Defina a função objetivo objective e chame a função suggest_float para definir o espaço de busca para o parâmetro x.
  • Crie um estudo e otimize a função objective com 100 tentativas, ou seja, 100 chamadas da função objective com valores diferentes de x.
  • Obtenha os melhores parâmetros do estudo
Python
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

Paralelize os testes do Optuna com várias máquinas

O senhor pode distribuir testes do Optuna para várias máquinas em um cluster Databricks com o Joblib Apache Spark Backend.

Python
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)

Integrar com o MLflow

Para rastrear hiperparâmetros e métricas de todos os testes do Optuna, use o endereço MLflowCallback dos módulos de integração do Optuna quando o senhor chamar a função optimize.

Python
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])

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.

Além de um fluxo de trabalho Optuna de uma única máquina, o Notebook mostra como

  • Paralelize os testes do Optuna em várias máquinas via Joblib
  • Acompanhe a execução do teste com MLflow

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

Open notebook in new tab