【问题标题】:How to run a bigger batch with AWS SageMaker Batch Transform如何使用 AWS SageMaker Batch Transform 运行更大的批次
【发布时间】:2020-11-27 15:47:45
【问题描述】:

我使用 AWS SageMaker 创建了一个 XGBoost 模型。现在我正在尝试通过 Batch Transform Job 使用它,对于小批量来说一切都很好。

但是,在约 16MB 的文件中有稍大的一批 600.000 行,我无法一次性运行它。我尝试了两件事:

1.

将转换作业的“最大负载大小”设置为最大值 (100 MB):

transformer = sagemaker.transformer.Transformer(
    model_name = config.model_name,
    instance_count = config.inference_instance_count,
    instance_type = config.inference_instance_type,
    output_path = "s3://{}/{}".format(config.bucket, config.s3_inference_output_folder),
    sagemaker_session = sagemaker_session,
    base_transform_job_name = config.inference_job_prefix,
    max_payload = 100
    )

但是,我仍然收到错误消息(通过控制台 CloudWatch 日志):

413 Request Entity Too Large
The data value transmitted exceeds the capacity limit.

2.

将 max_payload 设置为 0,根据规范,Amazon SageMaker 应将其解释为对有效负载大小没有限制。

在这种情况下,作业成功完成,但输出文件为空(0 字节)。

有什么想法是我做错了什么,或者如何运行更大的批次?

【问题讨论】:

  • 您解决了这个问题吗?我的批量预测输出不断输出 0 字节对象。我已经尝试过底层解决方案。还是不行……

标签: xgboost amazon-sagemaker


【解决方案1】:

大多数 SageMaker 算法在 MaxPayloadInMB 中设置自己的默认执行参数为 6 MB,因此如果您从 SageMaker 算法中获得 413,您可能会超过它们可以支持的最大负载。假设文件中的每一行小于 6 MB,您可以通过取消设置 MaxPayloadInMB 以回退到算法的默认大小并将 SplitType 设置为“Line”来解决此问题,这样它就可以将数据拆分成更小的批次 (https://docs.aws.amazon.com/sagemaker/latest/dg/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType) .

【讨论】:

    【解决方案2】:

    这通过在transformer 中设置strategy='SingleRecord' 帮助我解决了这个问题+ 您还可以通过instance_type 添加更强大的实例并通过instance_count 分发。

    【讨论】:

    • 我试过这个方法,但是.transform()进程返回“Internal server error”...你有没有遇到过这个错误?
    【解决方案3】:

    我已经尝试了上述解决方案,但不幸的是它们对我不起作用。

    这对我有用:https://stackoverflow.com/a/55920737/7091978

    基本上,我将“max_payload”从 0 设置为 1。

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2021-02-12
      • 2020-02-08
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多