通过增强清单文件,将数据集元数据提供给训练作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过增强清单文件,将数据集元数据提供给训练作业

要在训练作业中随您的数据集包含元数据,请使用增强清单文件。使用增强清单文件时,您的数据集必须存储在 Amazon Simple Storage Service (Amazon S3) 中,并且必须配置训练作业以使用存储在该位置的数据集。您可以为一个或多个 Channel 指定此数据集的位置和格式。增强清单只能支持管道输入模式。请阅读 Channel 中的 InputMode 部分,详细了解管道输入模式。

指定通道参数时,您需要指定文件的路径,称为 S3Uri。Amazon SageMaker 根据在 S3DataSource 中指定的 S3DataType 解析此 URI。AugmentedManifestFile 选项定义随输入数据包括元数据的清单格式。在您有标记过的数据时,使用增强清单文件是一种替代的预处理方法。对于使用标记过数据的训练作业,您通常需要预处理数据集,从而在训练前将输入数据与元数据组合起来。如果您的训练数据集较大,预处理的时间可能会较长,成本高昂。

增强清单文件格式

增强清单文件必须采用 JSON 行格式。在 JSON 行格式中,文件的每一行是一个完整的 JSON 对象,后跟换行分隔符。

在训练期间,SageMaker 解析各个 JSON 行,并将其部分或全部属性发送给训练算法。您可以使用 CreateTrainingJob API 的 AttributeNames 参数指定要传递哪些属性内容以及传递的顺序。AttributeNames 参数是 SageMaker 在 JSON 对象中查找用作训练输入的有序属性名称列表。

例如,如果您为 AttributeNames 列出 ["line", "book"],则输入数据必须按指定顺序包括 linebook 的属性名称。对于本示例,以下增强清单文件内容有效:

{"author": "Herman Melville", "line": "Call me Ishmael", "book": "Moby Dick"} {"line": "It was love at first sight.", "author": "Joseph Heller", "book": "Catch-22"}

SageMaker 忽略未列出的属性名称,即使这些属性位于所列出的属性之前、之后或之间。

使用增强清单文件时,请遵循以下准则:

  • AttributeNames 参数中列出的属性顺序确定了在训练作业中传递到算法的属性顺序。

  • 列出的 AttributeNames 可以是 JSON 行中的所有属性的子集。SageMaker 会忽略文件中未列出的属性。

  • 您可在 AttributeNames 中指定 JSON 格式允许的任意数据类型,包括文本、数字、数组或对象。

  • 要包括 S3 URI 作为属性名称,请将后缀 -ref 添加到其中。

如果属性名称包含后缀 -ref,则属性的值必须是指向数据文件的 S3 URI 并且训练作业可以访问该 URI。例如,如果 AttributeNames 包含 ["image-ref", "is-a-cat"],以下示例显示有效的增强清单文件:

{"image-ref": "s3://mybucket/sample01/image1.jpg", "is-a-cat": 1} {"image-ref": "s3://mybucket/sample02/image2.jpg", "is-a-cat": 0}

在此清单文件的第一行 JSON 中,SageMaker 会从 s3://mybucket/sample01/ 检索 image1.jpg 文件,并检索 is-a-cat 属性 "1" 的字符串表示形式,用于图像分类。

提示

要创建增强清单文件,请使用 Amazon SageMaker Ground Truth 创建标注作业。有关标注作业的输出的更多信息,请参阅输出数据

流式处理增强清单文件数据

通过增强清单格式,您可以使用文件在管道模式下进行训练,而无需创建 RecordIO 文件。您需要将训练通道和验证通道指定为 CreateTrainingJob 请求的 InputDataConfig 参数的值。只有使用管道输入模式的通道才支持增强清单文件。对于每个通道,数据提取自其增强清单文件,并通过通道的指定管道(按顺序)流式传输到算法。管道模式使用先进先出 (FIFO) 方法,因此记录按照排队的顺序处理。有关管道输入模式的信息,请参阅Input Mode

具有 "-ref" 后缀的属性名称指向预先格式化的二进制数据。在某些情况下,算法知道如何解析数据。在另一些情况下,您可能需要包装数据,针对算法来分隔记录。如果算法与 RecordIO 格式数据兼容,请为 RecordWrapperType 指定 RecordIO 以解决此问题。如果算法不与 RecordIO 格式兼容,请为 RecordWrapperType 指定 None 并确保针对您的算法正确解析了数据。

使用 ["image-ref", "is-a-cat"] 示例,如果您使用 RecordIO 包装,则将以下数据流发送到队列:

