1

我正在尝试使用 mlflow 和 hydra 管理机器学习的结果。所以我尝试使用 hydra 的多运行功能来运行它。我使用以下代码作为测试。

import mlflow
import hydra
from hydra import utils
from pathlib import Path
import time


@hydra.main('config.yaml')
def main(cfg):
    print(cfg)


    mlflow.set_tracking_uri('file://' + utils.get_original_cwd() + '/mlruns')
    mlflow.set_experiment(cfg.experiment_name)


    mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)

    with mlflow.start_run() :
        mlflow.log_artifact(Path.cwd() / '.hydra/config.yaml')


if __name__ == '__main__':
    main()

此代码将不起作用。我收到以下错误

Exception: Run with UUID [RUNID] is already active. To start a new run, first end the current run with mlflow.end_run(). To start a nested run, call start_run with nested=True

所以我修改了代码如下

import mlflow
import hydra
from hydra import utils
from pathlib import Path
import time


@hydra.main('config.yaml')
def main(cfg):
    print(cfg)


    mlflow.set_tracking_uri('file://' + utils.get_original_cwd() + '/mlruns')
    mlflow.set_experiment(cfg.experiment_name)


    mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)

    with mlflow.start_run(nested=True) :
        mlflow.log_artifact(Path.cwd() / '.hydra/config.yaml')


if __name__ == '__main__':
    main()

此代码有效,但未保存工件。进行了以下更正以保存工件。

import mlflow
import hydra
from hydra import utils
from pathlib import Path
import time


@hydra.main('config.yaml')
def main(cfg):
    print(cfg)


    mlflow.set_tracking_uri('file://' + utils.get_original_cwd() + '/mlruns')
    mlflow.set_experiment(cfg.experiment_name)


    mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)
    # mlflow.log_param('param1',5)

    
    mlflow.log_artifact(Path.cwd() / '.hydra/config.yaml')


if __name__ == '__main__':
    main()

结果,工件现在被保存。但是,当我运行以下命令时

python test.py model=A,B hidden=12,212,31 -m

仅保存了最后一个执行条件的工件。

如何利用 hydra 的多运行功能修改 mlflow 以管理实验参数?

4

1 回答 1

1

MLFlow 不受 Hydra 官方支持。在某个时候,会有一个插件可以让这更流畅。

查看您报告的错误(并且不运行您的代码):您可以尝试使用Joblib 启动器插件通过进程获得作业隔离的一件事(这需要 Hydra 1.0.0rc1 或更高版本)。

于 2020-06-29T07:22:02.970 回答