让我们假设一个配置组foo
和配置文件组织在以下目录结构中:
conf
├── foo
│ ├── bar
│ │ ├── a.yaml
│ │ ├── b.yaml
│ │ ├── c.yaml
│ └── baz
│ ├── d.yaml
│ ├── e.yaml
│ └── f.yaml
每个 yaml 文件都将包设置为foo
using # @package foo
。在运行相应的应用程序时,我可以简单地foo
通过指定类似的东西来覆盖foo=bar/a
or foo=baz/f
。因此,子目录bar
和baz
指示具有更大的可能配置集合的某个类别。
虽然这适用于 hydra 的标准使用,但 hydra 的一些更高级的功能似乎与这种结构不兼容。例如,我想将 glob 与这样的目录结构结合使用foo=glob(bar/*)
来扫描某个类别的所有配置。但是,这似乎不起作用,因为 glob 在此示例中找不到任何配置。此外,如果我分配了一个无效的配置foo
并且 hydra 列出了可用的选项,那么该列表是空的。
这让我想知道在配置组中进行结构化是否是 hydra 中普遍支持的功能,并且还没有涵盖一些极端情况,或者我是否错误地使用了 hydra 并且不应该使用目录来组织组中的配置?