我试图将Hydra与MLFlow结合使用,所以我编写了最基本的脚本来查看它们是否可以协同工作(导入等)。两者都可以正常工作,但是放在一起我会得到一个奇怪的结果。

我有以下脚本:

import hydra
from omegaconf import DictConfig
from mlflow import log_metric, log_param, log_artifact,start_run

@hydra.main(config_path="config.yaml")
def my_app(cfg : DictConfig):
    # print(cfg.pretty())
    # print(cfg['coordinates']['x0'])
    log_param("a",2)
    log_metric("b",3)

if __name__ == "__main__":
    my_app()

但是运行时,出现以下错误:
ilknull@nurmachine:~/Files/Code/Python/MLFlow_test$ python3 hydra_temp.py
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/home/ilknull/.local/lib/python3.7/site-packages/mlflow/tracking/fluent.py", line 164, in end_run
    MlflowClient().set_terminated(_active_run_stack[-1].info.run_id, status)
  File "/home/ilknull/.local/lib/python3.7/site-packages/mlflow/tracking/client.py", line 311, in set_terminated
    self._tracking_client.set_terminated(run_id, status, end_time)
  File "/home/ilknull/.local/lib/python3.7/site-packages/mlflow/tracking/_tracking_service/client.py", line 312, in set_terminated
    end_time=end_time)
  File "/home/ilknull/.local/lib/python3.7/site-packages/mlflow/store/tracking/file_store.py", line 377, in update_run_info
    run_info = self._get_run_info(run_id)
  File "/home/ilknull/.local/lib/python3.7/site-packages/mlflow/store/tracking/file_store.py", line 442, in _get_run_info
    databricks_pb2.RESOURCE_DOES_NOT_EXIST)
mlflow.exceptions.MlflowException: Run '9066793c02604a6783d081ed965d5eff' not found

同样,当单独使用它们时,它们工作得很好,但是一起使用会导致此错误。有任何想法吗?

最佳答案

感谢您举报。我不知道这个问题。

这是因为Hydra每次运行都会更改您的当前工​​作目录。

我做了一些挖掘,这是您可以做的:

  • 设置MLFLOW_TRACKING_URI环境变量:
  • MLFLOW_TRACKING_URI=file:///$(pwd)/.mlflow  python3 hydra_temp.py
    
  • 在hydra.main()开始之前调用set_tracking_url():
  • import hydra
    from omegaconf import DictConfig
    from mlflow import log_metric, log_param, set_tracking_uri
    import os
    
    set_tracking_uri(f"file:///{os.getcwd()}/.mlflow")
    
    @hydra.main(config_name="config")
    def my_app(cfg: DictConfig):
        log_param("a", 2)
        log_metric("b", 3)
    
    
    if __name__ == "__main__":
        my_app()
    
  • 等待我的new issue解决,然后将有一个适当的插件与mlflow集成。
    (这可能需要一段时间)。

  • 顺便说一句,Hydra 1.0对设置环境变量提供了新的支持:

    此ALMOST的工作原理是:

    hydra:
      job:
        env_set:
          MLFLOW_TRACKING_DIR: file://${hydra:runtime.cwd}/.mlflow
          MLFLOW_TRACKING_URI: file://${hydra:runtime.cwd}/.mlflow
    

    不幸的是,Hydra在函数退出时清理了env变量,而MLFlow在进程退出时进行了最后的保存,因此不再设置env变量。
    MLFlow还不断重新初始化用于存储实验数据的FileStore对象。如果他们只将其初始化一次并重用同一对象,则上面的代码应该可以正常工作。

    10-06 07:11