Penyetelan hyperparameter dengan Optuna

Optuna adalah pustaka Python sumber terbuka untuk penyetelan hyperparameter yang dapat diskalakan secara horizontal di beberapa sumber daya komputasi.

MLflow 3.0 memperkenalkan kemampuan baru yang kuat untuk pengoptimalan hyperparameter dengan mengintegrasikan dengan Optuna.

  • MlflowStorage kelas memungkinkan Optuna untuk menggunakan MLflow Tracking Server sebagai backend penyimpanannya.
  • MlflowSparkStudy kelas ini memungkinkan peluncuran studi Optuna paralel menggunakan ekskutor PySpark.

Pasang Optuna

MLflow 3.0 telah diinstal sebelumnya di Databricks Runtime 17.0 ML ke atas. Pada runtime yang lebih lama, gunakan perintah berikut untuk menginstal versi terbaru Optuna dan MLFlow.

%pip install mlflow --upgrade
%pip install optuna

Jalankan pengoptimalan Optuna secara paralel

Berikut adalah langkah-langkah dalam alur kerja Optuna:

  1. Tentukan fungsi tujuan untuk dioptimalkan. Dalam fungsi tujuan, tentukan ruang pencarian hyperparameter. Untuk detail selengkapnya, lihat Dokumentasi Optuna.

    Di bawah ini adalah contoh untuk pemilihan model dan penyetelan hiperparameter dengan sckit-learn. Contoh mendefinisikan fungsi objectivetujuan , dan memanggil suggest_float fungsi untuk menentukan ruang pencarian untuk parameter x.

import sklearn

def objective(trial):
    # Invoke suggest methods of a Trial object to generate hyperparameters.
    regressor_name = trial.suggest_categorical('classifier', ['SVR', 'RandomForest'])
    if regressor_name == 'SVR':
        svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
        regressor_obj = sklearn.svm.SVR(C=svr_c)
    else:
        rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
        regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)

    X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
    X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)

    regressor_obj.fit(X_train, y_train)
    y_pred = regressor_obj.predict(X_val)

    error = sklearn.metrics.mean_squared_error(y_val, y_pred)

    return error  # An objective value linked with the Trial object
  1. Buat penyimpanan bersama untuk pengoptimalan terdistribusi. Dengan MlflowStorage, Anda dapat menggunakan MLflow Tracking Server sebagai backend penyimpanan.
import mlflow
from mlflow.optuna.storage import MlflowStorage

experiment_id = mlflow.get_experiment_by_name(dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get()).experiment_id

mlflow_storage = MlflowStorage(experiment_id=experiment_id)
  1. Buat objek Studi Optuna, dan jalankan algoritma penyetelan dengan memanggil optimize fungsi objek Studi. MlflowSparkStudy dapat menjalankan studi Optuna paralel menggunakan eksekutor PySpark.

Di bawah ini adalah contoh dari dokumentasi Optuna.

  • Buat sebuah studi, dan optimalkan fungsi objective dengan 8 uji coba (melakukan 8 pemanggilan fungsi objective dengan nilai berbeda pada x).
  • Dapatkan parameter terbaik dari Studi
from mlflow.pyspark.optuna.study import MlflowSparkStudy

mlflow_study = MlflowSparkStudy(
    study_name="spark-mlflow-tuning",
    storage=mlflow_storage,
)

mlflow_study.optimize(objective, n_trials=8, n_jobs=4)

best_params = study.best_params

Contoh buku catatan

Notebook ini menyediakan contoh penggunaan Optuna untuk memilih model scikit-learn dan sekumpulan hyperparameter untuk himpunan data Iris.

Memperluas penyetelan hyperparameter dengan Optuna dan MLflow

Dapatkan buku catatan

API Integrasi Optuna MLFlow

MlflowStorage

MlflowStorage adalah kelas penyimpanan berbasis MLflow untuk Optuna dengan pemrosesan batch untuk menghindari pembatasan REST API.

Nama Parameter Kelas Tipe Deskripsi
experiment_id str ID eksperimen MLflow untuk penyimpanan
name str Nama penyimpanan
batch_flush_interval float Waktu dalam detik antara flush kelompok otomatis (default: 1,0 detik)
batch_size_threshold float Jumlah maksimum item dalam batch sebelum memicu flush (default: 100)

MlflowSparkStudy

MlflowSparkStudy adalah pembungkus kelas ~optuna.study.Study untuk menggabungkan Optuna dengan Spark melalui eksperimen MLflow.

Nama Parameter Kelas Tipe Deskripsi
study_name str Nama studi
storage mlflow.optuna.MlflowStorage Kelas penyimpanan berbasis MLflow
sampler samplers.BaseSampler Objek sampler yang mengimplementasikan algoritma latar belakang untuk saran nilai. optuna.samplers.TPESampler digunakan
sebagai default.
pruner float Objek pemangkas yang menentukan penghentian dini untuk percobaan yang tidak menjanjikan. optuna.pruners.MedianPruner digunakan
sebagai default.