问题标签 [hydra-python]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 如何在不使用 @hydra.main() 的情况下获取 Hydra 配置
假设我们有以下设置(从Hydra 文档复制并缩短):
配置文件:config.yaml
蟒蛇文件:my_app.py
当我们可以在函数上使用装饰器时,这很有效my_app
。现在我想(对于小脚本和测试目的,但这并不重要)cfg
在任何函数之外获取这个对象,只是在一个普通的 python 脚本中。据我了解装饰器的工作原理,应该可以调用
但 thencfg
只是None
而不是所需的配置对象。所以看起来装饰器没有传递返回的值。还有其他方法可以做到cfg
吗?
python-3.x - 如何通过命令行传递 Hydra 配置
已经有一个相关的问题,但是提议的Compose API不再支持 Hydra 0.11.3 将配置作为参数传递。
我想知道是否有办法通过命令行传递配置,或者此功能是否在最新版本中被禁用?
python-3.x - 在配置中调用 hydra.utils.instantiate
以下作品:
但它是early_stopping
一个必需的参数。有没有更好的方法或方法在配置中指定所有这些,类似于以下内容?
这样我就可以做到:
hydra-python - 传递多个配置组
在我的 config.yaml 中,如何同时传递两个数据集,例如 cifar 和 cinic?我可以将多个配置组传递给默认列表吗?
这适用于我想在混合数据集上训练我的模型,但我不想为每个可能的组合创建一个配置组的情况。
我尝试如下:
这导致以下错误:
Could not load train_dataset/['cifar', 'cinic']. Available options 'cifar ... '
fb-hydra - 使用 SLURM 和 Horovod 运行 hydra 配置的项目
现在,我正在使用 Horovod 对我的 pytorch 模型进行分布式训练。我想开始为 --multirun 功能使用 hydra 配置,并使用 SLURM 将所有作业排入队列。我知道有 Submitid 插件。但我不确定,整个管道如何与 Horovod 合作。现在,我的训练命令如下所示:
假设我想使用 hydra --multirun 运行多个多 GPU 实验,我想使用 slurm 将运行排入队列,因为我的资源有限并且大部分时间会按顺序运行,我想使用 Horovod 来同步我的梯度网络。这个设置会开箱即用吗?如果 slurm 负责资源,我需要指定 CUDA_VISIBLE_DEVICES 吗?我需要如何调整我的运行命令或其他设置以使此设置合理?我对多运行功能如何处理 GPU 资源特别感兴趣。欢迎任何建议。
fb-hydra - 递归 i 初始化以及如何在另一个配置组中使用配置组
我正在探索 hydra 中递归初始化的选项。我能够基于此 PR设置一个工作示例。在尝试更高级的东西时,我偶然发现了以下问题。我的目录结构如下:
配置包含:
我想递归地实例化 Tokenizer 而不需要显式地编写 Normalizer 的所有参数,因为它们都已经在 Normalizer.yaml 文件中提到了。换句话说,我想在标记器配置组中使用规范器配置组。现在,如果我调用tokenizer = instantiate(cfg.tokenizer)
,结果是一个 Tokenizer 类对象,但是tokenizer.normalizer
是一个 string Normalizer
。如果我使用值插值并按如下方式设置项目:
结果变量tokenizer.normalizer
是一个包含 Normalizer 的 args 的 dict,{"_target_": ...}
而不是初始化的 Normalizer 类。如何避免需要在标记器配置中显式重复规范器的定义?
python - 如何从脚本中覆盖 hydra 工作目录?
我知道我可以通过hydra.run.dir=XXX
从命令行设置来更改配置中的工作目录。但是如何在不使用 CLI 参数的情况下从脚本中正确地做到这一点,即使日志也保存在我设置的目录中?
此代码不起作用,因为:
- 当我尝试更改目录和
- 没有这样的属性
cfg.hydra
。
UPD:我在评论中得到了一个指针。我可以在调用 hydra 之前更改块中的 hydra 参数if __name__ == 'main':
。hydra.run.dir
但是如何从脚本中获取和修改呢?
我的 hydra 配置如下所示:
hydra - 在装饰器中设置 Hydra 默认配置
有没有办法在 hydra 装饰器中定义默认配置并且不将其保存到任何 yaml 文件中?对于一些小脚本,它可能非常方便。
像这样的东西:
pyinstaller - 将 hydra 与 pyinstaller 一起使用
我一直在尝试将 Hydra 与 PyInstaller 一起使用,但失败了。我创建了一个与此处示例类似的配置示例。
我注意到 PyInstaller 没有找到 hydra 包,所以我使用以下代码创建了一个简单的钩子文件 hook-hydra.py:
这似乎解决了模块导入失败,但是当我尝试在命令行中运行可执行文件时,出现以下错误:
我似乎无法弄清楚,有什么想法吗?
我正在使用 PyInstaller 3.6 和 Hydra 1.0.4
fb-hydra - 禁用 hydra 的文件输出
我正在使用hydra记录实验的超参数。
有时我想做一个空运行来检查一些东西。为此,我不需要任何保存的参数,所以我想知道在这种情况下如何完全禁用对文件系统的保存?