如何在 Hydra 中覆盖文件?
How to do file over-rides in hydra?
我有一个主配置文件,比方说 config.yaml
:
num_layers: 4
embedding_size: 512
learning_rate: 0.2
max_steps: 200000
我希望能够在命令行上用另一个文件覆盖它,比如 big_model.yaml
,我在概念上使用它,如:
python my_script.py --override big_model.yaml
和 big_model.yaml
可能看起来像:
num_layers: 8
embedding_size: 1024
我希望能够覆盖任意数量的此类文件,每个文件都优先于最后一个。假设我也有 fast_learn.yaml
learning_rate: 2.0
然后我想在概念上做类似的事情:
python my_script.py --override big_model.yaml --override fast_learn.yaml
在 hydra 中执行此操作的 easiest/most 标准方法是什么? (或者可能在 omegaconf 中?)
(请注意,我希望这些覆盖文件理想情况下只是标准的 yaml 文件,理想情况下覆盖早期的 yaml 文件;尽管如果我必须改用覆盖 DSL 来编写,我可以这样做,如果那是easiest/best/most 标准方式)
听起来包覆盖可能是适合您的解决方案。
可以在此处找到文档:https://hydra.cc/docs/next/advanced/overriding_packages
可在此处找到示例应用程序:
https://github.com/facebookresearch/hydra/tree/master/examples/advanced/package_overrides
以示例应用程序为例,您可以通过执行以下操作来实现覆盖
$ python simple.py db=postgresql db.pass=helloworld
db:
driver: postgresql
user: postgre_user
pass: helloworld
timeout: 10
参考基础教程,阅读config groups。
您可以创建任意配置组,select每个配置组一个选项(从 Hydra 1.0 开始,配置组选项是互斥的),您需要两个配置组:
一个可以是 model
,具有 normal
、small
和 big
模型,另一个可以是 trainer
,可能具有 normal
和 [=18] =] 选项。
配置组也可以覆盖其他配置组中的内容。
您也可以始终从命令行附加到默认列表 - 因此您还可以添加仅在命令行中使用的其他配置组。
'experiment' 配置组就是一个例子。您可以将其用作:
$ python train.py +experiment=exp1
在此类覆盖整个配置的配置组中,您应该使用全局包(阅读有关包的更多信息 in the docs)。
# @package _global_
num_layers: 8
embedding_size: 1024
learning_rate: 2.0
我有一个主配置文件,比方说 config.yaml
:
num_layers: 4
embedding_size: 512
learning_rate: 0.2
max_steps: 200000
我希望能够在命令行上用另一个文件覆盖它,比如 big_model.yaml
,我在概念上使用它,如:
python my_script.py --override big_model.yaml
和 big_model.yaml
可能看起来像:
num_layers: 8
embedding_size: 1024
我希望能够覆盖任意数量的此类文件,每个文件都优先于最后一个。假设我也有 fast_learn.yaml
learning_rate: 2.0
然后我想在概念上做类似的事情:
python my_script.py --override big_model.yaml --override fast_learn.yaml
在 hydra 中执行此操作的 easiest/most 标准方法是什么? (或者可能在 omegaconf 中?)
(请注意,我希望这些覆盖文件理想情况下只是标准的 yaml 文件,理想情况下覆盖早期的 yaml 文件;尽管如果我必须改用覆盖 DSL 来编写,我可以这样做,如果那是easiest/best/most 标准方式)
听起来包覆盖可能是适合您的解决方案。
可以在此处找到文档:https://hydra.cc/docs/next/advanced/overriding_packages
可在此处找到示例应用程序: https://github.com/facebookresearch/hydra/tree/master/examples/advanced/package_overrides
以示例应用程序为例,您可以通过执行以下操作来实现覆盖
$ python simple.py db=postgresql db.pass=helloworld
db:
driver: postgresql
user: postgre_user
pass: helloworld
timeout: 10
参考基础教程,阅读config groups。
您可以创建任意配置组,select每个配置组一个选项(从 Hydra 1.0 开始,配置组选项是互斥的),您需要两个配置组:
一个可以是 model
,具有 normal
、small
和 big
模型,另一个可以是 trainer
,可能具有 normal
和 [=18] =] 选项。
配置组也可以覆盖其他配置组中的内容。 您也可以始终从命令行附加到默认列表 - 因此您还可以添加仅在命令行中使用的其他配置组。 'experiment' 配置组就是一个例子。您可以将其用作:
$ python train.py +experiment=exp1
在此类覆盖整个配置的配置组中,您应该使用全局包(阅读有关包的更多信息 in the docs)。
# @package _global_
num_layers: 8
embedding_size: 1024
learning_rate: 2.0