VertexAI Pipeline:自定义KFP组件输出如何作为谷歌云管道组件输入
问题根因分析
AutoMLTabularTrainingJobRunOp的dataset参数要求传入**Vertex AI托管数据集(Managed Dataset)**的资源ID,格式为projects/{project}/locations/{region}/datasets/{dataset_id}。你在自定义组件中输出的是KFP标准system.Dataset类型制品,其资源记录存储在Vertex AI元数据存储中,格式为projects/{project}/locations/{region}/metadataStores/default/artifacts/{artifact_id},你之前观察到的元数据路径是KFP制品的元数据记录路径,资源类型段为artifacts,而AutoML组件要求的是Vertex AI数据集服务的托管资源路径,资源类型段为datasets,二者属于完全不同的资源类型,因此参数校验不通过抛出错误。
可行解决方案
有两种成熟方案可以解决这个问题,按需选择即可:
方案1:直接传入CSV文件路径(推荐,无需额外步骤)
AutoMLTabularTrainingJobRunOp原生支持直接读取GCS存储的CSV文件作为训练输入,不需要提前创建托管数据集,只需替换入参即可:
training_op = gcc_aip.AutoMLTabularTrainingJobRunOp( project=project, display_name="train-automl-task", optimization_prediction_type="classification", column_transformations=[ "<nested_dict>", ], # 删掉原来的dataset参数,替换为GCS源路径参数 gcs_source_uris=[df.outputs["dataset"].uri], target_column="class", budget_milli_node_hours=1000, )
这种方案省去了托管数据集的创建步骤,流程更简洁,适合大多数场景。
方案2:显式创建Vertex AI托管数据集
如果你确实需要使用托管数据集能力(比如数据集复用、权限管控等),可以在两个步骤之间新增一步,将你输出的CSV导入为Vertex AI托管表格数据集:
# 新增创建托管数据集的步骤 create_managed_dataset_op = gcc_aip.TabularDatasetCreateOp( project=project, display_name="training-dataset", gcs_source=df.outputs["dataset"].uri ) # 训练组件传入托管数据集的输出 training_op = gcc_aip.AutoMLTabularTrainingJobRunOp( project=project, display_name="train-automl-task", optimization_prediction_type="classification", column_transformations=[ "<nested_dict>", ], dataset=create_managed_dataset_op.outputs["dataset"], target_column="class", budget_milli_node_hours=1000, )
内容的提问来源于stack exchange,提问作者Marco Abbatangelo
相关产品推荐
相关产品推荐

