2

我有一个主配置文件,比如说config.yaml

num_layers: 4
embedding_size: 512
learning_rate: 0.2
max_steps: 200000

我希望能够在命令行上用另一个文件(例如 say )覆盖它,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 来编写,我可以这样做,如果这是最简单/最好的/最标准的方式)

4

2 回答 2

1

听起来包覆盖可能是您的一个很好的解决方案。

文档可以在这里找到: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

于 2020-10-29T16:01:55.697 回答
0

请参阅基本教程并阅读有关配置组的信息。

您可以创建任意配置组,并从每个配置组中选择一个选项(从 Hydra 1.0 开始,配置组选项是互斥的),您将需要两个配置组:一个可以是model,带 anormal和模型smallbig另一个可以trainer,带也许normalfast选项。

配置组还可以覆盖其他配置组中的内容。您还可以始终从命令行附加到默认列表 - 因此您还可以添加仅在命令行中使用的其他配置组。一个示例可以是“实验”配置组。您可以将其用作:

$ python train.py +experiment=exp1

在此类覆盖整个配置的配置组中,您应该使用全局包(在文档中阅读有关包的更多信息)。

# @package _global_
num_layers: 8
embedding_size: 1024
learning_rate: 2.0
于 2020-10-29T16:19:06.767 回答