recordio_formatted(s3://mybucket/foo/image1.jpg)recordio_formatted("1")recordio_formatted(s3://mybucket/bar/image2.jpg)recordio_formatted("0")

未使用 RecordIO 格式包装的图像,将通过对应的 is-a-cat 属性值流式处理为一个记录。由于算法可能没有正确的分隔图像和属性,这可能会导致问题。有关使用增强清单文件进行图像分类的详细信息,请参阅使用增强清单图像格式训练

通常使用增强清单文件和管道模式时,EBS 卷的大小限制不适用。这包括原本必须位于 EBS 卷大小限制内的设置,例如 S3DataDistributionType 。有关管道模式以及如何使用该模式的更多信息,请参阅使用您自己的训练算法 – 输入数据配置

使用增强清单文件(控制台)

要完成此过程,您需要:

  • 存储了增强清单文件的 S3 存储桶的 URL。

  • 将在增强清单文件中列出的数据存储到 S3 存储桶中。

  • 您要存储作业输出的 S3 存储桶的 URL。

在训练作业中使用增强清单文件(控制台)
  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 Amazon SageMaker 控制台。

  2. 在导航窗格中,选择 Training (训练),然后选择 Training jobs (训练作业)

  3. 选择 Create training job (创建训练作业)

  4. 为训练作业提供一个名称。在一个 Amazon 区域的一个 Amazon 账户中,名称必须唯一。名称可以包括 1 到 63 个字符。有效字符:a-z、A-Z、0-9 和 . : + = @ _ % -(连字符)。

  5. 选择要使用的算法。有关支持的内置算法的信息,请参阅使用 Amazon SageMaker 内置算法或预先训练模型。如果您希望使用自定义算法,请确保该算法与管道模式兼容。

  6. (可选)对于 Resource configuration (资源配置),请接受默认值,如果要减少计算时间,请增加资源消耗。

    1. (可选)对于 Instance type (实例类型),选择您要使用的 ML 计算实例类型。在大多数情况下 ml.m4.xlarge 便足够。

    2. 对于 Instance count (实例计数),请使用默认值 1

    3. (可选)对于 Additional volume per instance (GB) (每个实例的附加卷 (GB)),请选择您要预配置的 ML 存储卷的大小。在大部分情况下,您可以使用默认值 1。如果您使用大数据集,请使用较大的大小。

  7. 为训练数据集提供有关输入数据的信息。

    1. 对于 Channel name (通道名称),请接受默认值 (train) 或者输入更有意义的名称,例如 training-augmented-manifest-file

    2. 对于 InputMode (输入模式),请选择 Pipe (管道)

    3. 对于 S3 data distribution type (S3 数据分配类型),请选择 FullyReplicated。进行增量训练时,完全复制会导致各个 ML 计算实例使用扩展数据集的完整副本。对于基于神经的算法,例如 神经主题模型 (NTM) 算法,请选择 ShardedByS3Key

    4. 如果在增强清单文件中指定的数据未压缩,请将 Compression type (压缩类型) 设置为 None (无)。如果使用 gzip 压缩了数据,请将其设置为 Gzip

    5. (可选)对于 Content type (内容类型),请指定相应的 MIME 类型。内容类型是多用途 Internet 邮件扩展 (MIME) 类型的数据。

    6. 对于 Record wrapper (记录包装程序),如果在增强清单文件中指定的数据集以 RecordIO 格式保存,则选择 RecordIO。如果您的数据集未另存为 RecordIO 格式的文件,请选择 None (无)

    7. 对于 S3 data type (S3 数据类型),选择 AugmentedManifestFile

    8. 对于 S3 location (S3 位置),提供您存储增强清单文件的存储桶的路径。

    9. 对于 AugmentedManifestFile attribute names (AugmentedManifestFile 属性名称),请指定您要使用的属性的名称。属性名称必须存在于增强清单文件中,并且区分大小写。

    10. (可选)要添加更多属性,请选择 Add row(添加行) 并为各个属性指定其他属性名称。

    11. (可选)要调整属性名称的顺序,请选择名称旁边的上移或下移按钮。使用增强清单文件时,指定属性名称的顺序非常重要。

    12. 选择完成

  8. 对于 Output data configuration (输出数据配置),请提供以下信息:

    1. 对于 S3 location (S3 位置),键入存储输出数据的 S3 存储桶的路径。

    2. (可选)您可以使用您的 Amazon Key Management Service (Amazon KMS) 加密密钥来加密静态输出数据。对于 Encryption key (加密密钥),请提供密钥 ID 或其 Amazon 资源编号 (ARN)。有关更多信息,请参阅 KMS 托管的加密密钥

  9. (可选)对于 Tags (标签),向训练作业添加一个或多个标签。标签是您定义并分配到 Amazon 资源的元数据。在这种情况下,您可以使用标签来帮助您管理训练作业。标签包含由您定义的键和值。例如,您可能希望创建一个标签,使用 Project 作为键,其值引用与训练作业相关的项目,例如 Home value forecasts

  10. 选择 Create training job (创建训练作业)。SageMaker 创建并运行训练作业。

训练作业完成后,SageMaker 会将模型构件存储在存储桶中,其路径由您在输出数据配置字段的 S3 输出路径中提供。要部署模型以获取预测,请参阅步骤 5:将模型部署到 Amazon EC2

使用增强清单文件 (API)

下文说明了如何使用 SageMaker 高级 Python 库,通过增强清单文件训练模型:

import sagemaker # Create a model object set to using "Pipe" mode. model = sagemaker.estimator.Estimator( training_image, role, instance_count=1, instance_type='ml.p3.2xlarge', volume_size = 50, max_run = 360000, input_mode = 'Pipe', output_path=s3_output_location, sagemaker_session=session ) # Create a train data channel with S3_data_type as 'AugmentedManifestFile' and attribute names. train_data = sagemaker.inputs.TrainingInput( your_augmented_manifest_file, distribution='FullyReplicated', content_type='application/x-recordio', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'annotations'], input_mode='Pipe', record_wrapping='RecordIO' ) data_channels = {'train': train_data} # Train a model. model.fit(inputs=data_channels, logs=True)

训练作业完成后,SageMaker 会将模型构件存储在存储桶中,其路径由您在输出数据配置字段的 S3 输出路径中提供。要部署模型以获取预测,请参阅步骤 5:将模型部署到 Amazon EC2