kubeflow Parallel用于使用之前的containerop输出

时间:2019-12-09 12:47:45

标签: python kubeflow kubeflow-pipelines

我可以使用

创建一个静态for循环
with dsl.ParallelFor([1,2,3]) as item:
   ....

如何使用container_op.output作为ParallelFor的输入?
假设第一个容器输出一个整数n,然后我想运行ParallelFor n次。

这样的尝试不起作用:

container_op = ContainerOp(...)
with dsl.ParallelFor(container_op.output) as item:
   ....

我正在尝试刺激并行的Python range(n)函数。

1 个答案:

答案 0 :(得分:1)

支持withItem(静态循环)和withParams(动态循环)的更改分为多个部分,但现在都可以使用。请参阅PR

确保您的KPF版本为0.1.31或更高版本。

可以如下循环遍历前一个container_op的输出

echo_op = dsl.ContainerOp(
        name='echo',
        image='library/bash:4.4.23',
        command=['sh', '-c'],
        arguments=['echo "[1,2,3]"> /tmp/output.txt'],
        file_outputs={'output': '/tmp/output.txt'})

with dsl.ParallelFor(echo_op.output) as item:
        iterate_op = dsl.ContainerOp(
        name='iterate',
        image='library/bash:4.4.23',
        command=['sh', '-c'],
        arguments=[f"echo {item} > /tmp/output.txt"],
        file_outputs={'output': '/tmp/output.txt'})

确保您的输出YAML看起来像这样:

        name: for-loop-for-loop-3c29048d-1
        template: for-loop-for-loop-3c29048d-1
        withParam: '{{tasks.echo.outputs.parameters.echo-output}}'