[英]Kubeflow - how to use if else statement in pipeline?
我需要创建一个管道来创建用于训练 model 的数据集。我使用了两个数据源。 我希望能够决定是使用一个来源、另一个来源,还是两者都使用。 为此,我创建了两个管道参数,例如: use_first
和use_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_first
或use_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.