我想更新以前使用 MLFlow 完成的运行,即。更改/更新参数值以适应实现中的更改。典型用例:
放弃整个实验并不总是那么容易,因为我需要保留以前的运行用于统计目的。我也不想仅仅为单个新参数生成新实验,以保留单个运行数据库。
最好的方法是什么?
要添加或更正现有运行的参数、指标或工件,请将 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
MLflow API 不支持更新现有参数值,请参阅this。
但是,您可以使用后门来实现重写现有参数值的目标。但请谨慎使用。
您无法更新它,但还有另一种解决方案,即获取运行,编辑所需的值,然后将运行记录为全新的运行。
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 应该获取您想要的确切运行。但是设置运行名称将帮助您创建与以前相同的名称。此代码片段当前更新了一个参数,您可以更改它以更新指标。