Сначала я думал, что смогу сделать это с одним «главным» конвейер, который циклически обрабатывает каждый эксперимент:
dvc.yaml
Код: Выделить всё
stages:
prepare_data:
foreach: ${experiment_names}
do:
cmd: python stages/prepare_data.py "${item}"
deps:
- source_data
- stages/prepare_data.py
params:
- prepare_data
outs:
- input_data
run_simulation:
foreach: ${experiment_names}
do:
cmd: python stages/run_simulation.py "${item}"
deps:
- input_data
- stages/run_simulation.py
params:
- run_simulation
outs:
- results
Я борюсь с тем, как зарегистрировать конкретные зависимости, чтобы
(i) когда для эксперимента требуется уже подготовленный файл входных данных, он не регенерирует его
(ii) когда один из файлов исходных данных изменяется, только модели, использующие этот файл выполняются повторно.
Очевидно, что это невозможно сделать в приведенном выше файле dvc.yaml, поскольку он относится ко всем экспериментам.
Делайте Мне нужно построить отдельный конвейер для каждого эксперимента, чтобы зарегистрировать конкретные зависимости? Если да, то можно ли это сделать программно или мне нужно собрать их все вручную?
ОБНОВЛЕНИЕ
Я завершил конвейер, написав простые сценарии дляprepre_data.py, run_simulation.py и params.yaml, и попытался запустить его с помощью приведенного выше файла dvc.yaml.< /p>
Это результат:
Код: Выделить всё
Reproducing experiment 'lobar-snob'
Building workspace index |1.46k [00:00, 3.76kentry/s]
Comparing indexes |1.42k [00:00, 5.59kentry/s]
WARNING: No file hash info found for '/dvc_pipelines/test_pipeline/results'. It won't be created.
WARNING: No file hash info found for '/dvc_pipelines/test_pipeline/input_data'. It won't be created.
Applying changes |0.00 [00:00, ?file/s]
ERROR: output 'input_data' is specified in:
- prepare_data@test_exp_2
- prepare_data@test_exp_1
Use `dvc remove` with any of the above targets to stop tracking the overlapping output.
Подробнее здесь: https://stackoverflow.com/questions/788 ... c-pipeline