我正在Kubeflow中构建一个ML管道,我有一个问题。是否有任何开箱即用的东西可以让我配置我的管道,这样如果一个步骤的输出存在,它就不会重新运行?我想到了手动执行此操作的方法(或者在编译管道时检查现有的输出,或者有一个返回要运行的步骤列表的初始步骤,或者手动配置哪些步骤作为输入参数运行),但我找不到处理此问题的本地方法。
对我来说,常见的用例是在不重新运行任何数据预处理的情况下重新运行模型步骤;但不需要有一个特定的“模型开发”管道,它将不同于包含数据预处理步骤的更通用的prod管道。或者,也许我正在迭代一个评估阶段,我甚至不需要重新训练,但我仍然希望使用相同的管道。现在,同事们正在使用几个管道,每个管道从不同的步骤开始,来解决这个问题。
我从map-duce的角度来看,这是微不足道的——框架会自动检测哪些输出存在,不会默认重建它们,但可以轻松地为您提供重建部分或全部输出的选项。也许这偏向了我使用kubeflow的方式?
任何帮助赞赏!
好吧,我想我应该把我找到的东西放在这里来解决这个问题。
截至2019年9月,这不是Kubeflow的一项功能(据从事这项工作的人称),但工作中有一个缓存功能,不应重新运行任何存在输出的步骤。
与此同时,我通过管道Param'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的方法,它可以理解创建步骤的顺序并适当地链接它们(我们实际上有七个步骤,所以我真的想避免到处复制/粘贴)。