繁体   English   中英

Kubeflow - 如何在管道中使用 if else 语句?

[英]Kubeflow - how to use if else statement in pipeline?

我需要创建一个管道来创建用于训练 model 的数据集。我使用了两个数据源。 我希望能够决定是使用一个来源、另一个来源,还是两者都使用。 为此,我创建了两个管道参数,例如: use_firstuse_second

我的管道简单地看起来像这样:

@dsl.pipeline(
    name="data processing pipeline"
)
def data_processing(
    use_first: bool,
    use_second: bool
):
    load_first = load_first_comp(
        use_first=use_first
    )
    
    load_second = load_second_comp(
        use_second=use_second
    )

    corpora_combining = corpora_combining_comp(
        first_dir=load_first.output,
        second_dir=load_second.output
    )

use_firstuse_second等于 True 时,将处理数据集,否则将在组件内部执行此代码:

if not use_first:
    return

coropora_combining 组件中的 first_dir 和 second_dir 参数可以为 False,然后跳过包含这些数据集的文件夹。

我知道在 kubeflow 中你可以使用 dsl.Condition 在管道中创建条件,但我不知道如何使用它来让它按照我想要的方式工作。 我尝试以两种方式使用它。 我这样设置参数值:

use_first = True
use_second = False

起初,我是这样做的:

@dsl.pipeline(
    name="data processing pipeline"
)
def data_processing(
    use_first: bool,
    use_second: bool
):
    with dsl.Condition(use_first == True):
        load_first = load_first_comp()
        first_dir = load_first.output

    with dsl.Condition(use_first == False):
        first_dir = False

    with dsl.Condition(use_second == True):
        load_second = load_second_comp()
        second_dir = load_second.output

    with dsl.Condition(use_second == False):
        second_dir = False

    corpora_combining = corpora_combining_comp(
        first_dir=first_dir,
        second_dir=second_dir
    )

通过这种方式,我收到了一条错误消息: Pipeline must have at least one task.

第二种方式是这样的:

@dsl.pipeline(
    name="data processing pipeline"
)
def data_processing(
    use_first: bool,
    use_second: bool
):
    first_dir = False
    second_dir = False

    with dsl.Condition(use_first == True):
        load_first = load_first_comp()
        first_dir = load_first.output

    with dsl.Condition(use_second == True):
        load_second = load_second_comp()
        second_dir = load_second.output

    corpora_combining = corpora_combining_comp(
        first_dir=first_dir,
        second_dir=second_dir
    )

使用此方法管道启动,但 corpora_combining 步骤失败,因为无法从 load_second 步骤获取 output。 我以为这段代码会被省略:

second_dir = load_second.output

在这种情况下如何使用 dsl.Condition 模拟 if else 语句?

我为此制作了一个skip组件。

@component(base_image="python:3.9")
def skip() -> str:
    import logging

    logger = logging.getLogger(__name__)
    logger.info("Skipping")
    return "skipped"

这样你可以

    with dsl.Condition(use_first == True):
        load_first = load_first_comp()
        first_dir = load_first.output

    with dsl.Condition(use_first == False):
        first_dir = skip().output

我真希望有一种更优雅的方式来做到这一点......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM