使用同一组中的多个配置在 yaml 文件中插入值
Using multiple configs in the same group to interpolate values in a yaml file
在 Hydra 中我有以下配置:
├── conf
│ ├── config.yaml
│ ├── callbacks
│ │ ├── callback_01.yaml
│ │ └── callback_02.yaml
│ └── trainer
│ ├── default.yaml
回调的结构如下:
_target_: callback_to_instantiate
我需要通过插值将这两个回调传递给 trainer/default.yaml。
我这样试过:
_target_: pytorch_lightning.Trainer
callbacks:
- ${callbacks.callback_01}
- ${callbacks.callback_02}
与 config.yaml 这样:
defaults:
- _self_
- trainer: default
我也做了其他的试验,但似乎没有用。有没有办法通过使用配置组中的两个或多个 yaml 文件在 yaml 文件中进行插值?
如果可能的话,我想保留这个结构。
目前推荐的做法是:
- 组成一个映射,其值为所需的回调,然后
- 使用
oc.dict.values
OmegaConf 解析器从该字典中获取值列表。
# conf/config.yaml
defaults:
- callbacks@_callback_dict.cb1: callback_01
- callbacks@_callback_dict.cb2: callback_02
- trainer: default
- _self_
# conf/trainer/default.yaml
_target_: pytorch_lightning.Trainer
callbacks: ${oc.dict.values:_callback_dict}
# my_app.py
from typing import Any
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf", config_name="config")
def app(cfg: DictConfig) -> Any:
OmegaConf.resolve(cfg)
del cfg._callback_dict
print(OmegaConf.to_yaml(cfg))
if __name__ == "__main__":
app()
在命令行:
$ python my_app.py
trainer:
_target_: pytorch_lightning.Trainer
callbacks:
- _target_: callback_to_instantiate_01
- _target_: callback_to_instantiate_02
作为参考,Hydra 的 github 回购中有 an open issue 提倡改善周围的用户体验
在 Hydra 中我有以下配置:
├── conf
│ ├── config.yaml
│ ├── callbacks
│ │ ├── callback_01.yaml
│ │ └── callback_02.yaml
│ └── trainer
│ ├── default.yaml
回调的结构如下:
_target_: callback_to_instantiate
我需要通过插值将这两个回调传递给 trainer/default.yaml。 我这样试过:
_target_: pytorch_lightning.Trainer
callbacks:
- ${callbacks.callback_01}
- ${callbacks.callback_02}
与 config.yaml 这样:
defaults:
- _self_
- trainer: default
我也做了其他的试验,但似乎没有用。有没有办法通过使用配置组中的两个或多个 yaml 文件在 yaml 文件中进行插值? 如果可能的话,我想保留这个结构。
目前推荐的做法是:
- 组成一个映射,其值为所需的回调,然后
- 使用
oc.dict.values
OmegaConf 解析器从该字典中获取值列表。
# conf/config.yaml
defaults:
- callbacks@_callback_dict.cb1: callback_01
- callbacks@_callback_dict.cb2: callback_02
- trainer: default
- _self_
# conf/trainer/default.yaml
_target_: pytorch_lightning.Trainer
callbacks: ${oc.dict.values:_callback_dict}
# my_app.py
from typing import Any
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf", config_name="config")
def app(cfg: DictConfig) -> Any:
OmegaConf.resolve(cfg)
del cfg._callback_dict
print(OmegaConf.to_yaml(cfg))
if __name__ == "__main__":
app()
在命令行:
$ python my_app.py
trainer:
_target_: pytorch_lightning.Trainer
callbacks:
- _target_: callback_to_instantiate_01
- _target_: callback_to_instantiate_02
作为参考,Hydra 的 github 回购中有 an open issue 提倡改善周围的用户体验