繁体   English   中英

如何处理 Sagemaker 批量转换丢弃带有失败 model 请求的文件

[英]How to handle Sagemaker Batch Transform discarding a file with a failed model request

我有大量 JSON 请求 model 拆分为 S3 存储桶中的多个文件。 我想使用 Sagemaker 的批量转换功能来处理所有这些请求(我使用少量数据进行了几次测试,转换作业成功)。 我的主要问题在这里 ( https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html#batch-transform-errors ),具体来说:

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

这不是可取的,主要是因为如果在包含大量请求的文件中有 1 个请求失败(无论是暂时性错误、格式错误的请求还是 model 容器有问题),所有这些请求都将被丢弃(即使所有请求都被丢弃)其中一个成功了,最后一个失败了)。 理想情况下,我希望 Sagemaker 只将失败响应的 output 写入文件并继续,而不是丢弃整个文件。

我的问题是,是否有任何缓解此问题的建议? 我正在考虑在 S3 中为每个文件存储 1 个请求,但这似乎有些荒谬? 即使我这样做了,是否有一种好方法可以在转换作业完成后查看具体失败的请求?

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

这里有几个选项:

  1. 分区成小文件,并计划故障很少见。 希望您的数据点实际上不会失败。 如果您将数据集划分为 100 个文件,那么一次故障只需要重新处理 1% 的数据。 请注意,Sagemaker 也有内置重试,因此大多数时候失败应该是由您的数据/逻辑引起的,而不是 Sagemaker 方面的随机性。

  2. 直接在您的 model 中处理故障。您在问题中引用的同一文档还说:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM