iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
AI & Data

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

MLflow 在一個程式中啟用多個運行

有時候你會想要在一個程式中同時啟用多個 MLflow 運行,例如:你的實驗跑起來很快或是你想想做 hyper-parameters 的搜尋。這個非常容易實現,因為 mlflow.start_run() 回傳的 ActiveRun 物件是一個 Python 的內容管理器 (context manager)。你可以把每個運行的程式放在相對應的區塊內,如下:

with mlflow.start_run():
    mlflow.log_param('x', 1)
    mlflow.log_param('y', 2)
    ...

MLflow run 會在 with 底下的區塊保持開啟,然後當離開這個區塊後會自動關閉,既使是因為發生某種例外。

如果 MLflow 要搭配 Optuna 搜尋 hyperparameters 的話,可以透過 Optuna 內的 MLflowCallback 函數來實現:

import mlflow
import optuna
from optuna.integration.mlflow import MLflowCallback

# 設定 metric_name 讓 MLflow 紀錄 objective function 輸出的值
mlflow_callback = MLflowCallback(metric_name='loss')


@mlflow_callback.track_in_mlflow()
def objective(trial: optuna.Trial):
    x = trial.suggest_uniform('x', -1, 1)
    y = trial.suggest_uniform('y', -1, 1)

    mlflow.log_param('x', x)
    mlflow.log_param('y', y)

    return x**2 + y**2

# 這個 callback 函數會幫你把 study_name 帶入 experiment_name
# mlflow.set_experiment(experiment_name=<study_name>)
study = optuna.create_study(study_name='multiple_runs')
study.optimize(objective, n_trials=100, callbacks=[mlflow_callback])

References


上一篇
MLflow Tracking 的紀錄函數
下一篇
MLflow 追蹤性能指標
系列文
我好想轉生成史萊姆30

尚未有邦友留言

立即登入留言