问题描述
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中最简单/最标准的方法是什么? (或者可能在omegaconf中?)
(请注意,理想情况下,我希望这些替代文件只是标准的yaml文件,理想情况下,这些文件将替代早期的yaml文件;尽管如果我必须使用替代DSL进行写操作,我可以这样做,如果那是最简单的方法/最佳/最标准的方式)
解决方法
听起来包覆盖可能是您的理想解决方案。
可以在这里找到文档: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的信息。
您可以创建任意配置组,然后从每个配置组中选择一个选项(从Hydra 1.0开始,配置组选项是互斥的),此处将需要两个配置组:
一个可以是model
,具有normal
,small
和big
模型,另一个可以是trainer
,具有normal
和{{1 }}选项。
配置组也可以覆盖其他配置组中的内容。 您也可以始终从命令行添加到默认列表中-因此您还可以添加仅在命令行中使用的其他配置组。 一个示例可以是一个“实验”配置组。您可以将其用作:
fast
在这种覆盖整个配置中所有内容的配置组中,您应该使用全局软件包(有关软件包in the docs的更多信息)。
$ python train.py +experiment=exp1