在Amazon SageMaker中使用TensorFlow Serving进行批量推理(2026-09-13)
为什么批量推理依然重要?
实时推理很酷,但很多业务场景其实更适合批量推理:每天凌晨处理百万级用户画像、每周跑一次商品推荐、每月做一次风险评分。这些任务不需要毫秒级响应,却要求高吞吐、低成本、可重复。
Amazon SageMaker 结合 TensorFlow Serving,正好能帮你优雅地完成这类工作。
核心思路:把模型交给 TensorFlow Serving
TensorFlow Serving 是 Google 专为生产环境设计的模型服务系统。在 SageMaker 中,你可以直接使用预置的 TensorFlow Serving 容器,无需自己搭建 HTTP 服务。
关键步骤
- 训练并保存模型:使用
tf.keras训练后,用model.save('model/1')保存为 SavedModel 格式(注意版本号目录)。 - 上传模型到 S3:
tar.gz打包后上传。 - 创建 SageMaker 模型:指定
sagemaker-tensorflow-serving镜像。 - 创建批量转换任务:调用
transformer.transform(),指定输入 S3 路径、输出路径、实例类型和数量。
一个真实案例
某电商团队要对 200 万用户做流失预测。模型是 3 层 DNN,输入 128 维特征。他们使用 ml.m5.4xlarge 实例(4 个),批量转换任务耗时 18 分钟,成本约 0.72 美元。如果改用实时端点,同样数据量需要持续运行 4 小时,成本超过 8 美元。
实用建议
- 输入格式:批量转换默认按行读取 JSON 或 CSV。建议每行一个 JSON 对象,键名与模型签名一致。
- 分片策略:SageMaker 会自动将输入文件分片给多个实例。如果单个文件太大,建议提前拆成多个小文件(如每文件 10MB)。
- 实例选择:CPU 实例(如
ml.c5)通常比 GPU 更划算,除非模型是大型 Transformer。 - 监控:在 CloudWatch 中查看
Invocations和ModelLatency,判断是否需要调整实例数。
常见坑
- 模型版本目录必须是数字,如
1,否则 TensorFlow Serving 会忽略。 - 输出文件默认是
.out,需要自己解析。建议在transform()中指定accept和content_type。 - 批量转换任务不会自动删除中间数据,记得设置 S3 生命周期策略。
行动起来
现在就打开你的 SageMaker 控制台,找一个已训练好的 TensorFlow 模型,试着跑一次批量转换。你会惊讶于它的简洁和高效。
小任务:用 1000 条样本数据,在 10 分钟内完成一次批量推理,并对比实时端点的成本。
免责声明:本文内容基于公开文档和常见实践,不构成任何商业或技术决策的唯一依据。实际使用前请参考 AWS 官方最新文档,并测试验证。