MLFlow 和 Hydra 一起使用时会导致崩溃
MLFlow and Hydra causing crash when used together
我正在尝试将 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 新增了对设置环境变量的支持:
这个几乎有效:
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 对象。如果他们只初始化一次并重复使用同一个对象,上面的方法应该可以工作。
我正在尝试将 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 新增了对设置环境变量的支持:
这个几乎有效:
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 对象。如果他们只初始化一次并重复使用同一个对象,上面的方法应该可以工作。