AWS Lambda调用SageMaker端点超时问题求助
问题描述
创建AWS Lambda函数调用SageMaker端点返回模型预测,已为Lambda关联的IAM角色附加SageMaker调用端点的策略,但Lambda调用时出现任务超时错误(超时时间90秒)。在Notebook实例中运行相同逻辑可正常获取预测,Lambda中无输出。
相关代码:
import os import boto3 import json import csv # grab environment variables ENDPOINT_NAME = os.environ['ENDPOINT_NAME'] runtime= boto3.client('runtime.sagemaker') def lambda_handler(event,context): #print("Received event: " + json.dumps(event, indent=2)) data = json.loads(json.dumps(event)) payload = data['data'] #print("payload:"+payload) #print("ENDPOINT NAME :"+ENDPOINT_NAME) response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='text/csv', Body=payload) print(response) result = json.loads(response['Body'].read().decode()) return result
错误信息:
{ "errorMessage": "2023-03-04T00:49:45.554Z 38fee791-8b05-49e2-ab69-3035af43e499 Task timed out after 90.09 seconds" }
解决方案
1. 调整Lambda超时时间配置
Lambda默认超时为3秒,当前90秒仍超时说明SageMaker端点的预测耗时超过该阈值:
- 进入Lambda控制台,在目标函数的配置 > 常规配置中修改超时时间,最大值可设置为15分钟。
- 若预测耗时确实过长,建议改用SageMaker异步端点调用,避免Lambda长期阻塞等待。
2. 优化SageMaker端点性能
- 检查端点实例规格:若使用小规格实例(如
t2.medium),可升级至高性能实例(如ml.c5.xlarge)提升处理速度。 - 查看SageMaker控制台的端点监控指标(
ModelLatency、InvocationLatency),确认端点自身的响应耗时是否超过Lambda超时限制。 - 若存在冷启动延迟,可启用端点的持续实例运行,或通过定时发送预热请求避免冷启动。
3. 排查Lambda网络配置
- 若SageMaker端点部署在私有VPC中:
- 确保Lambda所在安全组允许出站访问SageMaker端点的安全组,以及访问S3(若模型数据存放在S3)和AWS服务端点的权限。
- 确认Lambda配置了正确的VPC子网和安全组,或配置VPC端点允许Lambda访问SageMaker服务。
- 若端点为公开访问,检查Lambda是否能正常解析SageMaker端点域名,可添加简单的网络连通性测试代码验证。
4. 精简代码逻辑
- 移除冗余代码:
data = json.loads(json.dumps(event))无意义,直接使用payload = event['data']即可,减少序列化开销。 - 添加客户端超时参数:创建
boto3客户端时设置连接和读取超时,提前捕获超时异常:runtime = boto3.client('runtime.sagemaker', config=boto3.client.Config( connect_timeout=30, read_timeout=30 )) - 开启日志输出:取消代码中注释的
print语句,查看Lambda的CloudWatch日志,确认请求是否成功发送到SageMaker,排查隐藏错误。
5. 验证IAM权限细节
- 确认Lambda的IAM角色策略包含
sagemaker:InvokeEndpoint动作,且资源范围覆盖目标端点ARN(可临时用*测试权限范围)。 - 注意:SageMaker端点自身的执行角色需具备访问模型依赖资源(如S3)的权限,与Lambda角色权限无关。
内容的提问来源于stack exchange,提问作者Tejaswi Boni
相关产品推荐
相关产品推荐

