问题描述
使用 dvc 版本 2.0.18 和 python 3.9.2 我想在配置 dvc.yaml
中阶段的参数时使用与 params.yaml 不同的配置文件中定义的参数。但是,它并没有像我预期的那样工作。
MWE: Git repo + 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
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
(不推荐)或 dvc stage add
创建阶段时,您可以明确提供 params 文件名作为前缀:
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
是自定义参数文件。
请告诉我它是否解决了问题,如果您有任何其他问题:)