使用批量转换 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用批量转换

当您需要执行以下操作时,请使用批量转换:

  • 预处理数据集以从数据集中删除可能干扰训练或推理的噪声或偏差。

  • 从大型数据集获取推理。

  • 当您不需要持续性终端节点时运行推理。

  • 将输入记录与推理相关联,以帮助解释结果。

要在执行推理前筛选输入数据,或要将输入记录与有关这些记录的推理相关联,请参阅将预测结果与输入记录关联。例如,您可以筛选输入数据,为创建和解释有关输出数据的报告提供上下文。

有关批量转换的更多信息,请参阅使用批量转换获取整个数据集的推理

使用批量转换从大型数据集获取推理

批量转换在指定参数的限制内自动管理大型数据集的处理。例如,假设您有一个数据集文件 input1.csv, 存储在 S3 存储桶中。输入文件的内容可能如下所示:

Record1-Attribute1, Record1-Attribute2, Record1-Attribute3, ..., Record1-AttributeM Record2-Attribute1, Record2-Attribute2, Record2-Attribute3, ..., Record2-AttributeM Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM ... RecordN-Attribute1, RecordN-Attribute2, RecordN-Attribute3, ..., RecordN-AttributeM

当批量转换作业启动时,SageMaker 会初始化计算实例,并在它们之间分配推理或预处理工作负载。批量转换按照键对输入中的 Amazon S3 对象进行分区,并将 Amazon S3 对象映射到实例。当您有多个文件时,一个实例可能处理 input1.csv,而另一个实例可能处理名为 input2.csv 的文件。

要将大型负载保持在 MaxPayloadInMB 限制以下,您可以将输入文件拆分为多个小批量。例如,您可以通过仅包含其中两个记录来从 input1.csv 创建一个小批量。

Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM Record4-Attribute1, Record4-Attribute2, Record4-Attribute3, ..., Record4-AttributeM
注意

SageMaker 单独处理每一个输入文件。它不会组合来自不同输入文件的小批次来符合 MaxPayloadInMB 限制。

要将输入文件拆分成小批量,当您创建批量转换作业时,请将 SplitType 参数值设置为 Line。 如果 SplitType 设置为 None,或者输入文件无法拆分成小批量,则 SageMaker 在单个请求中使用整个输入文件。

如果批量转换作业成功处理输入文件中的所有记录,它会创建一个文件扩展名为 .out 的同名输出文件。对于多个输入文件(如 input1.csvinput2.csv),输出文件命名为 input1.csv.outinput2.csv.out。 批量转换作业将输出文件存储在 Amazon S3 中的指定位置,例如 s3://awsexamplebucket/output/

输出文件中的预测按与输入文件中对应的记录相同的顺序列出。输出文件 input1.csv.out 的内容(基于早前显示的输入文件)如下所示。

Inference1-Attribute1, Inference1-Attribute2, Inference1-Attribute3, ..., Inference1-AttributeM Inference2-Attribute1, Inference2-Attribute2, Inference2-Attribute3, ..., Inference2-AttributeM Inference3-Attribute1, Inference3-Attribute2, Inference3-Attribute3, ..., Inference3-AttributeM ... InferenceN-Attribute1, InferenceN-Attribute2, InferenceN-Attribute3, ..., InferenceN-AttributeM

要将多个输出文件的结果合并为单个输出文件,请将 AssembleWith 参数设置为 Line

当输入数据非常大且通过 HTTP 分块编码进行传输时,要将数据流式传输到算法,请将 MaxPayloadInMB 设置为 0。Amazon SageMaker 内置算法不支持此功能。

有关使用 API 创建批量转换作业的信息,请参阅 CreateTransformJob API。有关批量转换输入和输出对象之间关联的更多信息,请参阅 OutputDataConfig。 有关如何使用批量转换的示例,请参阅(可选)使用批量转换进行预测

加快批量转换作业

如果您使用的是 CreateTransformJob API,则可以使用最佳的参数值来减少完成批量转换作业所需的时间,这些参数 MaxPayloadInMB MaxConcurrentTransforms BatchStrategy 如果您使用的是 SageMaker 控制台,则可以在 Batch transform job configuration (批量转换作业配置) 页面的 Additional configuration (其他配置) 部分中指定这些最佳参数值。SageMaker 会自动为内置算法找到最佳参数设置。对于自定义算法,请通过 execution-parameters 终端节点提供这些值。

使用批量转换测试生产变体

要测试不同的模型或各种超参数设置,请为每个新的模型变体创建单独的转换作业并使用验证数据集。对于每个转换作业,为输出文件指定一个唯一的模型名称及位于 Amazon S3 中的位置。要分析结果,请使用推理管道日志和指标

批量转换错误

SageMaker 使用 Amazon S3 分段上传 API 将批量转换作业的结果上传到 Amazon S3。如果出现错误,则系统会从 Amazon S3 中删除上传的结果。在某些情况下(如发生网络中断时),未完成的分段上传可能会保留在 Amazon S3 中。为避免产生存储费用,我们建议您将 S3 存储桶策略添加到 S3 存储桶生命周期规则中。此策略会删除可能存储在 S3 存储桶中的未完成分段上传。有关更多信息,请参阅对象生命周期管理

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

超过 MaxPayloadInMB 限制会导致错误。如果大型数据集无法拆分、 SplitType 参数设置为 none 或数据集中的单个记录超过限制,则可能会发生此错误。

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

批量转换示例笔记本

对于将批量转换与主成分分析 (PCA) 模型结合使用以减少用户项查看矩阵中的数据,然后将应用程序的基于密度的空间聚类以及噪声 (DBSCAN) 算法应用于聚类电影的示例笔记本 ,请参阅使用 PCA 和 DBSCAN电影聚类进行批量转换。有关创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅使用 Amazon SageMaker 笔记本实例。创建并打开笔记本实例后,选择 SageMaker Examples (AWS 示例) 选项卡以查看所有 SageMaker 示例的列表。使用 NTM 算法的主题建模示例笔记本位于高级功能部分中。要打开笔记本,请选择其 Use (使用) 选项卡,然后选择 Create copy (创建副本)