Kubeflow KFP v2.x中示例代码触发TypeError的原因排查
KFP v2.x 加法示例报错原因及错误触发条件
问题场景
使用依赖版本:kfp==2.8.0(及2.7.0)、kfp-pipeline-spec==0.3.0、kfp-server-api==2.0.5,运行Kubeflow官方加法管道示例代码时,首次定义管道触发如下错误:
TypeError: Artifacts must have both a schema_title and a schema_version, separated by
@. Got: float
报错原因
这个错误核心是组件参数类型标注不符合KFP v2.x的规范。如果官方加法示例是基于KFP v1.x编写的,会直接用原生Python类型(如float)作为组件输入输出类型,但KFP v2.x对类型标注的要求更严格:
- 若参数是普通数值/字符串(Parameter类型),部分过渡版本(如2.7.0/2.8.0)必须显式标注为
Parameter[类型]; - 若误将原生类型当作Artifact类型处理,KFP会要求其具备
schema_title和schema_version,而原生类型没有这些属性,因此触发报错。
错误写法示例:
@component def add(a: float, b: float) -> float: return a + b
修正后的写法:
from kfp.dsl import component, Parameter @component def add(a: Parameter[float], b: Parameter[float]) -> Parameter[float]: return a + b
KFP v2.0.0+下该错误的普遍触发条件
- 未显式标注基础类型为Parameter:直接用
int/float/str等原生类型作为组件输入输出,KFP类型推断逻辑将其误判为Artifact类型,导致缺少schema信息。 - 自定义Artifact类未配置schema:自定义Artifact时未定义
schema_title和schema_version属性,或标注时未使用@分隔的schema标识(如CustomArtifact@v1)。 - 依赖版本不兼容:
kfp、kfp-pipeline-spec等依赖版本不匹配,导致类型处理逻辑冲突,引发错误。 - 错误将Parameter声明为Artifact:比如使用
Input[float]而非Input[Parameter[float]],KFP会把float当作Artifact处理,进而要求schema信息。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

