

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

# 从批量转换作业捕获数据
<a name="model-monitor-data-capture-batch"></a>

 无论您使用的是 Python SDK 还是 SageMaker Python SDK，为批处理转换作业开启数据采集所需的步骤都是相似的。 AWS SDK for Python (Boto) 如果您使用 AWS SDK，请在`CreateTransformJob`方法中定义[DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)字典以及必填字段，以开启数据采集。如果您使用 SageMaker AI Python SDK，请导入该`BatchDataCaptureConfig`类并从该类初始化一个实例。然后，将此对象传递给转换作业实例的 `batch_data_capture_config` 参数。

 要使用以下代码片段，请用您自己的信息替换示例代码*italicized placeholder text*中的。

## 如何启用数据捕获
<a name="data-capture-batch-enable"></a>

 启动转换作业时指定数据捕获配置。无论您使用还是 SageMaker Python SDK，都必须提供`DestinationS3Uri`参数，即您希望转换作业记录捕获数据的目录。 适用于 Python (Boto3) 的 AWS SDK （可选）您还可以设置以下参数：
+  `KmsKeyId`：用于加密捕获数据的密 AWS KMS 钥。
+  `GenerateInferenceId`：一个布尔标志，用于在捕获数据时指示您是否希望转换作业将推理 ID 和时间附加到输出中。这对于需要摄取 Ground Truth 数据的模型质量监控非常有用。推理 ID 和时间有助于将捕获的数据与您的 Ground Truth 数据进行匹配。

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

 使用`CreateTransformJob`方法创建转换作业时，使用[DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)字典配置要捕获的数据。

```
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\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html) 导入 `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,
    ),
    ...
)
```

------

## 如何查看捕获的数据
<a name="data-capture-batch-view"></a>

 转换作业完成后，捕获的数据将记录在您随数据捕获配置提供的 `DestinationS3Uri` 下。`DestinationS3Uri` 下有两个子目录：`/input` 和 `/output`。如果 `DestinationS3Uri` 为 `s3://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 世代
<a name="data-capture-batch-inferenceid"></a>

 为转换作业配置 `DataCaptureConfig` 时，可以打开布尔标志 `GenerateInferenceId`。当您需要运行模型质量和模型偏差监控作业（需要用户摄取的 Ground Truth 数据）时，这特别有用。Model Monitor 依靠推理 ID 来匹配捕获的数据和 Ground Truth 数据。有关 Ground Truth 摄取的更多详细信息，请参阅[输入地面实况标签并与预测结果合并](model-monitor-model-quality-merge.md)。打开 `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"}
...
```

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