首页 > 解决方案 > kubeflow ParallelFor 使用之前的 containerop 输出

问题描述

我可以使用创建一个静态 for 循环

with dsl.ParallelFor([1,2,3]) as item:
   ....

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

像这样的尝试不起作用:

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

我正在尝试刺激并行 pythonrange(n)函数。

标签: pythonkubeflowkubeflow-pipelines

解决方案


对支持withItem(静态循环)和withParams(动态循环)的更改是在多个部分中完成的,但它们现在都可用。参考公关

确保您的 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}}'

推荐阅读