AWS SageMaker多容器Pipeline Model端点部署失败排查求助
问题排查与解决方案
核心问题定位
从你提供的容器日志可以看到,gunicorn监听的是Unix Socket(unix:/tmp/gunicorn.sock),而SageMaker Pipeline Model的健康检查以及容器间通信依赖TCP端口。单独部署时SageMaker会自动处理端口映射,但Pipeline模式下,容器必须监听TCP端口才能被SageMaker的健康检查服务访问,同时保证容器间的请求转发正常。
具体修复步骤
- 修改gunicorn启动命令,将监听目标改为TCP端口,推荐使用SageMaker提供的
SAGEMAKER_BIND_TO_PORT环境变量(因为你已经添加了com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true标签,SageMaker会自动设置该变量):
如果未使用该环境变量,也可以直接绑定固定端口(如8080,SageMaker默认的推理端口):gunicorn --bind 0.0.0.0:$SAGEMAKER_BIND_TO_PORT your_app_module:appgunicorn --bind 0.0.0.0:8080 your_app_module:app - 确保健康检查端点(默认是
/ping)绑定在上述TCP端口上,并且返回状态码200。即使你的代码逻辑返回200,若监听的是Unix Socket,SageMaker的健康检查请求无法到达,仍会判定失败。 - 检查容器启动脚本,确认没有强制指定Unix Socket的配置,保证启动命令优先使用TCP端口监听。
额外验证点
- 重新构建两个容器镜像并推送至ECR,再尝试部署Pipeline Model。
- 部署后再次查看CloudWatch日志,确认gunicorn的监听地址变为类似
Listening at: http://0.0.0.0:8080的TCP端口格式。
内容的提问来源于stack exchange,提问作者Yogendra Yatnalkar
相关产品推荐
相关产品推荐

