Amazon SageMaker Pipeline中ModelPackage调用Lambda输出ARN报错排查
问题解决:SageMaker Pipeline中LambdaStep输出传入ModelPackage报错
AttributeError: 'Properties' object has no attribute 'split' 问题原因
LambdaStep的properties.Outputs["ModelPackageArn"]返回的是动态Pipeline变量对象(Properties类型),而非直接的字符串。ModelPackage的create方法会对model_package_arn参数执行字符串操作(如split),但该对象不具备字符串方法,因此触发报错。
解决方案
方案1:使用get_output获取字符串类型的输出引用
将model_package_arn的赋值移到model1.create()方法中,通过LambdaStep的get_output方法获取正确的字符串变量引用:
# 初始化ModelPackage时不指定model_package_arn model1 = ModelPackage( sagemaker_session=pipeline_session, role=role, ) model1_step_create_model = ModelStep( name="model1_CreateModel", depends_on=[model1_step_latest_model_fetch], step_args=model1.create( instance_type='ml.m5.large', accelerator_type='ml.eia1.medium', # 通过get_output获取字符串类型的ARN变量 model_package_arn=model1_step_latest_model_fetch.get_output("ModelPackageArn") ) )
方案2:使用Join构造字符串变量(适用于需要格式拼接的场景)
如果需要对输出做简单格式处理,可通过Join函数将Properties对象转换为Pipeline可解析的字符串类型:
from sagemaker.workflow.functions import Join model1 = ModelPackage( sagemaker_session=pipeline_session, role=role, ) model1_step_create_model = ModelStep( name="model1_CreateModel", depends_on=[model1_step_latest_model_fetch], step_args=model1.create( instance_type='ml.m5.large', accelerator_type='ml.eia1.medium', model_package_arn=Join(on="", values=[model1_step_latest_model_fetch.properties.Outputs["ModelPackageArn"]]) ) )
额外检查项
确保你的Lambda函数返回的JSON格式正确,必须包含ModelPackageArn字段且值为合法的ARN字符串,示例返回格式:
{ "ModelPackageArn": "arn:aws:sagemaker:us-east-1:123456789012:model-package/my-model-group/1" }
内容的提问来源于stack exchange,提问作者María Fernanda Coria Buendía
相关产品推荐
相关产品推荐

