You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubeflow Pipelines中拼接OutputPathPlaceholder与字符串

方案1:在组件函数内部直接拼接(推荐,适合用装饰器定义组件的场景)

你在组件函数中拿到Output对象的path属性后,直接用os.path.join拼接子路径即可,示例代码如下:

import kfp
from kfp.dsl import component, Output, Model
import os

@component(
    base_image="python:3.9",
    output_component_file="train_component.yaml"
)
def train_task(
    drt_model: Output[Model],
    # 其他输入参数略
):
    # 直接拼接子目录路径
    model_save_dir = os.path.join(drt_model.path, "model")
    checkpoint_save_dir = os.path.join(drt_model.path, "checkpoints")
    tensorboard_log_dir = os.path.join(drt_model.path, "tensorboard")

    # 手动创建子目录(基础路径KFP会自动创建,子目录需要自行创建)
    os.makedirs(model_save_dir, exist_ok=True)
    os.makedirs(checkpoint_save_dir, exist_ok=True)
    os.makedirs(tensorboard_log_dir, exist_ok=True)

    # 后续业务逻辑,将对应工件写入对应目录即可

方案2:在组件命令定义阶段拼接

如果你是通过命令数组的方式定义组件执行逻辑,直接将OutputPathPlaceholder和子路径字符串做普通字符串拼接即可,KFP编译时会自动识别占位符,运行时会正确生成拼接后的完整路径,示例如下:

from kfp.dsl import OutputSpec, OutputPathPlaceholder
from kfp.components import create_component_from_func

# 定义组件输出
outputs = [OutputSpec(name='drt_model', type='Model')]

# 组件命令定义,直接拼接占位符和子路径
train_component = kfp.components.create_component_from_func(
    func=your_train_func,
    base_image="your-custom-image:tag",
    outputs=outputs,
    command=[
        "python", "train.py",
        "--model-dir", f"{OutputPathPlaceholder('drt_model')}/model",
        "--checkpoint-dir", f"{OutputPathPlaceholder('drt_model')}/checkpoints",
        "--tensorboard-dir", f"{OutputPathPlaceholder('drt_model')}/tensorboard",
    ]
)

注意事项

  • 无需为子路径单独定义Output参数,所有子目录内容都会归属到你定义的drt_model模型工件下,下游组件需要使用对应子路径时,同样直接拼接train_task.outputs['drt_model']和子路径字符串传入即可
  • 如果是写入GCS路径,部分框架支持直接写GCS路径不需要提前创建目录,本地路径则需要手动调用os.makedirs创建子目录

内容的提问来源于stack exchange,提问作者Dr. Fabien Tarrade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:06:07