从批量转换作业捕获数据 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

从批量转换作业捕获数据

无论您使用的是 Python SDK 还是 SageMaker Python SDK,为批处理转换作业开启数据采集所需的步骤都是相似的。 Amazon SDK for Python (Boto) 如果您使用 Amazon SDK,请在CreateTransformJob方法中定义 DataCaptureConfig 字典以及必填字段,以开启数据采集。如果您使用 SageMaker Python SDK,请导入该BatchDataCaptureConfig类并从该类初始化一个实例。然后,将此对象传递给转换作业实例的 batch_data_capture_config 参数。

要使用接下来的代码片段,请将示例代码中的斜体占位符文本 替换为您自己的信息。

如何启用数据捕获

启动转换作业时指定数据捕获配置。无论您使用还是 SageMaker Python SDK,都必须提供DestinationS3Uri参数,即您希望转换作业记录捕获数据的目录。 Amazon SDK for Python (Boto3) (可选)您还可以设置以下参数:

  • KmsKeyId:用于加密捕获数据的密 Amazon KMS 钥。

  • GenerateInferenceId:一个布尔标志,用于在捕获数据时指示您是否希望转换作业将推理 ID 和时间附加到输出中。这对于需要摄取 Ground Truth 数据的模型质量监控非常有用。推理 ID 和时间有助于将捕获的数据与您的 Ground Truth 数据进行匹配。

Amazon SDK for Python (Boto3)

使用CreateTransformJob方法创建转换作业时,使用 DataCaptureConfig 字典配置要捕获的数据。

input_data_s3_uri = "s3://input_S3_uri" output_data_s3_uri = "s3://output_S3_uri" data_capture_destination = "s3://captured_data_S3_uri" model_name = "model_name" sm_client.create_transform_job( TransformJobName="transform_job_name", MaxConcurrentTransforms=2, ModelName=model_name, TransformInput={ "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": input_data_s3_uri, } }, "ContentType": "text/csv", "CompressionType": "None", "SplitType": "Line", }, TransformOutput={ "S3OutputPath": output_data_s3_uri, "Accept": "text/csv", "AssembleWith": "Line", }, TransformResources={ "InstanceType": "ml.m4.xlarge", "InstanceCount": 1, }, DataCaptureConfig={ "DestinationS3Uri": data_capture_destination, "KmsKeyId": "kms_key", "GenerateInferenceId": True, } )
SageMaker Python SDK

sagemaker.model_monitor 导入 BatchDataCaptureConfig 类。

from sagemaker.transformer import Transformer from sagemaker.inputs import BatchDataCaptureConfig # Optional - The S3 URI of where to store captured data in S3 data_capture_destination = "s3://captured_data_S3_uri" model_name = "model_name" transformer = Transformer(model_name=model_name, ...) transform_arg = transformer.transform( batch_data_capture_config=BatchDataCaptureConfig( destination_s3_uri=data_capture_destination, kms_key_id="kms_key", generate_inference_id=True, ), ... )

如何查看捕获的数据

转换作业完成后,捕获的数据将记录在您随数据捕获配置提供的 DestinationS3Uri 下。DestinationS3Uri 下有两个子目录:/input/output。如果 DestinationS3Uris3://my-data-capture,则转换作业将创建以下目录:

  • s3://my-data-capture/input:为转换作业捕获的输入数据。

  • s3://my-data-capture/output:为转换作业捕获的输出数据。

为避免数据重复,上述两个目录下捕获的数据都是清单。每个清单都是一个 JSONL 文件,其中包含源对象的 Amazon S3 位置。清单文件可能如以下示例所示:

# under "/input" directory [ {"prefix":"s3://input_S3_uri/"}, "dummy_0.csv", "dummy_1.csv", "dummy_2.csv", ... ] # under "/output" directory [ {"prefix":"s3://output_S3_uri/"}, "dummy_0.csv.out", "dummy_1.csv.out", "dummy_2.csv.out", ... ]

转换作业会整理这些清单,并用 yyyy/mm/dd/hh S3 前缀对其进行标注,以指示捕获时间。这有助于 Model Monitor 确定要分析的数据的相应部分。例如,如果您在 2022-8-26 13PM UTC 开始转换作业,则捕获的数据将标有 2022/08/26/13/ 前缀字符串。

InferenceId 世代

为转换作业配置 DataCaptureConfig 时,可以打开布尔标志 GenerateInferenceId。当您需要运行模型质量和模型偏差监控作业(需要用户摄取的 Ground Truth 数据)时,这特别有用。Model Monitor 依靠推理 ID 来匹配捕获的数据和 Ground Truth 数据。有关 Ground Truth 摄取的更多详细信息,请参阅收录 Ground Truth 标签并将其与预测合并。打开 GenerateInferenceId 后,转换输出会为每条记录附加推理 ID(随机 UUID)以及转换作业开始时间 (UTC)。运行模型质量和模型偏差监控时需要这两个值。构造 Ground Truth 数据时,需要提供相同的推理 ID 以匹配输出数据。目前,此特征支持 CSV、JSON 和 JSONL 格式的转换输出。

如果您的转换输出采用 CSV 格式,则输出文件类似于以下示例:

0, 1f1d57b1-2e6f-488c-8c30-db4e6d757861,2022-08-30T00:49:15Z 1, 22445434-0c67-45e9-bb4d-bd1bf26561e6,2022-08-30T00:49:15Z ...

最后两列是推理 ID 和转换作业开始时间。请勿修改它们。其余列是您的转换作业输出。

如果转换输出采用 JSON 或 JSONL 格式,则输出文件类似于以下示例:

{"output": 0, "SageMakerInferenceId": "1f1d57b1-2e6f-488c-8c30-db4e6d757861", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"} {"output": 1, "SageMakerInferenceId": "22445434-0c67-45e9-bb4d-bd1bf26561e6", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"} ...

有两个保留的附加字段:SageMakerInferenceIdSageMakerInferenceTime。如果需要运行模型质量或模型偏差监控,请勿修改这些字段,因为合并作业需要这些字段。