argparse库的使用,发现较为方便。但是应对参数较多的场景时,在命令行里修改参数就变得较为麻烦。因此转向了对配置文件的使用,yaml是一个开放性的配置文件格式。使用yaml库加载不支持命令行参数,使用hydra库加载配置文件时可以支持命令行参数(实现对默认配置的新增、修改与删除)。hydra对于yaml配置文件中支持的格式有:str、int、float、bool、list这5种格式,完全满足一般项目的基本配置了。
Hydra 是一个开源 Python 框架,可简化研究和其他复杂应用程序的开发。
关键特性是能够通过组合动态创建分层配置,并通过配置文件和命令行覆盖它。 Hydra 这个名字来源于它能够运行多个类似的工作——就像一个有多个头的 Hydra。
简单来讲,就是管理yaml config配置文件的,更方便一点的,虽然也可以yaml.load()
,但是这个就是遇到了和没遇到一些工具的区别,比如 tensorboard 和wandb 之类的 wandb真的是香
- 官方文档:Getting started | Hydra
- towards上英文教程:Complete tutorial on how to use Hydra in Machine Learning projects
- 配合使用OmegaConf:OmegaConf — OmegaConf 2.3.0.dev0 documentation
安装hydra
pip install hydra-core
hydra 配置框架用法详解
创建config.yaml
model:
sample_rate: &sample_rate 16000
train_ds:
manifest_filepath: ???
sample_rate: 16000
batch_size: 32
trim_silence: false
max_duration: 16.7
shuffle: true
is_tarred: false
tarred_audio_filepaths: null
use_start_end_token: false
defaults:
- _self_ #放在- foo: bar的前面优先使用defaults下面的- foo: bar中的值
- foo: bar
#- _self_ #放在- foo: bar的后面优先使用defaults外面的- foo: bar中的值
上面defaults的使用还没确认,后续取调试看下最终结果
defaults:
- base
- _self_
如上 base 表示本目录下的base.yaml 文件,
_self_ 表示自身的文件
如果有相同的字段,defaults 后面的会覆盖前面的,例如 如果 base 和_self_ 有相同的字段,则_self_ 中的会覆盖 base中的。不过在一个大的字典下,但是字段名不同,则会合并两个字段放到同样的大字典下