Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Hydra fb在列表中收集配置文件?_Python_Fb Hydra - Fatal编程技术网

Python 如何使用Hydra fb在列表中收集配置文件?

Python 如何使用Hydra fb在列表中收集配置文件?,python,fb-hydra,Python,Fb Hydra,假设我的代码中有一个抽象类db,类db1,db1db1。 我的项目使用并具有以下结构: ├── my_app.py ├── conf.yaml └── db ├── db1.yaml ├── db2.yaml └── db3.yaml 我需要一个db列表,因此我希望得到如下最终配置文件: db: - _db1的param1_:key_1_1 _db1的param2_:key_1_2 - db2的参数1:键2 db2的参数2:键2 - _db3的param1_:key_3

假设我的代码中有一个抽象类
db
,类
db1
db1
<从
db
继承的code>db1。 我的项目使用并具有以下结构:

├── my_app.py
├── conf.yaml
└── db
    ├── db1.yaml
    ├── db2.yaml
    └── db3.yaml
我需要一个
db
列表,因此我希望得到如下最终配置文件:

db:
-
_db1的param1_:key_1_1
_db1的param2_:key_1_2
-
db2的参数1:键2
db2的参数2:键2
-
_db3的param1_:key_3_1
_db3的param2_:key_3_2
因此,
db
db1
db2
db3
的参数列表。 在
conf.yaml
文件中,我想象如下:

defaults:
  - dbs/db1
  - dbs/db2
  - dbs/db3

db: ${oc.dict.values:dbs}
默认值:
-db:[db1,db2,db3]

有没有办法做到这一点?

Hydra不支持您的要求

  • 不支持列表合成,合成过程中列表全部或全部为空
  • 配置组是互斥的,有一种方法可以放松这一点
  • 但是,您可以接近它(无法从命令行重写结构,类似于: config.yaml:

    默认值:
    -db/db1
    -db/db2
    -db/db3
    
    此语法已记录在案

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

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

    #@pacakge\u组\u名称_
    主机:本地主机
    港口:3306
    
    包覆盖被记录下来

    生成的配置如下所示:

    db:#来自相应配置(路径)的配置组
    db1:#来自相应配置的名称
    主机:本地主机
    港口:3306
    db2:
    ...
    
    Hydra不支持您的要求

  • 不支持列表合成,合成过程中列表全部或全部为空
  • 配置组是互斥的,有一种方法可以放松这一点
  • 但是,您可以接近它(无法从命令行重写结构,类似于: config.yaml:

    默认值:
    -db/db1
    -db/db2
    -db/db3
    
    此语法已记录在案

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

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

    #@pacakge\u组\u名称_
    主机:本地主机
    港口:3306
    
    包覆盖被记录下来

    生成的配置如下所示:

    db:#来自相应配置(路径)的配置组
    db1:#来自相应配置的名称
    主机:本地主机
    港口:3306
    db2:
    ...
    
    您可以使用最新的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”包的键没有用于任何用途,但我发现它实际上使配置更加清晰。你可以非常接近于列表与最新的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”的键软件包不用于任何用途,但我发现它实际上使配置更清晰。

    谢谢Omry,这真的很有用!顺便问一下,你打算在Hydra的下一个版本中包含列表合成吗?没有计划,在99%的情况下,最好的做法是在合并时用第二个列表替换列表。谢谢Omry,这真的很有用!btw您是否计划在Hydra的下一版本中包含列表合成?没有计划,在99%的情况下,最好的做法是在合并时用第二个列表替换列表。