本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过增强清单文件,将数据集元数据提供给训练作业
要在训练作业中随您的数据集包含元数据,请使用增强清单文件。使用增强清单文件时,您的数据集必须存储在 Amazon Simple Storage Service (Amazon S3) 中,并且必须配置训练作业以使用存储在该位置的数据集。您可以为一个或多个 Channel
指定此数据集的位置和格式。增强清单只能支持管道输入模式。Channel
要了解有关管道输入模式的更多信息,请参阅InputMode中的部分。
指定通道参数时,您需要指定文件的路径,称为 S3Uri
。Amazon 根据S3DataType
中S3DataSource
指定的来 SageMaker 解释此 URI。AugmentedManifestFile
选项定义随输入数据包括元数据的清单格式。在您有标记过的数据时,使用增强清单文件是一种替代的预处理方法。对于使用标记过数据的训练作业,您通常需要预处理数据集,从而在训练前将输入数据与元数据组合起来。如果您的训练数据集较大,预处理的时间可能会较长,成本高昂。
增强清单文件格式
增强清单文件必须采用 JSON 行
在训练期间, SageMaker 解析每行 JSON 并将其部分或全部属性发送到训练算法。您可以使用 CreateTrainingJob
API 的 AttributeNames
参数指定要传递哪些属性内容以及传递的顺序。该AttributeNames
参数是在 JSON 对象中 SageMaker 查找的属性名称的有序列表,用作训练输入。
例如,如果您为 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 G SageMaker round 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 (创建训练作业)。
-
为训练作业提供一个名称。在 AWS 账户的某个 AWS 区域内,该名称必须是唯一的。名称可以包括 1 到 63 个字符。有效字符:a-z、A-Z、0-9 和 . : + = @ _ % -(连字符)。
-
选择要使用的算法。有关支持的内置算法的信息,请参阅使用 Amazon 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,选择管道。
-
对于 S3 数据分配类型,选择FullyReplicated。进行增量训练时,完全复制会导致各个 ML 计算实例使用扩展数据集的完整副本。对于基于神经的算法,例如 神经主题模型 (NTM) 算法,请选择
ShardedByS3Key
。 -
如果在增强清单文件中指定的数据未压缩,请将 Compression type (压缩类型) 设置为 None (无)。如果使用 gzip 压缩了数据,请将其设置为 Gzip。
-
(可选)对于 Content type (内容类型),请指定相应的 MIME 类型。内容类型是多用途 Internet 邮件扩展 (MIME) 类型的数据。
-
对于 Record wrapper (记录包装程序),如果在增强清单文件中指定的数据集以 RecordIO 格式保存,则选择 RecordIO。如果您的数据集未另存为 RecordIO 格式的文件,请选择 None (无)。
-
对于 S3 数据类型,选择AugmentedManifestFile。
-
对于 S3 location (S3 位置),提供您存储增强清单文件的存储桶的路径。
-
对于AugmentedManifestFile 属性名称,请指定要使用的属性的名称。属性名称必须存在于增强清单文件中,并且区分大小写。
-
(可选)要添加更多属性,请选择 Add row(添加行) 并为各个属性指定其他属性名称。
-
(可选)要调整属性名称的顺序,请选择名称旁边的上移或下移按钮。使用增强清单文件时,指定属性名称的顺序非常重要。
-
选择完成。
-
-
对于 Output data configuration (输出数据配置),请提供以下信息:
-
对于 S3 location (S3 位置),键入存储输出数据的 S3 存储桶的路径。
-
(可选)您可以使用 AWS Key Management Service (AWS KMS) 加密密钥对静态输出数据进行加密。对于 Encryption key (加密密钥),请提供密钥 ID 或其 Amazon 资源编号 (ARN)。有关更多信息,请参阅 KMS 托管的加密密钥。
-
-
(可选)对于 Tags (标签),向训练作业添加一个或多个标签。标签是您定义并分配到 AWS 资源的元数据。在这种情况下,您可以使用标签来帮助您管理训练作业。标签包含由您定义的键和值。例如,您可能希望创建一个标签,使用
Project
作为键,其值引用与训练作业相关的项目,例如Home value forecasts
。 -
选择创建训练作业。 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。