Optuna ile hiper parametre ayarlama

Optuna , birden çok işlem kaynağı arasında yatay olarak ölçeklendirilebilen hiper parametre ayarlamaya yönelik açık kaynak bir Python kitaplığıdır.

MLflow 3.0, Optuna ile tümleştirerek hiper parametre iyileştirmesi için güçlü yeni özellikler sunar.

  • MlflowStorage sınıfı, Optuna'nın depolama arka ucu olarak MLflow İzleme Sunucusu'nu kullanmasına izin verir.
  • MlflowSparkStudy sınıfı, PySpark yürütücülerini kullanarak paralel Optuna çalışmalarının başlatılmasını sağlar.

Optuna'yi yükleme

MLflow 3.0, Databricks Runtime 17.0 ML ve üzeri sürümlerde önceden yüklenmiştir. Eski çalışma zamanlarında, Optuna ve MLFlow'un en son sürümünü yüklemek için aşağıdaki komutları kullanın.

%pip install mlflow --upgrade
%pip install optuna

Optuna iyileştirmeyi paralel olarak çalıştırma

Optuna iş akışındaki adımlar şunlardır:

  1. İyileştirecek bir nesnel işlev tanımlayın. Amaç işlevinde hiper parametre arama alanını tanımlayın. Daha fazla ayrıntı için Optuna belgelerine bakın.

    Aşağıda, sckit-learn ile model seçimi ve hiper parametre ayarlama örneği verilmiştir. Örnek, objektif fonksiyonu objective tanımlar ve suggest_float fonksiyonunu, x parametresinin arama alanını tanımlamak üzere çağırır.

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. Dağıtılmış iyileştirme için paylaşılan bir depolama alanı oluşturun. MlflowStorage ile depolama arka ucu olarak MLflow İzleme Sunucusu'nu kullanabilirsiniz.
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. Bir Optuna Study nesnesi oluşturun ve Study nesnesinin optimize işlevini çağırarak ayarlama algoritmasını çalıştırın. MlflowSparkStudy PySpark yürütücülerini kullanarak paralel Optuna çalışmaları başlatmayı çalıştırabilir.

Aşağıda Optuna belgelerinden bir örnek verilmiştir.

  • Bir Çalışma oluşturun ve objective işlevini, objective işlevinin x farklı değerleriyle yapılan 8 çağrı ile optimize edin.
  • Çalışmanın en iyi parametrelerini alma
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

Not defteri örneği

Bu not defteri,Iris veri kümesi için bir scikit-learn modeli ve bir hiper parametre kümesi seçmek için Optuna'yı kullanma örneği sağlar.

Optuna ve MLflow ile hiperparametre ayarlamasını ölçeklendirme

Not defteri al

MLFlow Optuna Tümleştirme API'si

MlflowStorage

MlflowStorage REST API tıkanmasını önlemek için toplu işlem ile Optuna için MLflow tabanlı bir depolama sınıfıdır.

Sınıf Parametresi adı Türü Açıklama
experiment_id str Depolama için MLflow deneme kimliği
name str Depolamanın adı
batch_flush_interval float Otomatik toplu temizlemeler arasındaki saniye cinsinden süre (varsayılan: 1,0)
batch_size_threshold float Temizleme tetiklemeden önce toplu işlemdeki en fazla öğe sayısı (varsayılan: 100)

MlflowSparkStudy

MlflowSparkStudy , Optuna'nın MLflow denemesi aracılığıyla Spark ile entegre edilmesi için ~optuna.study.Study sınıfının bir sarmalayıcısıdır.

Sınıf Parametresi adı Türü Açıklama
study_name str Çalışmanın adı
storage mlflow.optuna.MlflowStorage MLflow tabanlı depolama sınıfı
sampler samplers.BaseSampler Değer önerisi için arka plan algoritması uygulayan bir örnekleyici nesnesi. optuna.samplers.TPESampler kullanılır
varsayılan olarak.
pruner float Ümit vermeyen deneylerin erken durdurulmasına karar veren bir budayıcı nesnesi. optuna.pruners.MedianPruner kullanılır
varsayılan olarak.