Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Optuna — это библиотека Python с открытым исходным кодом для настройки гиперпараметра, которую можно масштабировать горизонтально в нескольких вычислительных ресурсах.
MLflow 3.0 предоставляет мощные новые возможности для оптимизации гиперпараметров путем интеграции с Optuna.
-
MlflowStorage
класс позволяет Optuna использовать сервер отслеживания MLflow в качестве серверной части своего хранилища. -
MlflowSparkStudy
класс позволяет запускать параллельные исследования Optuna с помощью исполнителей PySpark.
Установка Optuna
MLflow 3.0 предварительно установлен в Databricks Runtime 17.0 ML и выше. В более старых средах выполнения используйте следующие команды, чтобы установить последнюю версию Optuna и MLFlow.
%pip install mlflow --upgrade
%pip install optuna
Параллельное выполнение оптимизации Optuna
Ниже приведены действия в рабочем процессе Optuna:
Определите целевую функцию для оптимизации. В целевой функции определите пространство поиска гиперпараметров. Дополнительные сведения см. в документации Optuna.
Ниже приведен пример выбора модели и настройки гиперпараметра с помощью sckit-learn. В примере определяется целевая функция
objective
, и вызывается функцияsuggest_float
для определения области поиска для параметра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
- Создайте общее хранилище для распределенной оптимизации. С помощью
MlflowStorage
можно использовать сервер отслеживания MLflow в качестве серверной части хранилища.
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)
- Создайте объект Optuna Study и запустите алгоритм настройки, вызвав
optimize
функцию объекта Study.MlflowSparkStudy
может запускать параллельные исследования Optuna с помощью исполнителей PySpark.
Ниже приведен пример из документации Optuna.
- Создайте исследование и оптимизируйте
objective
функцию с 8 пробными версиями (8 вызововobjective
функции с различными значениямиx
). - Получение лучших параметров исследования
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
Пример записной книжки
Этот ноутбук содержит пример использования Optuna для выбора модели scikit-learn и набора гиперпараметров для набора данных Iris.
Масштабирование настройки гиперпараметров с помощью Optuna и MLflow
API интеграции MLFlow Optuna
MlflowStorage
MlflowStorage
— это класс хранилища на основе MLflow для Optuna с пакетной обработкой, чтобы избежать регулирования REST API.
Имя параметра класса | Тип | Описание |
---|---|---|
experiment_id |
str |
Идентификатор эксперимента MLflow для хранилища |
name |
str |
Имя хранилища |
batch_flush_interval |
float |
Время в секундах между автоматическими сбросами пакетов (по умолчанию: 1.0) |
batch_size_threshold |
float |
Максимальное количество элементов в пакете перед активацией очистки (по умолчанию: 100) |
MlflowSparkStudy
MlflowSparkStudy
— это оболочка для класса ~optuna.study.Study
для интеграции Optuna со Spark посредством эксперимента MLflow.
Имя параметра класса | Тип | Описание |
---|---|---|
study_name |
str |
Имя исследования |
storage |
mlflow.optuna.MlflowStorage |
Класс хранилища на основе MLflow |
sampler |
samplers.BaseSampler |
Объект sampler, реализующий фоновый алгоритм для предложения значений.
optuna.samplers.TPESampler используетсязначение по умолчанию. |
pruner |
float |
Объект pruner, который решает раннюю остановку непроверчивых пробных версий.
optuna.pruners.MedianPruner используетсязначение по умолчанию. |