【问题标题】:Best way to use hydra during deep learning model inference在深度学习模型推理期间使用 hydra 的最佳方法
【发布时间】:2021-04-02 05:14:41
【问题描述】:

我目前正在为我的深度学习项目试验 hydra-conf。 对于培训,我遵循文档中显示的方式:

  • 配置文件的文件夹,一个主 config.yml 文件,在额外的文件夹中包含额外的配置组
  • 我的 main 方法用 @hydra.main(...) 修饰来初始化/加载配置

当我的模型被训练时,我会保存相应的状态字典。

现在的问题是,使用 hydra 进行模型推理的预期方法是什么? 我的想法是使用模型检查点以及 .hydra 文件夹中特定于运行的 config.yml 文件来获取实例化模型所需的构造函数参数, 在加载状态字典之前。

有没有更好的方法来实现我的目标?

编辑 1: 当尝试使用 @hydra.main() 方法时,我不知道如何将动态配置文件路径传递给装饰器,因为这将由用户提供(场景:我想对某个模型进行推理通过在 hydra 创建的 training-run 文件夹中提供配置文件的路径)

【问题讨论】:

    标签: python pytorch hydra-python


    【解决方案1】:

    有很多方法可以做到这一点,但没有一个被标记为“最佳”:)。 你做什么取决于你的需要和你的限制。 您需要初始化配置对象和模型并将它们传递给您的推理逻辑。

    这可以在您最初用于训练模型的同一个 Hydra 应用程序中完成,也可以在一个新的更简单的应用程序中完成。 您可以在加载模型时直接使用https://omegaconf.readthedocs.io/en/2.0_branch/ 来加载配置。

    如果您想重构您的配置,您应该使用原始应用配置和覆盖列表(也在 .hydra main 中)以及 https://hydra.cc/docs/experimental/compose_api。 与仅使用训练运行保存的确切 config.yaml 相比,重新编写更为复杂,但提供了更大的灵活性。

    编辑1: 不是很干净: 您可以尝试结合使用 --config-dir 和 --config-name (https://hydra.cc/docs/advanced/hydra-command-line-flags)。

    如果您的主配置也被命名为“config”,我认为您将不得不重命名它,因为它将被加载,而不是生成的输出目录中的配置(在 .hydra 中)。

    更好但需要更改代码: 一个实用的替代方案是这样的:

    @hydra.main()
    def infer(cfg):
      cfg = OmegaConf.load(cfg.config_path)
      ...
    
    $ python infer.py +config_path=outputs/2021-03-30/17-26-51/.hydra/config.yaml
    ...
    

    【讨论】:

    • 我也找到了 compose api,但对“何时应该使用它”部分 (hydra.cc/docs/experimental/compose_api/…) 感到有些困惑。不同的用例和蓝色警告框表明应该将 compose-api 用作最后的手段,并用于正常的 ML 推理用例。我用@hydra.main(...) 方法的问题更新了我的问题
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2018-08-13
    • 2020-02-12
    • 2018-10-27
    相关资源
    最近更新 更多