我想将一个配置组存储在一个外部包中,然后使用 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 的地方?