Как программно зарегистрировать зависимости в конвейере Python DVCPython

Программы на Python
Anonymous
Как программно зарегистрировать зависимости в конвейере Python DVC

Сообщение Anonymous »

Я хочу провести последовательность экспериментов, и каждый эксперимент будет использовать определенные файлы входных данных (зависимости), каждый из которых я хочу подготовить при запуске эксперимента. (В некоторых экспериментах будут использоваться одни и те же наборы входных данных, поэтому их не нужно будет заново генерировать во время последующих экспериментов).
Сначала я думал, что смогу сделать это с одним «главным» конвейер, который циклически обрабатывает каждый эксперимент:
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
Конкретный файл исходных данных, используемый каждым экспериментом, может быть разным, и он будет определен в подготовленном файле data.py на основе имени эксперимента, которое я ему передаю, и некоторых exp_spec .yaml, который он будет загружать, или, возможно, из файла params.yaml.
Я борюсь с тем, как зарегистрировать конкретные зависимости, чтобы
(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.
Как я и ожидал, проблема, похоже, связана с использованием имен папок, input_data и результатов вместо конкретных файлов.


Подробнее здесь: https://stackoverflow.com/questions/788 ... c-pipeline

Вернуться в «Python»