Python 在深度学习模型推理过程中使用hydra的最佳方法
我目前正在为我的深度学习项目试用hydra conf。 对于培训,我遵循文档中所示的方法:Python 在深度学习模型推理过程中使用hydra的最佳方法,python,pytorch,hydra-python,Python,Pytorch,Hydra Python,我目前正在为我的深度学习项目试用hydra conf。 对于培训,我遵循文档中所示的方法: 配置文件文件夹,一个主config.yml文件,在额外文件夹中包含其他配置组 我的main方法用@hydra.main(…)修饰以初始化/加载配置 当我的模型被训练时,我保存相应的状态dict 现在的问题是,使用hydra进行模型推理的预期方法是什么? 我的想法是在加载state dict之前,使用模型检查点以及.hydra文件夹中特定于运行的config.yml文件来获取实例化模型所需的构造函数参数
- 配置文件文件夹,一个主config.yml文件,在额外文件夹中包含其他配置组
- 我的main方法用@hydra.main(…)修饰以初始化/加载配置
当尝试使用@hydra.main()方法时,我不知道如何将动态配置文件路径传递给装饰器,因为这将由用户提供(场景:我想通过在hydra创建的training run文件夹中提供配置文件的路径来推断某个模型)有很多方法可以做到这一点,而且没有一个被贴上“最佳”的标签。 你做什么取决于你的需要和你的限制。 您需要初始化配置对象和模型,并将它们传递给推理逻辑 这可以在最初用于训练模型的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',我认为您必须重命名它,因为它将被加载,而不是生成的输出目录(in.hydra)中的配置
更好,但需要更改代码:
一个实用的替代方案是:
@hydra.main()
def infer(cfg):
cfg = OmegaConf.load(cfg.config_path)
...
我还找到了composeAPI,但对“何时应该使用它”部分()感到有点困惑。不同的用例和蓝色警告框表明,compose api应该作为最后手段使用,并用于正常的ML推理用例。我用@hydra.main(…)方法的问题更新了我的问题
$ python infer.py +config_path=outputs/2021-03-30/17-26-51/.hydra/config.yaml
...