Как пропустить уже выполненные шаги в конвейере kubeflow?

Я создаю конвейер машинного обучения в Kubeflow, и у меня есть вопрос. Есть ли что-нибудь из коробки, что позволяет мне настроить мой конвейер, чтобы шаг не запускался повторно, если его результат существует? Я подумал о способах сделать это вручную (либо проверка существующих выходов при компиляции конвейера, либо начальный шаг, который возвращает список шагов для запуска, либо ручная настройка, какие шаги запускать в качестве входного параметра) но я не могу найти собственный способ справиться с этим.

Обычным вариантом использования для меня было бы повторное выполнение шага модели без повторного запуска какой-либо предварительной обработки данных; но без необходимости иметь конкретный конвейер "разработки модели", который отличался бы от более общего продукта, который включал бы этап предварительной обработки данных. Или, возможно, я повторяю этап оценки, и мне даже не нужно переучивать, но я все равно хотел бы использовать тот же конвейер. Прямо сейчас коллеги используют несколько конвейеров, каждый из которых запускается на отдельном этапе, чтобы обойти это.

Я подхожу к этому с точки зрения уменьшения карты, где это тривиально - фреймворк автоматически определяет, какие выходные данные присутствуют, и не перестраивает их по умолчанию, но легко дает вам возможность перестроить некоторые или все из них. Может быть, это искажает мой способ работы с kubeflow?

Любая помощь приветствуется!

1 ответ

Хорошо, я подумал, что поставлю здесь то, что нашел, чтобы решить эту проблему.

По состоянию на сентябрь 2019 года, это не функция Kubeflow (по словам людей, работающих над ней), но в разработке есть функция кеширования, которая не должна повторно запускать какие-либо шаги, выходы которых существуют.

Тем временем я вручную реализовал его через pipelineParam 'startStep', из которого все нужно было перезапустить. Что-то вроде этого:

with dsl.Condition(first_step_to_run == "prep"):
    create_ops(StartingStep.prep)
with dsl.Condition(first_step_to_run == "train"):
    create_ops(StartingStep.train)
with dsl.Condition(first_step_to_run == "evaluate"):
    create_ops(StartingStep.evaluate)

с методом create_ops, который понимает, в каком порядке создавать шаги, и соответствующим образом связывает их (на самом деле у нас семь шагов, поэтому я действительно хотел избежать копирования / вставки повсюду).

Другие вопросы по тегам