如何使用 Hydra-fb 在列表中收集配置文件?
How to gather config files in a list with Hydra-fb?
假设我的代码中有一个摘要 class db
和 classes db1
, db1
, ... db1
继承自 db
。
我的项目使用 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
因此 db
是 db1
、db2
、db3
的参数列表。
在 conf.yaml
文件中,我想是这样的:
defaults:
- db: [db1, db2, db3]
有没有办法做这样的事情?
Hydra 不支持您要求的内容。
- 不支持列表组合,列表在组合过程中是all or nothing。
- 配置组是互斥的,有一个feature request放宽。
虽然你可以接近它(但不能从命令行覆盖结构是这样的:
config.yaml:
defaults:
- db/db1
- db/db2
- db/db3
此语法已记录 here。
在每个数据库配置文件中,您可以执行以下操作:
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:
...
您可以非常接近与最新的列表合并 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”包的密钥没有用于任何用途,但我发现它实际上使配置更清晰。
假设我的代码中有一个摘要 class db
和 classes db1
, db1
, ... db1
继承自 db
。
我的项目使用 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
因此 db
是 db1
、db2
、db3
的参数列表。
在 conf.yaml
文件中,我想是这样的:
defaults:
- db: [db1, db2, db3]
有没有办法做这样的事情?
Hydra 不支持您要求的内容。
- 不支持列表组合,列表在组合过程中是all or nothing。
- 配置组是互斥的,有一个feature request放宽。
虽然你可以接近它(但不能从命令行覆盖结构是这样的: config.yaml:
defaults:
- db/db1
- db/db2
- db/db3
此语法已记录 here。
在每个数据库配置文件中,您可以执行以下操作:
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:
...
您可以非常接近与最新的列表合并 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”包的密钥没有用于任何用途,但我发现它实际上使配置更清晰。