【问题标题】:Set list of config nodes as value entries in yaml contrasting with structured configs in Hydra将配置节点列表设置为 yaml 中的值条目,与 Hydra 中的结构化配置形成对比
【发布时间】:2021-02-11 07:03:11
【问题描述】:

我想获取一个配置列表作为(默认)值条目 并使用结构化架构来验证输入列表。

例如,trainer.yaml:

defaults:
  - callbacks:
    - checkpointer
    - early_stopping

callbacks/checkpointer.yamlcallbacks/early_stopping.yaml 中,我有一个指向适当结构化配置的链接作为默认值,例如:

# callbacks/checkpointer.yaml
defaults:
  - /trainer_lib/callbacks/base_checkpointer@_here_

结构化架构:

@dataclass
class CheckpointerConfig:
    _target_: str = "some_library_class"
    data_dir: str = "folder"

@dataclass
class TrainerConfig:
   callbacks: List[Any] = MISSING

和配置存储:

cs = ConfigStore.instance()
cs.store(group="trainer_lib/callbacks", name="base_checkpointer", node=CheckpointerConfig)

我不确定完成此操作的正确语法是什么(我尝试过的方法失败了)。我收到了omegaconf.errors.ConfigTypeError: Cannot merge DictConfig with ListConfig

有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: fb-hydra hydra-python


    【解决方案1】:

    在这个Hydra issue中讨论这个话题。

    【讨论】:

      【解决方案2】:

      您在使用 Hydra 1.0 吗?这实际上在 Hydra 1.1 中得到支持。这是文档:https://hydra.cc/docs/next/patterns/select_multiple_configs_from_config_group

      【讨论】:

      • 我不确定我错过了什么。我收到“omegaconf.errors.ConfigTypeError:无法将 DictConfig 与 ListConfig 合并”。这可能是因为“callbacks/checkpointer.yaml”和“callbacks/early_stopping.yaml”中的默认值是结构化模式。我将尝试不使用结构化配置并报告。
      • 我认为问题在于我正在根据结构化模式验证配置列表。我将条目callbacks 键入为List[Any],但我收到了上一个错误。我正在使用 Hydra 1.1,是的。
      • 我已经更新了我的问题,详细说明了我到底想要完成什么。如果我删除对结构化配置的引用,则设置有效。如果您知道如何使用结构化模式解决此问题,请告诉我。谢谢。
      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 2021-11-21
      • 2020-12-07
      • 2021-07-20
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多