如何在AWS Sagemaker中通过Flask部署基于CSV预计算结果的自定义模型端点
针对SageMaker预计算CSV结果部署端点的解决方案
核心结论
- 可以创建基于预计算CSV文件提供查询结果的SageMaker模型端点,无需依赖sklearn/TensorFlow/PyTorch等主流框架
- 完全支持通过Flask应用在SageMaker中实现该需求,可选择轻量脚本模式或自定义容器两种路径落地
具体实现方案
方案1:轻量无框架实现(无需额外封装Flask)
直接使用SageMaker官方提供的通用Python容器,仅需编写推理脚本即可完成部署,步骤如下:
- 将生成的结果CSV文件上传到S3存储桶,记录存储路径如
s3://<你的桶名>/<路径>/result.csv - 编写推理脚本
inference.py,实现4个核心函数即可:model_fn(model_dir):从容器内的模型目录读取CSV文件,转换为以id为键、对应结果为值的字典加载到内存,避免每次请求重读文件input_fn(request_body, request_content_type):解析请求传入的id参数,支持JSON/表单等多种请求格式predict_fn(input_data, model):根据传入的id从预加载的结果字典中查询对应值output_fn(prediction, accept):将查询结果转换为请求要求的返回格式(如JSON、CSV)
- 使用SageMaker的
PyTorchModel/SKLearnModel(仅用其容器,不需要用到对应框架)或者通用的Model类关联S3的CSV文件和推理脚本,直接部署端点即可
方案2:Flask自定义容器实现方案
如果需要完全自定义服务逻辑,可以自行封装Flask容器部署,满足SageMaker的容器规范即可:
- 编写Flask应用,必须满足两个路由要求:
- 实现
GET /ping接口:返回200状态码,用于SageMaker做服务健康检查 - 实现
POST /invocations接口:接收请求中的id参数,查询CSV对应结果后返回
- 实现
- 容器配置要求:
- Flask服务监听
0.0.0.0的8080端口 - 可以将CSV直接打包到容器镜像,也可以在容器启动时从S3下载到本地
- Flask服务监听
- 将构建好的容器镜像推送到Amazon ECR,之后按照SageMaker自定义模型的部署流程创建模型、端点配置、运行端点即可
注意事项
- 若结果CSV体积超过1G,建议提前转换为序列化字典或者Parquet格式存储,降低内存占用、提升加载速度
- 高并发场景建议配置合适的实例规格,或者开启端点自动扩缩容保障可用性
- CSV结果有更新需求时,可以直接更新端点关联的模型文件,无需重建整套服务
内容的提问来源于stack exchange,提问作者Gene Xu
相关产品推荐
相关产品推荐

