iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
AI & Data

我好想轉生成史萊姆系列 第 24

MLflow 透過 Projects API 和 Optuna 來做參數搜尋

之前我們曾經利用 Optuna 中的 callback 函數用來讓 MLflow 可以針對每個 Optuna 中的實驗做紀錄。這次我們提供不一樣的方法,透過 MLflow 的 Python API mlflow.projects.run() 和寫好的 MLproject 檔案來讓 Optuna 做參數搜尋。

我們利用 MLflow Github 上提供的 mlflow-example 來操作。

為了避免 mlflow.projects.run() 每次執行時都要先 fetch 一次 Git repository,我們先把這個它拉下來

$ git clone https://github.com/mlflow/mlflow-example

在寫 Optuna 的 objective 函數時會遇到一個問題,要麼取得實驗結果的指標?解法是我們可以透過 mlflow.projects.run() 回傳的 mlflow.projects.SubmittedRun 物件來取得 run_id,再利用 Tracking API 的 mlflow.tracking.MlfloiwClient().get_run(run_id) 取得這個實驗已被記錄下來的資料。以下用最佳化 RMSE 來示範:

import optuna
import mlflow

client = mlflow.tracking.MlflowClient()


def objective(trial: optuna.Trial):
    parameters = {
        'alpha': trial.suggest_uniform('alpha', low=0.0, high=1.0),
        'l1_ratio': trial.suggest_uniform('l1_ratio', low=0.0, high=1.0)
    }

    run = mlflow.projects.run(
        uri='mlflow-example', # 使用剛拉下來的 git repository 資料夾
        entry_point='main',
        parameters=parameters,
    )

    return client.get_run(run.run_id).data.metrics['rmse']


study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)

References


上一篇
MLflow 執行專案的兩種方法
下一篇
MLflow Models
系列文
我好想轉生成史萊姆30

尚未有邦友留言

立即登入留言