如何使用AWS Batch Transform高效处理大规模数据集
解决方案
格式转换与IO损耗问题处理
不需要提前做Excel到JSON的格式转换,直接基于SageMaker的自定义输入处理逻辑做流式解析即可:
- 原始Excel文件直接上传到S3作为Batch Transform的输入源,不需要做前置格式转换
- 如果你使用SageMaker内置框架容器,直接重写
input_fn函数,在内存中完成Excel解析,无磁盘IO损耗,示例代码如下:
def input_fn(input_data, content_type): # 匹配Excel格式的content-type if content_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": import pandas as pd from io import BytesIO # 直接从二进制流读取Excel,不需要落地磁盘 df = pd.read_excel(BytesIO(input_data), engine="openpyxl") # 转换为模型所需的输入格式后返回 return df.to_numpy() # 保留原有其他格式的处理逻辑 ...
- 如果你使用自定义推理容器,直接在serve入口里加入二进制流解析Excel的逻辑即可,逻辑和上面一致。
大payload效率问题处理
GB级批量推理不要用实时Endpoint,直接使用SageMaker Batch Transform即可规避HTTP payload限制:
- Batch Transform本身支持单输入文件最大TB级,不需要拆分为数MB的小分片,完全避免小分片请求的 overhead
- 可根据数据量调整批量处理实例数量、
MaxConcurrentTransforms并行度参数,实现多实例分布式并行处理,大幅提升吞吐量。
Pipe Mode推理场景适配说明
Pipe Mode目前仅原生支持训练场景,无需强行适配推理场景,现有方案已经可以满足性能需求:
- 如果需要类Pipe Mode的流式处理能力,可以使用SageMaker异步推理,它支持最大5GB的单输入文件,输入输出直接对接S3,内部采用流式拉取逻辑,和Pipe Mode的运行逻辑接近,适合大批次离线推理场景
- 也可以在推理容器中直接通过
boto3的get_object接口获取S3文件的StreamingBody,自行实现边拉取边处理的流式逻辑,效果和Pipe Mode一致,不需要依赖平台原生的Pipe Mode能力。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

