ハイパーオプチュナ

Optunaは、複数のコンピューティングリソースにわたって水平にスケーリングできるハイパーメトリックチューニング用のPythonライブラリです。 Optuna は、モデルとトライアルの追跡とモニタリングのためにMLflowと統合されています。

Optunaのインストール

Optuna とその統合モジュールをインストールするには、以下のコマンドを使用します。

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

探索空間を定義してOptunaの最適化を実行する

Optuna ワークフローのステップは次のとおりです。

  1. 最適化する目的関数を定義します。 目的関数内で、ハイパーパラメーター探索空間を定義します。

  2. Optuna Study オブジェクトを作成し、Study オブジェクトのoptimize関数を呼び出してチューニング アルゴリズムを実行します。

以下は、 Optunaのドキュメントからの最小限の例です。

  • 目的関数objectiveを定義し、 suggest_float関数を呼び出してパラメーターxの検索空間を定義します。

  • スタディを作成し、100回の試行、つまり、異なる値xobjective関数を100回呼び出すことで、objective関数を最適化します。

  • 研究のベストをゲット

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の試行を複数のマシンに並列化

Joblib Apache Spark Backendを使用すると、Databricks クラスター内の複数のマシンに Optuna トライアルを配布できます。

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 トライアルのハイパーパラメータとメトリックを追跡するには、 optimize関数を呼び出すときに Optuna 統合モジュールのMLflowCallbackを使用します。

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によるハイパースケール化

ノートブックを新しいタブで開く