2

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

Edit1: 不是很干净:您可以尝试结合使用 --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
...
于 2021-03-31T16:40:01.273 回答