我试图在分层配置结构中覆盖默认列表中的包。作为一个简化的例子:
我有conf/base.yaml
defaults:
- _self_
- env@_here_: env1
a: 1
b: 2conf/env/env1.yaml
c: 5
d: 6和conf/env/env2.yaml
c: 7
d: 8运行my_app.py时
import hydra
import omegaconf
@hydra.main(config_path="conf", config_name="base")
def my_app(cfg: omegaconf.DictConf) -> None:
print(omegaconf.OmegaConf.to_yaml(cfg))
my_app()我希望使用CLI或任何其他方法将env@_here_从env1覆盖到env2。我已经看过九头蛇文档几次了,但却找不到该怎么做。
发布于 2021-09-01 17:30:30
在当前的hydra版本(Hydra 1.1.1)中,您可以使用:
python my_app.py env=env2由于最近出现了一种改进Hydra API一致性的破变,因此很快就有必要这样做:
python my_app.py env@_global_=env2这一重大变化可能是九头蛇1.1.2或1.2.0的一部分。
附带注意:有几种不同的方法可以实现与您在上面的示例中相同的结果。你的选择包括:
- env@_here_: env1中使用base.yaml,这就是上面所做的。- env@_global_: env1在base.yaml中的应用- env: env1中使用base.yaml并向env1.yaml和env2.yaml添加_global_ 包标头conf/env/env1.yaml
# @package _global_
c: 5
d: 6conf/env/env2.yaml
# @package _global_
c: 7
d: 8关键字_global_指的是由Hydra生成的输出配置中的顶级包。您可以阅读更多关于这里和_here_关键字的文章。
https://stackoverflow.com/questions/68984309
复制相似问题