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

使用SageMaker Python SDK流水线注册模型遇类型错误求解决方案

解决方案

错误原因

在SageMaker Pipeline上下文环境中,Model对象的model_data参数使用了来自训练步骤的Pipeline变量(step_train.properties.ModelArtifacts.S3ModelArtifacts),当调用model.register()时,底层的Botocore序列化逻辑会尝试对该变量执行*str*操作,但Pipeline变量不支持此方法,从而抛出错误。

修复步骤

  • 修改Model对象的model_data参数:
    将model_data的Pipeline变量通过.to_string()方法转换为执行时可解析的字符串表达式,避免序列化时触发*str*操作。

    修改后的Model创建代码:

    model = Model(
        image_uri=image_uri,
        model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts.to_string(),
        sagemaker_session=sagemaker_session,
        role=role,
    )
    
  • 验证其他Pipeline变量(如model_metrics):
    如果model_metrics中使用了来自评估步骤的Pipeline变量(比如模型统计文件的S3路径),同样需要对这些变量调用.to_string()方法,示例:

    model_metrics = ModelMetrics(
        model_statistics=MetricsSource(
            s3_uri=step_eval.properties.EvaluationMetrics.S3EvaluationOutputPath.to_string(),
            content_type="application/json"
        )
    )
    
  • 保留原有注册逻辑:
    后续的model.register()和ModelStep代码无需修改,保持原逻辑即可:

    model_register = model.register(
        content_types=["text/csv"],
        response_types=["text/csv"],
        model_metrics=model_metrics,
        inference_instances=["ml.t2.medium", "ml.m5.large"],
        transform_instances=["ml.m5.large"],
        approval_status="PendingManualApproval",
        model_package_group_name="ReturnModelPackage",
    )
    
    step_model_register = ModelStep(
        name="ReturnModelRegister", step_args=model_register
    )
    

原理说明

.to_string()方法会将Pipeline变量转换为一个特殊的表达式字符串,SageMaker Pipeline在执行阶段会自动解析该表达式,获取对应的实际S3路径值,既满足了Pipeline变量的传递需求,又避免了序列化时的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:28:11