【问题标题】:What are Hydra advantages vs using a regular configuration file与使用常规配置文件相比,Hydra 有哪些优势
【发布时间】:2022-10-20 08:48:11
【问题描述】:

我想知道使用 Hydra 管理我的配置文件有什么好处, 与直接加载 .yaml 配置文件(使用 import yaml)相比?

【问题讨论】:

    标签: python configuration-files hydra


    【解决方案1】:

    Hydra 为配置组合和实例化提供了一个框架。

    “配置组合”部分意味着可以灵活地组合和修改来自yaml文件的数据。您可以在 yaml 文件中使用指令和“默认列表”将 yaml 文件包含到彼此中,当您从终端调用应用程序时,您可以使用 Hydra 的命令行语法来修改 yaml 数据的组成方式。这允许例如以一种比传统解决方案(如 python 的argparse)更灵活和流畅的方式更改超参数设置或从命令行换出类的不同实现。我建议关注 Hydra 的 "Your first Hydra app" tutorial 以了解配置组合。

    “实例化”部分意味着您可以将组合配置转换为应用程序类的实例。传统上将在程序的“主”例程中完成的对象的创建可以改为表示为 yaml,然后使用 Hydra 的instantiate API 进行动画处理。在“主”例程之上的这一额外抽象层为灵活的对象创建和组合开辟了新的可能性。

    有几个内置的便利功能,如logging support、command-line tab completion,可以轻松发现如何在命令行修改应用程序的配置,以及在日志目录中自动保存应用程序配置的快照。

    Hydra 有一个插件框架。有几个“sweeper”插件提供对超参数优化的支持,以及“launcher”插件提供对例如支持。远程启动作业。

    Hydra 使用OmegaConf 作为后端的事实有几个好处:

    • OmegaConf 支持variable interpolation,就像配置对象中的“指针”。例如,在 yaml 文件中,您可以编写如下内容:
    foo: 123
    bar: ${foo}
    

    然后在你的python代码中你可以assert cfg.bar == 123。

    • OmegaConf 的"custom resolver" 功能允许您注册可以在您的yaml 文件中内联调用的python 函数,本质上允许用户定义一种特定于域的语言来操作配置数据。例如,您可以注册一个 python 函数 add_one 将 1 添加到给定数字,然后在 yaml 文件中使用此函数,如下所示:
    baz: ${add_one: 123}
    qux: ${add_one: ${foo}}  # nested interpolations work too
    

    这将导致cfg.baz == 124 和cfg.qux == 124。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2010-10-23
      • 2013-09-01
      • 1970-01-01
      • 2013-09-22
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多