在 hydra-python 结构化配置中,如何插入值?
In hydra-python structured configs, how do you interpolate values?
我在 hydra 1.1 中使用结构化配置(基于@dataclass
)并尝试插入一些值。具体来说,我想通过替换我的一些配置值来设置工作目录。
我在使用 yaml 时参考 documentation 可以做到这一点:
run:
dir: outputs
name: try1
hydra:
run:
dir: ${run.dir}/${run.name}
我如何使用结构化配置来做到这一点?
下面的示例展示了如何创建可用于覆盖 Hydra 的默认输出目录的结构化配置。
# config.yaml
defaults:
- my_run_dir
- _self_
run:
dir: outputs
name: try1
# my_app.py
from dataclasses import dataclass
import hydra
from hydra.conf import RunDir
from omegaconf import DictConfig, OmegaConf
from hydra.core.config_store import ConfigStore
cs = ConfigStore.instance()
@dataclass
class MyRunDir(RunDir):
dir: str = "${run.dir}/${run.name}"
cs.store(name="my_run_dir", node=MyRunDir, package="hydra.run")
@hydra.main(config_path=".", config_name="config")
def my_app(cfg: DictConfig) -> None:
from hydra.core.hydra_config import HydraConfig
assert HydraConfig.get().run.dir == "outputs/try1"
if __name__ == "__main__":
my_app()
当此 python 文件为 运行 时,将创建目录 outputs/try1
。
作为对 cs.store
方法调用使用 package="hydra.run"
关键字参数的替代方法,您可以使用来自 config.yaml
:[=19= 的“@package”默认列表条目]
# config.yaml
defaults:
- my_run_dir@hydra.run
...
# my_app.py
...
cs.store(name="my_run_dir", node=MyRunDir) # omit the `package=` argument
...
有关这方面的更多信息,请参阅 Packages 上的 Hydra 文档。
我在 hydra 1.1 中使用结构化配置(基于@dataclass
)并尝试插入一些值。具体来说,我想通过替换我的一些配置值来设置工作目录。
我在使用 yaml 时参考 documentation 可以做到这一点:
run:
dir: outputs
name: try1
hydra:
run:
dir: ${run.dir}/${run.name}
我如何使用结构化配置来做到这一点?
下面的示例展示了如何创建可用于覆盖 Hydra 的默认输出目录的结构化配置。
# config.yaml
defaults:
- my_run_dir
- _self_
run:
dir: outputs
name: try1
# my_app.py
from dataclasses import dataclass
import hydra
from hydra.conf import RunDir
from omegaconf import DictConfig, OmegaConf
from hydra.core.config_store import ConfigStore
cs = ConfigStore.instance()
@dataclass
class MyRunDir(RunDir):
dir: str = "${run.dir}/${run.name}"
cs.store(name="my_run_dir", node=MyRunDir, package="hydra.run")
@hydra.main(config_path=".", config_name="config")
def my_app(cfg: DictConfig) -> None:
from hydra.core.hydra_config import HydraConfig
assert HydraConfig.get().run.dir == "outputs/try1"
if __name__ == "__main__":
my_app()
当此 python 文件为 运行 时,将创建目录 outputs/try1
。
作为对 cs.store
方法调用使用 package="hydra.run"
关键字参数的替代方法,您可以使用来自 config.yaml
:[=19= 的“@package”默认列表条目]
# config.yaml
defaults:
- my_run_dir@hydra.run
...
# my_app.py
...
cs.store(name="my_run_dir", node=MyRunDir) # omit the `package=` argument
...
有关这方面的更多信息,请参阅 Packages 上的 Hydra 文档。