You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon SageMaker图像分类:如何对S3中百万级图片执行推理?

解决方案:处理百万级RecordIO格式图片的SageMaker图像分类推理

我来帮你梳理下针对这个场景的可行方案,毕竟100万张图的规模不小,得兼顾效率和成本:

方案一:批量转换RecordIO为单张图片,用异步推理/批量推理处理

这是最省心的路径,适合不想折腾推理脚本的情况:

  • 先把S3上的RecordIO文件下载到SageMaker Notebook实例里(比本地下载快得多,还省流量费),然后用im2rec.py反向提取图片:运行python im2rec.py --unpack your_recordio_file.rec ./extracted_images,就能把RecordIO里的所有图片拆成单张JPG/PNG。
  • 把提取好的图片文件夹同步回S3的指定路径(比如s3://your-bucket/inference-images/)。
  • 选择两种高效处理方式:
    • 异步推理:创建端点后,提交包含S3图片路径的请求,SageMaker会后台批量处理,结果自动存回你指定的S3位置,不用一直等待。
    • 批量转换作业:直接配置输入输出的S3路径,一次性触发百万级图片的推理,不用维护持久端点,成本更划算。

方案二:自定义推理脚本,让端点支持RecordIO输入

如果不想转换图片格式,可以修改推理脚本,让端点能直接解析RecordIO格式的请求:

  • 找到你训练输出的model.tar.gz文件,解压后找到inference.py(这是内置算法的推理入口脚本)。
  • 修改input_fn函数:默认的input_fn只处理application/x-image,你需要添加对application/x-recordio的解析逻辑。示例修改片段:
    import mxnet as mx
    from io import BytesIO
    
    def input_fn(request_body, request_content_type):
        if request_content_type == 'application/x-image':
            # 保留原有处理单张图片的逻辑
            img = mx.image.imdecode(request_body)
            return mx.image.resize_short(img, 256)
        elif request_content_type == 'application/x-recordio':
            # 解析RecordIO格式的批量输入
            recordio_iter = mx.io.RecordIOIter(
                path_imgrec=BytesIO(request_body),
                data_shape=(3, 224, 224),  # 匹配你的ResNet18模型输入尺寸
                batch_size=64  # 根据实例资源调整批量大小
            )
            return recordio_iter
        else:
            raise ValueError(f"Unsupported content type: {request_content_type}")
    
  • 同时调整predict_fn,让它能处理批量的RecordIO数据,返回每张图片的分类结果(比如把批量推理结果转换成JSON格式)。
  • 把修改后的inference.py和原模型文件重新打包成model.tar.gz,上传到S3,然后用这个自定义模型创建端点。
  • 调用端点时,指定Content-Type: application/x-recordio,直接把RecordIO文件的内容作为请求体发送(大文件建议用S3路径传递,避免请求体过大)。

方案三:用SageMaker Processing作业批量处理

如果既不想转换图片,也不想修改端点,可以用SageMaker Processing作业一次性处理:

  • 创建一个Processing作业,选用你训练时用的ResNet18镜像(或MXNet官方镜像)。
  • 编写Processing脚本:读取S3上的RecordIO文件,加载训练好的模型,批量推理每张图片,把分类结果保存到指定的S3路径。
  • 这种方式不需要创建持久端点,一次性完成百万级数据处理,成本可控。

关键注意事项

  • 针对百万级数据,优先考虑异步推理、批量转换或Processing作业,绝对别用实时端点逐个调用,否则会产生极高的成本和延迟。
  • 如果选择自定义推理脚本,要根据实例类型(GPU/CPU)调整批量大小,避免内存溢出。
  • 所有操作尽量在SageMaker生态内完成,利用S3的存储和SageMaker的计算资源,减少数据传输的成本和时间。

内容的提问来源于stack exchange,提问作者Bow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:52:48