2

我正在 Kubeflow 中构建 ML 管道,我有一个问题。有什么开箱即用的东西可以让我配置我的管道,这样如果一个步骤的输出存在,​​它就不会重新运行?我已经想到了手动执行此操作的方法(在我编译管道时检查现有输出,或者有一个初始步骤返回要运行的步骤列表,或者手动配置哪些步骤作为输入参数运行)但我找不到处理这个问题的原生方式。

对我来说,常见的用例是重新运行模型步骤而不重新运行任何数据预处理;但不必有一个特定的“模型开发”管道,该管道与包含数据预处理步骤的更一般的产品不同。或者也许我正在评估阶段进行迭代,我什至不需要重新培训,但我仍然想使用相同的管道。现在,同事们正在使用几个管道,每个管道都从不同的步骤开始,以解决这个问题。

我是从 map-reduce 的角度来看的,这是微不足道的——框架会自动检测存在哪些输出并且不会将它们重建为默认值,但可以轻松地为您提供重建部分或全部输出的选项。也许这会影响我使用 kubeflow 的方式?

任何帮助表示赞赏!

4

1 回答 1

2

好的,我想我会在这里放上我发现的解决这个问题的方法。

截至 2019 年 9 月,这不是 Kubeflow 的一个功能(根据工作人员的说法),但作品中有一个缓存功能,不应重新运行任何存在输出的步骤。

与此同时,我通过 pipelineParam 'startingStep' 手动实现了它,一切都需要重新运行。像这样的东西:

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 方法,该方法了解创建步骤的顺序并适当地链接它们(我们实际上有七个步骤,所以我真的很想避免复制/粘贴)。

于 2019-09-30T07:43:53.243 回答