如何更新之前运行的 MLFlow?

问题描述 投票:0回答:3

我想更新以前使用 MLFlow 完成的运行,即。更改/更新参数值以适应实现中的更改。典型用例:

  • 使用参数 A 记录运行,稍后记录参数 A 和 B。使用其默认值更新先前运行的参数 B 的值会很有用。
  • “专门化”参数。使用布尔标志作为参数来实现模型。更新实现以采用字符串代替。现在我们需要更新之前运行的参数值,以使其与新行为保持一致。
  • 更正之前运行中记录的错误参数值。

放弃整个实验并不总是那么容易,因为我需要保留以前的运行用于统计目的。我也不想仅仅为单个新参数生成新实验,以保留单个运行数据库。

最好的方法是什么?

logging data-science mlflow
3个回答
16
投票

要添加或更正现有运行的参数、指标或工件,请将 run_id 而不是experiment_id 传递给 mlflow.start_run 函数

with mlflow.start_run(run_id="your_run_id") as run:
    mlflow.log_param("p1","your_corrected_value")
    mlflow.log_metric("m1",42.0) # your corrected metrics
    mlflow.log_artifact("data_sample.html") # your corrected artifact file

您可以在任何 MLflow 运行完成后随时更正、添加或删除它。从 UI 或使用 mlflow.search_runs 获取 run_id。

来源:https://towardsdatascience.com/5-tips-for-mlflow-experiment-tracking-c70ae117b03f


1
投票

MLflow API 不支持更新现有参数值,请参阅this

但是,您可以使用后门来实现重写现有参数值的目标。但请谨慎使用。


0
投票

您无法更新它,但还有另一种解决方案,即获取运行,编辑所需的值,然后将运行记录为全新的运行。

import mlflow 
import os 
os.environ["MLFLOW_EXPERIMENT_NAME"] = "REPLACE_YOUR_EXPERIEMNTE_NAME"

original_run_id = 'REPLACE_YOUR_RUN_ID'
original_run = mlflow.get_run(original_run_id)
original_run_name = original_run.data.tags.get('mlflow.runName')

with mlflow.start_run(run_name=original_run_name) as new_run:
    for key, value in original_run.data.params.items():
        if key == 'REPLACE_WITH_YOUR_KEY':
            new_value = REPLACE_WITH_YOUR_VALUE
            mlflow.log_param(key, new_value)
        else:
            mlflow.log_param(key, value)

    for key, value in original_run.data.metrics.items():
        mlflow.log_metric(key, value)

设置实验名称和运行名称是可选的,run_id 应该获取您想要的确切运行。但是设置运行名称将帮助您创建与以前相同的名称。此代码片段当前更新了一个参数,您可以更改它以更新指标。

© www.soinside.com 2019 - 2024. All rights reserved.