Поделиться через


Настройка гиперпараметров с помощью Optuna

Optuna — это библиотека Python с открытым исходным кодом для настройки гиперпараметра, которую можно масштабировать горизонтально в нескольких вычислительных ресурсах. Optuna также интегрируется с MLflow для модели и пробного отслеживания и мониторинга.

Установка Optuna

Используйте следующие команды, чтобы установить Optuna и его модуль интеграции.

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

Определение пространства поиска и оптимизация Optuna

Ниже приведены действия в рабочем процессе Optuna:

  1. Определите целевую функцию для оптимизации. В целевой функции определите пространство поиска гиперпараметров.
  2. Создайте объект Optuna Study и запустите алгоритм настройки, вызвав optimize функцию объекта Study.

Ниже приведен минимальный пример из документации Optuna.

  • Определите целевую функцию и вызовите функциюobjective, чтобы определить пространство поиска для параметраx.suggest_float
  • Создайте исследование и оптимизируйте функцию objective с 100 пробными версиями, т. е. 100 вызовов objective функции с различными значениями x.
  • Получение лучших параметров исследования
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

Параллелизация пробных версий Optuna на нескольких компьютерах

Пробные версии Optuna можно распространять на несколько компьютеров в кластере Azure Databricks с помощью серверной части Joblib Apache Spark.

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)

Интеграция с MLflow

Чтобы отслеживать гиперпараметры и метрики всех пробных версий Optuna, используйте MLflowCallback модули Optuna Integration при вызове optimize функции.

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

Пример записной книжки

Эта записная книжка содержит пример использования Optuna для выбора модели scikit-learn и набора гиперпараметров для набора данных Iris.

На вершине рабочего процесса Optuna с одним компьютером записная книжка демонстрирует, как

  • Параллелизация пробных версий Optuna на нескольких компьютерах с помощью Joblib
  • Отслеживание пробных запусков с помощью MLflow

Масштабирование настройки гиперпараметров с помощью Optuna и MLflow

Получить записную книжку