如何通过REST API触发AWS SageMaker中内置模型的容器执行?
实现通过REST API触发SageMaker中内置模型的Docker镜像执行
1. 调整Docker镜像适配SageMaker端点规范
SageMaker端点要求镜像必须实现特定HTTP接口(默认是/invocations和/ping),才能让SageMaker正确调度你的应用:
- 添加轻量Web服务(比如Flask、FastAPI),监听容器8080端口
- 实现
/ping接口:返回200状态码,用于SageMaker健康检查 - 实现
/invocations接口:处理外部请求、执行内置模型逻辑并返回结果
示例Flask代码片段:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/ping', methods=['GET']) def ping(): return '', 200 @app.route('/invocations', methods=['POST']) def invocations(): # 替换为你的实际业务逻辑 input_data = request.get_json() result = your_built_in_model_process(input_data) return jsonify(result), 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
更新Dockerfile的启动命令,确保启动该Web服务:
# 保留原有镜像配置 COPY app.py /app/ WORKDIR /app CMD ["python", "app.py"]
重新构建镜像并推送至ECR。
2. 创建SageMaker模型资源
即便模型内置在镜像中,仍需创建SageMaker模型资源关联你的ECR镜像:
- 进入SageMaker控制台「模型」页面,点击「创建模型」
- 填写模型名称,在「容器」部分选择「提供模型数据和镜像位置」
- 输入你的ECR镜像完整路径(格式:
[AWS账号ID].dkr.ecr.[区域].amazonaws.com/[镜像名]:[标签]) - 选择具备ECR访问、SageMaker操作权限的IAM角色
- 完成模型创建
3. 创建端点配置与端点
- 进入「端点配置」页面,点击「创建端点配置」
- 填写配置名称,添加刚创建的模型,选择匹配应用需求的实例类型(如
t2.medium)和实例数量 - 完成配置后,进入「端点」页面,点击「创建端点」,选择上述配置完成创建
4. 通过REST API触发镜像执行
端点创建完成后,可通过AWS SDK或直接调用SageMaker的InvokeEndpoint API触发执行:
- AWS CLI示例:
aws sagemaker-runtime invoke-endpoint \ --endpoint-name [你的端点名称] \ --content-type application/json \ --body '{"input": "测试数据"}' \ output.json
- Python boto3示例:
import boto3 client = boto3.client('sagemaker-runtime') response = client.invoke_endpoint( EndpointName='[你的端点名称]', ContentType='application/json', Body=b'{"input": "测试数据"}' ) result = response['Body'].read().decode('utf-8')
可选优化
- 搭配API Gateway:创建API Gateway资源转发请求到SageMaker端点,外部用户可通过更简洁的URL调用,无需处理AWS签名
- 配置自动扩缩容:在端点配置中设置扩缩策略,根据请求量自动调整实例数量,平衡性能与成本
内容的提问来源于stack exchange,提问作者Temp O'rary
相关产品推荐
相关产品推荐

