是什么
是由Facebook开发的Python管理配置框架。
解决问题:普通python脚本使用argparse处理命令行参数,仅支持简单的扁平参数(如--model resnet --lr 0.001),对于多层嵌套参数、多配置文件组合、动态参数覆盖、配置自动保存等复杂场景,argparse难以支持。Hydra正是为解决这些痛点而生。
核心特性
支持YAML配置文件+命令行参数覆盖
可先将项目默认参数(如模型配置、数据集路径、训练超参等)写入YAML配置文件(分层嵌套结构,更易阅读和维护)。运行脚本时,可通过命令行直接覆盖YAML中的任意参数,而无需修改配置文件本身。如下:
yaml
# configs/trado_eval.yaml
dataset:
eval_dataset: "default_data"
batch_size: 32
rollout:
max_token: 1024
block_size: 2
通过命令行覆盖嵌套参数:
shell
python -m eval.trado_eval config=configs/trado_eval.yaml dataset.eval_dataset=my_data rollout.max_token=2048
支持多配置文件组合
Hydra允许将配置拆分到多个YAML文件中(如model.yaml、dataset.yaml、train.yaml),运行时可按需组合多个配置文件,实现配置复用。如下
shell
my_train_project/ # 项目根目录
├── configs/ # 所有配置文件存放目录(Hydra 默认读取该目录)
│ ├── base.yaml # 基础公共配置(通用参数,如实验名称、日志路径)
│ ├── model/ # 模型相关配置文件夹(按模型类型拆分)
│ │ ├── bert.yaml # BERT 模型专属配置
│ │ └── resnet.yaml # ResNet 模型专属配置
│ ├── dataset/ # 数据集相关配置文件夹(按数据集类型拆分)
│ │ ├── coco.yaml # COCO 数据集专属配置
│ │ └── mnist.yaml # MNIST 数据集专属配置
│ └── trainer/ # 训练器相关配置文件夹(按运行环境拆分)
│ ├── gpu.yaml # GPU 训练专属配置
│ └── cpu.yaml # CPU 训练专属配置
└── train.py # 训练脚本(集成 Hydra)
若运行python -m train model=bert dataset=coco trainer=gpu,Hydra会自动加载base.yaml(基础配置)、model/bert.yaml、dataset/coco.yaml、trainer/gpu.yaml。然后在多配置组合的基础上,还可以通过Hydra的参数覆盖语法,手动调整个别参数,如python -m train model=resnet dataset=mnist trainer=gpu dataset.batch_size=24 trainer.max_epochs=100
自动保存配置+日志归档
Hydra会自动将本次运行的最终配置(基础配置+命令行覆盖参数)保存到日志目录中,同时支持日志自动归档,方便后续复现实验结果