0

我想将一个配置组存储在一个外部包中,然后使用 hydra multirun 调用扫描该组中的所有配置glob(*),但glob(*)似乎找不到可用的配置。

具体来说,假设我在名为hydra_demo.

hydra_demo
├── __init__.py
└── hyper_param_settings
    ├── v1.yaml
    ├── v2.yaml

我的主配置文件将包添加到搜索路径:

hydra:
  searchpath:
    - pkg://hydra_demo

正如预期的那样,我可以使用命令行覆盖来使用配置组中的任一配置:

$ python experiments/main.py '+hyper_param_settings@=v1'
param=111
$ python experiments/main.py '+hyper_param_settings@=v2'
param=222

此外,正如预期的那样,如果我没有从组中指定配置,它会列出两个选项:

$ python experiments/main.py '+hyper_param_settings@='
In 'config': Could not find 'hyper_param_settings/'

Available options in 'hyper_param_settings':
        v1
        v2
Config search path:
        provider=hydra, path=pkg://hydra.conf
        provider=main, path=file:///path/to/experiments
        provider=hydra.searchpath in main, path=pkg://hydra_demo
        provider=schema, path=structured://

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.

但是,使用 glob 运行所有选项并不像我预期的那样工作:

$ python experiments/main.py '+hyper_param_settings@=glob(*)' -m
[2021-12-30 22:42:53,656][HYDRA] Launching 0 jobs locally

但是,如果我将hyper_param_settings包中的文件夹复制到主配置所在的文件夹中,我确实会得到预期的行为(但没有实现将配置组放在单独的包中的目标):

$ python experiments/main.py '+hyper_param_settings@=glob(*)' -m
[2021-12-30 22:43:17,342][HYDRA] Launching 2 jobs locally
[2021-12-30 22:43:17,342][HYDRA]        #0 : +hyper_param_settings@=v1
param=111
[2021-12-30 22:43:17,430][HYDRA]        #1 : +hyper_param_settings@=v2
param=222

谁能发现我误解 hydra 的地方?

4

0 回答 0