Python程序配置框架——Hydra(基于OmegaConf)
Python程序配置框架——Hydra(基于OmegaConf)
OmegaConf是基于YAML的分层配置系统,Hydra在其基础上提供了更便于开发的功能
https://omegaconf.readthedocs.io/en/latest/index.html
YAML示例
1 |
|
OmegaConf
OmegaConf作为配置对象,提供了创建、访问、操作配置的功能
1 |
|
1 |
|
创建
1 |
|
访问
1 |
|
用值???
表示访问前需要设置的配置,如key: ???
,访问key时会报错
操作
1 |
|
Hydra入门
Hydra的使用主要涉及四部分内容:文件结构、配置文件、程序、命令行
1 |
|
文件结构
将所有配置文件放在configs文件夹下,在configs文件夹下一般有一个总配置文件config.yaml供程序读取,同时还有若干个文件夹,每个文件夹作为一个配置组,里面包含同类型的配置文件
├── configs
│ ├── config.yaml
│ ├── db
│ │ ├── mysql.yaml
│ │ └── postgresql.yaml
│ ├── schema
│ │ ├── school.yaml
│ │ ├── support.yaml
│ │ └── warehouse.yaml
│ └── ui
│ ├── full.yaml
│ └── view.yaml
└── my_app.py
配置文件
简单写法
1 |
|
使用配置对象
1 |
|
使用默认列表
默认列表中如果添加了_self_则可以包含自身配置
注意配置的顺序,后面的配置覆盖前面的配置
1 |
|
程序
通过@hydra.main
读取配置作为一个DictConfig对象传给所注释的函数
1 |
|
命令行
通过命令行可以对配置灵活操作
1 |
|
Hydra基础
Multi-run
通过命令行添加hydra.mode=MULTIRUN
或--multirun(-m)
可以跑不同配置下的程序,不同配置组的配置之间一一组合
1 |
|
或者通过在配置文件中重写hydra.sweeper.params
指定要进行组合的配置
1 |
|
同时在命令行中还可以进一步指定配置
1 |
|
Output/Working directory
默认情况下,Hydra会在工作文件夹(即程序所在文件夹)下创建outputs/YYYY-mm-dd/HH-MM-SS
目录作为输出文件夹,输出文件夹下的基本结构如下:
├── .hydra
│ ├── config.yaml(用户指定配置)
│ ├── hydra.yaml(Hydra配置)
│ └── overrides.yaml(命令行覆盖的配置)
└── 程序名.log
关于输出文件夹与工作文件夹的更改见Output/Working directory和Customizing working directory pattern
Logging
Hydra设置了python的logging,以方便使用。默认情况下Hydra会在控制台和日志文件中记录INFO
级别的信息,如:
1 |
|
控制台和日志文件中都会有
[YYYY-mm-dd HH:MM:SS,653][main][INFO] - Info level message
通过设置命令行的hydra.verbose
可以记录DEBUG
级别的信息
hydra.verbose=true
:将所有logger的级别设为DEBUG
hydra.verbose=NAME
:将NAME
的logger的级别设为DEBUG
hydra.verbose=[NAME1,NAME2]
:将NAME1
和NAME2
的logger的级别设为DEBUG
通过命令行设置hydra/job_logging=disabled
取消logging输出
通过命令行设置hydra/job_logging=none
和hydra/hydra_logging=none
取消Hydra配置logging
关于logging的自定义见Customizing logging
Debugging
通过设置命令行的--cfg
或-c
打印配置
--cfg job
:用户配置--cfg hydra
:Hydra配置--cfg all
:所有配置,即用户配置和Hydra配置的集合
通过设置命令行的--info
打印信息
--info all
:默认行为,打印所有--info config
:打印有助于理解配置组成的信息:配置搜索路径、默认树、默认列表和最终配置--info defaults
:打印最终默认列表--info defaults-tree
:打印默认树--info plugins
:打印有关已安装的插件的信息