使用 dvc 2.0 中额外配置的参数

Use parameters from additional configs in dvc 2.0

使用 dvc 版本 2.0.18 和 python 3.9.2 在配置 dvc.yaml 中的阶段参数时,我想使用不同于 params.yaml 的配置文件中定义的参数.然而,它并没有像我预期的那样工作。

MWE: Git 回购 + dvc 初始化:

.
├── dvc.yaml
├── preproc.yaml
└── test.py

dvc.yaml:

vars:
  - preproc.yaml
stages:
  test:
    cmd: python test.py
    deps:
      - test.py
    params:
      - important_parameter

preproc.yaml:

important_parameter: 123

运行 dvc repro 导致如下错误:

ERROR: failed to reproduce 'dvc.yaml': dependency 'params.yaml' does not exist

创建一个没有内容的虚拟 params.yaml 给出:

WARNING: 'params.yaml' is empty.
ERROR: failed to reproduce 'dvc.yaml': Parameters 'important_parameter' are missing from 'params.yaml'.

我错过了什么?使用模板功能完全可以做到这一点吗?

我认为在这种情况下您不需要模板功能。如图所示example:

stages:
  train:
    cmd: python train.py
    deps:
      - users.csv
    params:
      - params.py:
          - BOOL
          - INT
          - TrainConfig.EPOCHS
          - TrainConfig.layers
    outs:
      - model.pkl

重新定义默认params.yaml的方法是在params:部分明确指定文件名:

params:
  - preproc.yaml:
    - important_parameter

此外,当您使用 dvc run (not recommended) or dvc stage add 创建阶段时,您可以明确提供参数文件名作为前缀:

dvc run -n train -d train.py -d logs/ -o users.csv -f \
          -p parse_params.yaml:threshold,classes_num \
          python train.py

这里^^ parse_params.yaml是一个自定义的params文件。

请让我知道它是否解决了问题,如果您有任何其他问题:)