メインコンテンツまでスキップ

Optuna を使用したハイパーパラメーターチューニング

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関数を最適化します。
  • スタディの最適なパラメーターを取得する
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

Optunaの試行を複数のマシンに並列化

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

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)

MLflow との統合

すべてのOptunaトライアルのハイパーパラメータとメトリクスを追跡するには、optimize関数を呼び出すときにOptuna IntegrationモジュールのMLflowCallbackを使用します。

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

ノートブックの例

このノートブックでは、Optunaを使用してscikit-learn、Iris データセット の モデルとハイパーパラメータのセットを選択する例を提供します。

1台のマシンのOptunaワークフローに加えて、ノートブックでは以下の方法を紹介しています。

  • Joblibを介してOptunaのトライアルを複数のマシンに並列化
  • MLflow で試用版の実行を追跡

OptunaとMLflowによるハイパーパラメーターチューニングのスケールアップ

Open notebook in new tab