我使用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字节)。
有什么想法或者我做错了什么,或者如何进行更大的批量生产?
答案 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。