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
の検索空間を定義します。 - Study を作成し、100 回の試行で
objective
関数を最適化します。具体的には、x
の値を変えてobjective
関数を 100 回呼び出します。 - Study の最適なパラメーターを取得する
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 を使用すると、Azure 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 を使用して Iris データセットの scikit-learn モデルと、一連のハイパーパラメーターを選択する例を示します。
単一マシンでの Optuna ワークフローの上に、ノートブックでは次のような方法を紹介しています。
- Joblib を使用して Optuna の試行を複数のマシンに並列化する
- MLflow を使用して試行の実行を追跡する