如何处理Sagemaker Batch Transform丢弃模型请求失败的文件



我有大量JSON请求,请求在S3存储桶中的多个文件中拆分一个模型。我想使用Sagemaker的Batch Transform功能来处理所有这些请求(我已经使用少量数据进行了几次测试,转换工作成功了(。我的主要问题在这里(https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html#batch-转换错误(,特别是:

如果批处理转换作业因数据集问题而无法处理输入文件,SageMaker会将该作业标记为失败。如果输入文件包含错误记录,则转换作业不会为该输入文件创建输出文件,因为这样做会阻止它在转换后的数据中保持与输入文件中相同的顺序。当数据集有多个输入文件时,即使无法处理一个输入文件,转换作业也会继续处理输入文件。处理后的文件仍然会生成可用的结果。

这是不可取的,主要是因为如果在一个有大量请求的文件中有一个请求失败(无论是暂时错误、异常请求还是模型容器有问题(,所有这些请求都将被丢弃(即使所有请求都成功,最后一个失败(。理想情况下,我更希望Sagemaker只将失败响应的输出写入文件并继续执行,而不是丢弃整个文件。

我的问题是,有什么建议可以缓解这个问题吗?我想在S3中为每个文件存储一个请求,但这似乎有点可笑?即使我这样做了,有没有一个好的方法可以查看哪些请求在转换作业完成后特别失败?

您的想法是正确的:每个文件中的数据点越少,给定文件失败的可能性就越小。问题是,虽然您可以将带有多个文件的前缀传递给CreateTransformJob,但为每个文件分区一个数据点至少需要每个数据点读取S3,再加上每个数据点调用模型,这可能不太好。还要注意,显然存在隐藏的利率限制。

这里有几个选项:

  1. 分区到小的ish文件中,并在很少发生故障时进行计划。希望没有多少数据点会真正失败。如果您将数据集划分为例如100个文件,那么一次失败只需要重新处理1%的数据。请注意,Sagemaker也有内置的重试,所以大多数时间的失败应该是由您的数据/逻辑引起的,而不是Sagemakeer方面的随机性。

  2. 直接处理模型中的故障。你在问题中引用的同一位医生也说:

如果使用自己的算法,当算法在输入文件中发现错误记录时,可以使用占位符文本,如ERROR。例如,如果数据集中的最后一条记录不正确,则算法会将该记录的占位符文本放置在输出文件中。

请注意,Batch Transform导致整个文件失败的原因是为了在输入和输出中的行之间保持1-1的映射。如果您可以用模型内部的错误消息替换失败数据点的输出,而不会导致模型本身处理失败,Batch Transform将非常高兴。

最新更新