首页 > 解决方案 > Kubeflow 管道中的 ParallelFor

问题描述

我想使用自定义列表在 Kubeflow 管道中运行并行操作,并且我想将列表元素的值用于定义操作。我正在尝试这样的事情:

my_list = ['foo', 'bar']
with dsl.ParallelFor(my_list) as item:
    op_first = dsl.ContainerOp(
        name=f'{item} - First Op',
        image=f'gcr.io/...',
        arguments=[
            ...
        ]
    )
    ...

但我收到这样的错误:

ValueError: Only letters, numbers, spaces, "_", and "-"  are allowed in name.
Must begin with letter: {{pipelineparam:op=;name=loop-item-param-103a50f1}} - First Op

我也试过

my_dict = [{'name': 'foo'}, {'name': 'bar'}]
with dsl.ParallelFor(my_list) as item:
    name = item.name
    op_first = dsl.ContainerOp(
        name=f'{name} - First Op',
        image=f'gcr.io/...',
        arguments=[
            ...
        ]
    )
    ...

但我得到一个类似的错误。如何检索项目的“原始”名称?

标签: kubeflowkubeflow-pipelines

解决方案


我知道这是一个老问题,但我刚刚遇到了同样的问题,所以希望这会对其他人有所帮助。

对于您尝试的第二个选项,将字典键“名称”替换为其他内容,如下所示。

my_dict = [{'job_name': 'foo'}, {'job_name': 'bar'}]

似乎 Kubeflow 内部使用了键“名称”,并且为其分配值会导致您的错误。


推荐阅读