Hydra:从代码访问配置文件的名称

Hydra: access name of config file from code

我有一个配置树,例如:

config.yaml
model/
  model_a.yaml
  model_b.yaml
  model_c.yaml

其中 config.yaml 包含:

# @package _global_
defaults:
  - _self_
  - model: model_a.yaml

some_var: 42

我想从我的 python 代码或文件本身访问所使用的模型配置文件的名称(默认或覆盖)。类似于:

@hydra.main(...)
def main(config):
  model_name = config.model.__filename__

或(来自例如 model_a.yaml

dropout: true
dense_layers: 128
model_name: ${__filename__}

提前致谢!

查看 Hydra 文档的 hydra.runtime.choices variable mentioned in the Configuring Hydra - Introduction 页面。 此变量存储一个映射,该映射描述了 Hydra 在编写输出配置时所做的每个选择。

使用上面的示例,默认列表中有 model: model_a.yaml

# my_app.py
import hydra
from pprint import pprint
from hydra.core.hydra_config import HydraConfig
from omegaconf import OmegaConf

@hydra.main(config_path=".", config_name="config")
def main(config):
    hydra_cfg = HydraConfig.get()
    print("choice of model:")
    pprint(OmegaConf.to_container(hydra_cfg.runtime.choices))

main()

在命令行:

$ python3 app.py
choices used:
{'hydra/callbacks': None,
 'hydra/env': 'default',
 'hydra/help': 'default',
 'hydra/hydra_help': 'default',
 'hydra/hydra_logging': 'default',
 'hydra/job_logging': 'default',
 'hydra/launcher': 'basic',
 'hydra/output': 'default',
 'hydra/sweeper': 'basic',
 'model': 'model_a.yaml'}

如您所见,在此示例中,配置选项 model_a.yaml 存储在位于 hydra_cfg.runtime.choices.model 的 Hydra 配置中。