如何解决如何使用Hydra-fb在列表中收集配置文件?
假设我的代码中有一个抽象类db
,并且类db1
,db1
,... db1
继承自db
。
我的项目使用hydra并具有以下结构:
├── my_app.py
├── conf.yaml
└── db
├── db1.yaml
├── db2.yaml
└── db3.yaml
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不支持您的要求。
- 不支持列表组合,列表在组合过程中全部或全部不提供。
- 配置组是互斥的,有一个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”包的键不用于任何用途,但我发现它实际上使配置更清晰。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。