如何使用AWS SageMaker Batch Transform运行更大的批处理

时间:2018-10-04 14:20:58

标签: xgboost amazon-sagemaker

我使用AWS SageMaker创建了XGBoost模型。现在,我正在尝试通过“批处理转换作业”来使用它,对于小批处理来说一切都很好。

但是,〜16MB的文件中有60万行的批处理量更大,我无法一次运行它。我尝试了两件事:

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字节)。

有什么想法或者我做错了什么,或者如何进行更大的批量生产?

3 个答案:

答案 0 :(得分:2)

大多数SageMaker算法在MaxPayloadInMB中使用6 MB设置其自己的默认执行参数,因此,如果从SageMaker算法中获得413,则可能超出了它们可以支持的最大有效负载。假设文件中的每一行少于6 MB,则可以通过以下方式解决此问题:将MaxPayloadInMB保留为未设置为回退到算法的默认大小,然后将SplitType设置为“ Line”,以便将数据拆分为较小的批处理({{3} }。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我尝试了上述解决方案,但不幸的是,它们对我没有用。

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

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