ハイパーオプチュナ
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
関数を最適化します。研究のベストをゲット
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でトライアル実行を追跡する