繁体   English   中英

如何在运行时访问 Hydra 配置 object

[英]How to access the Hydra config object at runtime

我需要更改 hydra 配置框架的输出/工作目录,使其位于我的项目目录之外。 根据我的理解和文档,config.yaml 需要如下所示:

exp_nr: 0.0.0.0
condition: something
hydra:
  run:
    dir: /absolute/path/to/folder/${exp_nr}/${condition}/

在我的代码中,我尝试访问并设置如下路径:

import os
import hydra
from omegaconf import DictConfig


@hydra.main(config_path="../../config", config_name="config", version_base="1.3")
def main(cfg: DictConfig):
    print(cfg)
    cwd = os.getcwd()
    print(f"The current working directory is {cwd}")
    owd = hydra.utils.get_original_cwd()
    print(f"The Hydra original working directory is {owd}")
    work_dir = cfg.hydra.run.dir
    print(f"The work directory should be {work_dir}")

但我得到以下 output 和错误:

{'exp_nr': '0.0.0.0', 'condition': 'something'}
The current working directory is /project/path/subdir/subsubdir
The Hydra original working directory is /project/path/subdir/subsubdir
Error executing job with overrides: ['exp_nr=1.0.0.0', 'condition=somethingelse']
Traceback (most recent call last):
  File "/project/path/subdir/subsubdir/model.py", line 13, in main
    work_dir = cfg.hydra.run.dir
omegaconf.errors.ConfigAttributeError: Key 'hydra' is not in struct
    full_key: hydra
    object_type=dict

我看到 hydra.run.dir 没有出现在首先打印的 cfg 字典中,但是如果 os.getcwd() 尚未设置,我如何通过配置访问路径? 或者我做错了什么?

路径是正确的,因为我在集成 hydra 之前已经将文件保存到文件夹中,如果进程由于错误没有被终止,文件夹也会被创建,但是 hydra 不会向其中保存任何文件,甚至是带有它应该默认保存的参数。 我还尝试设置相对于标准 output 路径的路径,或者设置一个额外的配置参数work_dir: ${hydra.run.dir} (返回插值错误)。

您可以通过此处记录的 HydraConfig singleton 访问 Hydra 配置。

from hydra.core.hydra_config import HydraConfig

@hydra.main()
def my_app(cfg: DictConfig) -> None:
    print(HydraConfig.get().job.name)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM