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

创建AWS SageMaker Pipeline报DataSplitPercent未知属性引用错误

问题描述

创建AWS SageMaker Pipeline时,2个月前同逻辑管道可正常运行,当前执行pipeline.upsert(role_arn=role)操作时报以下错误:

ClientError: An error occurred (ValidationException) when calling the CreatePipeline operation: Unknown property reference [Parameters.DataSplitPercent].

涉及的核心代码片段如下:

Input_data =ParameterString(name="InputDataUrl",default_value=f"s3://akgargbucket/iris.data")
data_split_percent = ParameterFloat(name="DataSplitPercent", default_value=0.7)

# sklearn_processor初始化逻辑省略
step_process = ProcessingStep(
    name="ReadAndEncodeData",
    processor=sklearn_processor,
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test"),
    ],
    code=os.path.join(BASE_DIR, "preprocess.py"),
    job_arguments=["--input-data", input_data,
    "--data_split_percent",data_split_percent])
报错原因

这个错误的本质是SageMaker Pipeline服务端做配置校验时,无法识别步骤中引用的Parameters.DataSplitPercent参数,核心诱因是SDK版本迭代带来的写法变更:

  • 2个月前使用的低版本SageMaker Python SDK(一般是v2.130.0之前的版本),会在初始化Pipeline时自动遍历所有步骤里引用的Parameter对象,隐式收集到管道参数列表中,不需要手动声明,因此当时代码可以正常运行。
  • 近期SDK升级后移除了这个隐式收集逻辑,要求用户必须显式把所有用到的管道参数传入Pipeline对象的parameters入参,未显式注册的参数会被服务端判定为无效引用,抛出校验错误。
  • 除此之外,变量名拼写不一致、代码中混入无效格式字符也可能触发同类错误。
排查解决步骤
  • 第一步:显式注册所有管道参数
    检查Pipeline实例化代码,把你定义的所有Parameter对象都显式传入parameters列表,参考写法如下:
    from sagemaker.workflow.pipeline import Pipeline
    
    # 统一变量名,修正原代码中Input_data/input_data大小写不一致的问题
    input_data = ParameterString(name="InputDataUrl",default_value=f"s3://akgargbucket/iris.data")
    data_split_percent = ParameterFloat(name="DataSplitPercent", default_value=0.7)
    
    # 省略sklearn_processor、step_process的初始化逻辑
    
    # 初始化管道时显式传入所有参数和步骤
    pipeline = Pipeline(
        name="your-pipeline-name",
        parameters=[
            input_data,
            data_split_percent, # 之前漏传该参数就会触发本次报错
            # 其余自定义参数全部添加到此处
        ],
        steps=[step_process],
        sagemaker_session=sagemaker_session
    )
    
    # 重新执行upsert即可
    pipeline.upsert(role_arn=role)
    
  • 第二步:排查引用一致性问题
    检查所有参数引用位置,确认没有两类错误:
    • 参数定义时的name属性大小写、拼写和引用路径完全一致,比如定义name为DataSplitPercent,就不能在其他位置引用Parameters.data_split_percent
    • 变量名拼写统一,比如原代码中参数定义写的是大写开头的Input_data,job_arguments里传的是小写开头的input_data,属于未定义变量引用,会连带导致参数解析失败。
  • 第三步:清理无效字符
    检查代码中是否混入了<br/>这类HTML换行标签,这类不属于Python语法的字符会导致参数定义解析异常,直接删除即可。
  • 第四步:确认SDK版本
    执行pip show sagemaker查看本地SDK版本,v2.130.0及以上版本必须遵循显式传参的要求,不要依赖旧版本的隐式参数收集逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:51:44