Optuna を使用したハイパーパラメーターチューニング
Optuna は、複数のコンピュート リソース間で水平方向にスケーリングできるハイパーパラメーターチューニング用のオープンソース Python ライブラリです。 また、OptunaはMLflowと統合し、モデルや試験の追跡とモニタリングを行います。
Optunaのインストール
以下のコマンドでOptunaとその統合モジュールをインストールします。
%pip install optuna
%pip install optuna-integration # Integration with MLflow
サーチスペースの定義とOptuna最適化の実行
以下は、Optunaのワークフローのステップです。
- 最適化する目的関数を定義します。 目的関数内で、ハイパーパラメーター探索空間を定義します。
- Optuna Studyオブジェクトを作成し、Studyオブジェクトの
optimize
関数を呼び出してチューニングアルゴリズムを実行します。
以下は、 Optunaのドキュメントからの最小限の例です。
- 目的関数 の
objective
を定義し、suggest_float
関数を呼び出してパラメーターx
の探索空間を定義します。 - スタディを作成し、100回の試行、つまり、異なる値
x
でobjective
関数を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 で試用版の実行を追跡