当前位置: 首页 > article >正文

Hydra主配置文件和模块化配置管理

在 Hydra 中,我们可以使用 defaults 关键字 在主配置文件 config.yaml 中加载多个子配置文件,从而实现 模块化配置管理。这在深度学习、超参数优化、数据预处理等场景下非常有用。

1️⃣ 配置文件目录结构

假设我们有一个深度学习训练项目,包含数据集、模型和训练超参数的配置。我们的配置目录结构如下:

project/
│── main.py                # 入口 Python 脚本
│── config/                # 配置文件目录
│   ├── config.yaml        # 主配置文件
│   ├── dataset/           # 数据集配置
│   │   ├── cifar10.yaml
│   │   ├── imagenet.yaml
│   ├── model/             # 模型配置
│   │   ├── resnet.yaml
│   │   ├── transformer.yaml
│   ├── trainer/           # 训练相关配置
│   │   ├── default.yaml
│   │   ├── gpu.yaml

2️⃣ 具体的配置文件内容

🔹 (1) 主配置文件 config.yaml
defaults:
  - dataset: cifar10    # 默认加载 dataset/cifar10.yaml
  - model: resnet       # 默认加载 model/resnet.yaml
  - trainer: default    # 默认加载 trainer/default.yaml

experiment_name: "test_run"   # 额外的全局参数
🔹 (2) 数据集配置
📌 dataset/cifar10.yaml
dataset:
  name: "CIFAR10"
  batch_size: 64
  num_workers: 4

📌 dataset/imagenet.yaml

dataset:
  name: "ImageNet"
  batch_size: 256
  num_workers: 8
🔹 (3) 模型配置
📌 model/resnet.yaml
model:
  name: "ResNet50"
  num_layers: 50
  pretrained: true

📌 model/transformer.yaml

model:
  name: "Transformer"
  num_heads: 8
  hidden_dim: 512
🔹 (4) 训练配置
📌 trainer/default.yaml
trainer:
  epochs: 10
  learning_rate: 0.001
  optimizer: "adam"

📌 trainer/gpu.yaml

trainer:
  epochs: 20
  learning_rate: 0.0005
  optimizer: "adamw"
  gpus: 2

📌 3️⃣ Python 代码示例

import hydra
from omegaconf import DictConfig

@hydra.main(config_path="config", config_name="config.yaml")
def main(cfg: DictConfig) -> None:
    print("Experiment Name:", cfg.experiment_name)
    print("Dataset:", cfg.dataset.name)
    print("Batch Size:", cfg.dataset.batch_size)
    print("Model:", cfg.model.name)
    print("Training Epochs:", cfg.trainer.epochs)
    print("Learning Rate:", cfg.trainer.learning_rate)

if __name__ == "__main__":
    main()

📌 4️⃣ 通过命令行覆盖配置

Hydra 允许你在命令行运行时覆盖配置项。例如:

python main.py dataset=imagenet model=transformer trainer=gpu

🔹 覆盖后输出:

Experiment Name: test_run
Dataset: ImageNet
Batch Size: 256
Model: Transformer
Training Epochs: 20
Learning Rate: 0.0005

📌 5️⃣ 额外的 Hydra 特性

🟢 5.1 + 号新增配置项

如果你想 在运行时添加新的配置项(而不是覆盖现有项),可以使用 + 号:

python main.py +extra_param=new_value

这会在 cfg 中新增:

extra_param: new_value

🟢 5.2 hydra.run.dir 指定运行目录

Hydra 默认会在运行时创建新的目录存储日志和输出结果。你可以修改 hydra.run.dir 让所有运行结果存放在 outputs/ 目录:

hydra:
  run:
    dir: outputs/${now:%Y-%m-%d}/${now:%H-%M-%S}

这样,每次运行时,日志会存放到:

outputs/2025-02-13/14-30-12/

🎯 总结

功能作用
defaults指定要加载的默认配置文件
dataset: cifar10选择 dataset/cifar10.yaml
model: resnet选择 model/resnet.yaml
trainer: default选择 trainer/default.yaml
命令行覆盖python main.py dataset=imagenet model=transformer trainer=gpu
+param=value运行时添加新的参数
hydra.run.dir指定 Hydra 运行时的输出目录

Hydra 让 配置管理更加灵活,尤其适用于 机器学习实验、超参数优化和大规模模型训练 🚀


http://www.kler.cn/a/544637.html

相关文章:

  • 蓝桥杯真题
  • Jenkins 通过 Execute Shell 执行 shell 脚本 七
  • 平方数列与立方数列求和的数学推导
  • flutter启动后不显示文字,中文字体不显示
  • 时尚搭配助手,深度解析用Keras构建智能穿搭推荐系统
  • 在不知道进程的情况下怎么关闭
  • 完善sql盲注中的其他函数 dnslog+sqlmap外带数据
  • 单调栈及相关题解
  • 数据仓库与数据挖掘记录 三
  • DeepSeek:优化学习路径生成,为教育领域带来智能化解决方案
  • 机器学习所需要的数学知识【01】
  • 企语企业管理系iFair(F23.2_a0)在Debian操作系统中的安装
  • O1、R1和V3模型
  • 二次封装axios解决异步通信痛点
  • 本地生活案例列表案例
  • MATLAB算法实战应用案例精讲-【数模应用】灰度图像增强(附MATLAB、C++和python代码实现)
  • 【数据可视化-16】珍爱网上海注册者情况分析
  • Linux 内核架构入门:从基础概念到面试指南*
  • leetcode-495.提莫攻击
  • 蓝桥杯单片机大模板(西风)