本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过增强清单文件,将数据集元数据提供给训练作业
要在训练作业中随您的数据集包含元数据,请使用增强清单文件。使用增强清单文件时,您的数据集必须存储在 Amazon Simple Storage Service (Amazon S3) 中,并且必须配置训练作业以使用存储在该位置的数据集。您可以为一个或多个 Channel
指定此数据集的位置和格式。增强清单只能支持管道输入模式。请参阅部分InputMode在Channel
了解更多关于管道输入模式的信息。
指定频道的参数时,需要指定文件的路径,称为S3Uri
. 亚马逊 SageMaker 根据指定的S3DataType
在S3DataSource
. AugmentedManifestFile
选项定义随输入数据包括元数据的清单格式。在您有标记过的数据时,使用增强清单文件是一种替代的预处理方法。对于使用标记过数据的训练作业,您通常需要预处理数据集,从而在训练前将输入数据与元数据组合起来。如果您的训练数据集较大,预处理的时间可能会较长,成本高昂。
增强清单文件格式
增强清单文件必须采用 JSON 行
在训练过程中, SageMaker 分析每行 JSON 行,并将其部分或全部属性发送到训练算法。您可以使用 CreateTrainingJob
API 的 AttributeNames
参数指定要传递哪些属性内容以及传递的顺序。这些区域有:AttributeNames
参数是属性名称的有序列表 SageMaker 在 JSON 对象中查找用作训练输入。
例如,如果您为 AttributeNames
列出 ["line", "book"]
,则输入数据必须按指定顺序包括 line
和 book
的属性名称。对于本示例,以下增强清单文件内容有效:
{"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 检索image1.jpg
来自的文件s3://mybucket/sample01/
以及的字符串表示形式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。
在训练作业中使用增强清单文件(控制台)
打开亚马逊 SageMaker 控制台https://console.aws.amazon.com/sagemaker/
. -
在导航窗格中,选择 Training (训练),然后选择 Training jobs (训练作业)。
-
选择 Create training job (创建训练作业)。
-
为训练作业提供一个名称。该名称在Amazon中的地区Amazonaccount. 名称可以包括 1 到 63 个字符。有效字符:a-z、A-Z、0-9 和 . : + = @ _ % -(连字符)。
-
选择要使用的算法。有关支持的内置算法的信息,请参阅使用亚马逊SageMaker内置算法或预先训练的模型。如果您希望使用自定义算法,请确保该算法与管道模式兼容。
-
(可选)对于 Resource configuration (资源配置),请接受默认值,如果要减少计算时间,请增加资源消耗。
-
(可选)对于 Instance type (实例类型),选择您要使用的 ML 计算实例类型。在大多数情况下 ml.m4.xlarge 便足够。
-
对于 Instance count (实例计数),请使用默认值
1
。 -
(可选)对于 Additional volume per instance (GB) (每个实例的附加卷 (GB)),请选择您要预配置的 ML 存储卷的大小。在大部分情况下,您可以使用默认值
1
。如果您使用大数据集,请使用较大的大小。
-
-
为训练数据集提供有关输入数据的信息。
-
对于 Channel name (通道名称),请接受默认值 (
train
) 或者输入更有意义的名称,例如training-augmented-manifest-file
。 -
对于 InputMode (输入模式),请选择 Pipe (管道)。
-
对于 S3 data distribution type (S3 数据分配类型),请选择 FullyReplicated。进行增量训练时,完全复制会导致各个 ML 计算实例使用扩展数据集的完整副本。对于基于神经的算法,例如 神经主题模型 (NTM) 算法,请选择
ShardedByS3Key
。 -
如果在增强清单文件中指定的数据未压缩,请将 Compression type (压缩类型) 设置为 None (无)。如果使用 gzip 压缩了数据,请将其设置为 Gzip。
-
(可选)对于 Content type (内容类型),请指定相应的 MIME 类型。内容类型 是多用途 Internet 邮件扩展 (MIME) 类型的数据。
-
对于 Record wrapper (记录包装程序),如果在增强清单文件中指定的数据集以 RecordIO 格式保存,则选择 RecordIO。如果您的数据集未另存为 RecordIO 格式的文件,请选择 None (无)。
-
对于 S3 data type (S3 数据类型),选择 AugmentedManifestFile。
-
对于 S3 location (S3 位置),提供您存储增强清单文件的存储桶的路径。
-
对于 AugmentedManifestFile attribute names (AugmentedManifestFile 属性名称),请指定您要使用的属性的名称。属性名称必须存在于增强清单文件中,并且区分大小写。
-
(可选)要添加更多属性,请选择 Add row(添加行) 并为各个属性指定其他属性名称。
-
(可选)要调整属性名称的顺序,请选择名称旁边的上移或下移按钮。使用增强清单文件时,指定属性名称的顺序非常重要。
-
选择完成。
-
-
对于 Output data configuration (输出数据配置),请提供以下信息:
-
对于 S3 location (S3 位置),键入存储输出数据的 S3 存储桶的路径。
-
(可选)您可以使用您的 Amazon Key Management Service (Amazon KMS) 加密密钥来加密静态输出数据。对于 Encryption key (加密密钥),请提供密钥 ID 或其 Amazon 资源编号 (ARN)。有关更多信息,请参阅 KMS 托管的加密密钥。
-
-
(可选)对于 Tags (标签),向训练作业添加一个或多个标签。一个标签您可以定义并分配到的元数据Amazon资源的费用。在这种情况下,您可以使用标签来帮助您管理训练作业。标签包含由您定义的键和值。例如,您可能希望创建一个标签,使用
Project
作为键,其值引用与训练作业相关的项目,例如Home value forecasts
。 -
选择创建训练作业. SageMaker 创建并运行训练作业。
在培训工作完成之后 SageMaker 将模型工件存储在您提供的路径的存储桶中输出路径中的输出数据配置字段中返回的子位置类型。要部署模型以获取预测,请参阅步骤 5:将模型部署到亚马逊 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 将模型工件存储在您提供的路径的存储桶中输出路径中的输出数据配置字段中返回的子位置类型。要部署模型以获取预测,请参阅步骤 5:将模型部署到亚马逊 EC2。