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

Vertex AI是否支持InputPath/OutputPath及跨步骤大文件传递

Google Cloud Vertex Pipelines对KFP SDK InputPath/OutputPath参数类型的支持问题

环境配置流程

已完成的GCP环境配置步骤如下:

  • 设置PROJECT_ID、SERVICE_ACCOUNT_ID、USER_EMAIL、BUCKET_NAME、FILE_NAME、GOOGLE_APPLICATION_CREDENTIALS等环境变量
  • 创建Vertex运行专用服务账号,授予roles/storage.objectAdmin、roles/aiplatform.user、roles/ml.admin权限
  • 为当前用户绑定该服务账号的roles/iam.serviceAccountUser角色
  • 创建GCS存储桶,为服务账号授予存储对象创建、查看权限
  • 生成服务账号密钥文件,完成认证配置

流水线实现逻辑

基于KFP v2 DSL编写两步骤流水线:

  • 将step_1_fn、step_2_fn封装为轻量组件,指定基础镜像为library/python:3.10-slim-buster,安装dill依赖
  • 配置流水线根路径为gs://minimal_vertex_test_bucket,流水线名称为minimalcompile,step_1执行完成后将输出output_context_path传入step_2作为input_context_path参数
  • step_1_fn定义OutputPath(str)类型的output_context_path参数:逻辑为定义变量a=10,使用dill.dump_session将会话序列化到输出路径
  • step_2_fn定义InputPath(str)类型的input_context_path参数、OutputPath(str)类型的output_context_path参数:逻辑为读取输入路径的文件内容,打印变量a后序列化会话到输出路径

报错现象

使用compiler.Compiler().compile()命令编译流水线,成功生成合法的root.json流水线定义文件,但上传至Vertex AI运行时,step_2抛出异常:

ValueError: Failed to get input artifact path for artifact name input_context_path
排查执行日志确认:

  • step_1的执行参数中output_context_path已正确映射到GCS路径下的输出文件
  • step_2的执行参数中input_context_path的stringValue为空,未正确关联step_1的输出文件路径

核心问题

  1. Vertex AI Pipelines是否原生支持InputPath/OutputPath类型的参数传递?
  2. 若不支持该特性,在Vertex流水线中实现单步骤输出大文件、下游步骤读取该大文件的标准实践方案是什么?

解答

问题1答复

Vertex AI Pipelines 不完全原生支持 裸用KFP SDK的InputPath/OutputPath参数传递:Vertex适配的KFP v2运行时会将无显式Artifact类型标注的Path参数识别为普通参数而非制品引用,这是step_2无法获取上游路径值的根因——直接传OutputPath(str)时,Vertex不会自动建立上下游制品的依赖关联。

问题2答复

大文件跨步骤传递的标准实现方案有两种,按需选择即可:

  1. 使用KFP内置Artifact类型标注Path参数
    不要直接给InputPath/OutputPath传基础类型str,替换为KFP内置的Dataset、Model等标准Artifact类型,示例写法:
    from kfp import dsl
    from kfp.dsl import Dataset, Input, Output
    
    @dsl.component(base_image="python:3.10-slim-buster", packages_to_install=["dill"])
    def step_1_fn(output_context_path: Output[Dataset]):
        a = 10
        import dill
        # 直接通过Artifact的path属性拿到自动分配的GCS挂载路径
        dill.dump_session(output_context_path.path)
    
    @dsl.component(base_image="python:3.10-slim-buster", packages_to_install=["dill"])
    def step_2_fn(input_context_path: Input[Dataset], output_context_path: Output[Dataset]):
        import dill
        dill.load_session(input_context_path.path)
        print(a)
        dill.dump_session(output_context_path.path)
    
    这种写法下Vertex运行时会自动完成上下游路径的映射,不需要手动处理GCS路径拼接,编译后Vertex可以正确识别制品依赖,不会出现参数值为空的问题。
  2. 手动固定GCS路径传递
    如果不想使用内置Artifact类型,可以在流水线层面固定大文件的GCS存储路径,将路径作为普通字符串参数在组件间传递,组件内部直接读写对应GCS路径即可,注意要提前给服务账号开通对应GCS路径的读写权限,这种方式适合需要自定义文件存储结构的场景。

内容的提问来源于stack exchange,提问作者aronchick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:42:14