使用“hydra.initialize”时出现“ValueError: HydraConfig未设置”

0 投票
1 回答
57 浏览
提问于 2025-04-14 15:48

我想在Google Colab中使用Hydra,根据官方的Hydra文档(https://hydra.cc/docs/advanced/compose_api/),我做了以下操作:

import hydra
from hydra.core.hydra_config import HydraConfig
from omegaconf import DictConfig, OmegaConf


def main(cfg: DictConfig) -> None:
    print(f"hydra.__version__ = {hydra.__version__}")
    print(OmegaConf.to_yaml(cfg))
    print(f"Output directory  : {hydra.core.hydra_config.HydraConfig.get().runtime.output_dir}")


if __name__ == "__main__":
    with hydra.initialize(version_base=None, config_path="conf"):
        cfg = hydra.compose(config_name="config")
        main(cfg)

在上面代码所在的同一个文件夹里(这个文件叫test_hydra.py),我有一个名为“conf”的文件夹,里面有一个叫“config.yaml”的文件,这个文件里只有一个属性“my_test_hydra: test_hydra”。第二个“print”(来自main)正确地打印出了“conf/config.yaml”的内容。这个解释是关于本地执行的,方便那些想尝试的人。

我得到了以下输出:


hydra.version = 1.3.2
my_test_hydra: test_hydra

问题是我遇到了以下错误:


Traceback (most recent call last):
File "./test_hydra/test_hydra.py", line 17, in
main(cfg)
File "./test_hydra/test_hydra.py", line 11, in main
print(f"Output directory : {hydra.core.hydra_config.HydraConfig.get().runtime.output_dir}")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "./lib/python3.11/site-packages/hydra/core/hydra_config.py", line 31, in get
raise ValueError("HydraConfig was not set")
ValueError: HydraConfig was not set

为什么HydraConfig没有初始化呢?使用“@hydra.main(version_base=None, config_path="conf", config_name="config")”这个选项不行,因为我在Google Colab里。我在Google Colab和本地都试过上面提到的代码,但结果都是同样的错误。在这里提问之前,我查看了官方文档,但没有找到关于这个主题的内容。

运行带有Hydra的Python代码时,我原本期待看到输出目录,但却遇到了错误。我尝试用不同的方式配置Hydra(比如用initialize_config_dir而不是initialize),但还是得到了同样的错误。再说一次,这个错误不仅在Google Colab中出现,在本地执行时也会出现。

1 个回答

0

Compose API 是无状态的,也就是说它不会保存任何状态信息。它不会设置 HydraConfig 这个单例,也不会改变工作目录、配置日志或做其他 @hydra.main 所做的事情。

撰写回答