【问题标题】:How to gather config files in a list with Hydra-fb?如何使用 Hydra-fb 在列表中收集配置文件?
【发布时间】:2021-06-07 00:19:43
【问题描述】:

假设我的代码中有一个抽象类db 和继承自db 的类db1db1、...db1。 我的项目使用hydra 并具有以下结构:

├── my_app.py
├── conf.yaml
└── db
    ├── db1.yaml
    ├── db2.yaml
    └── db3.yaml

我需要db 的列表,所以我想得到一个像这样的最终配置文件:

db:
  -
    param1_of_db1: key_1_1
    param2_of_db1: key_1_2
  -
    param1_of_db2: key_2_1
    param2_of_db2: key_2_2
  -
    param1_of_db3: key_3_1
    param2_of_db3: key_3_2

所以dbdb1db2db3 的参数列表。 在conf.yaml 文件中,我想像:

defaults:
  - db: [db1, db2, db3]

有没有办法做这样的事情?

【问题讨论】:

    标签: python fb-hydra


    【解决方案1】:

    Hydra 不支持您的要求。

    1. 不支持列表组合,组合过程中列表全有或全无。
    2. 配置组是互斥的,有一个feature request 可以放宽这一点。

    您可以接近它(无法从命令行覆盖结构,例如: config.yaml:

    defaults:
      - db/db1
      - db/db2
      - db/db3
    

    此语法记录在 here

    在每个 db 配置文件中,您可以执行以下操作:

    db/db1.yaml:

    # @pacakge _group_._name_
    host: localhost
    port: 3306
    

    包覆盖记录在here

    生成的配置如下所示:

    db:       # from the config group of the corresponding config (path)
      db1:    # from the name of the corresponding config
        host: localhost
        port: 3306
      db2:
        ...
    

    【讨论】:

    • 感谢 Omry,这真的很有帮助!
    • 顺便说一句,您是否打算在 Hydra 的下一版本中包含列表组合?
    • 没有计划,在 99% 的情况下,最好的办法是在合并时用第二个列表替换一个列表。
    【解决方案2】:

    您可以非常接近与最新的 hydra/omegaconf 合并列表

    诀窍在于字典是组合的,因此您可以在字典中组合配置,然后使用新的oc.dict.values 插值来获得最终列表。

    所以在你的情况下,它会是这样的:

    defaults:
      - dbs/db1
      - dbs/db2
      - dbs/db3
    
    db: ${oc.dict.values:dbs}
    

    请注意,我已将“db”包重命名为“dbs”。所以最终解决的配置看起来像:

    dbs:
      db1:    
        host: localhost
        port: 3306
      db2:
        host: localhost
        port: 3307
      db3:
        host: localhost
        port: 3308
    
    db:
      - host: localhost
        port: 3306
      - host: localhost
        port: 3307
      - host: localhost
        port: 3308
    

    “dbs”包的键没有用于任何用途,但我发现它实际上使配置更清晰。

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2021-12-03
      • 2023-02-08
      • 1970-01-01
      相关资源
      最近更新 更多