本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从实时端点捕获数据
注意
为了防止对推理请求产生影响,数据捕获功能会在磁盘利用率较高时停止捕获请求。建议将磁盘利用率保持在 75% 以下,以确保数据捕获功能继续捕获请求。
要为实时终端节点捕获数据,必须使用 SageMaker AI 托管服务部署模型。这需要您创建 A SageMaker I 模型、定义终端节点配置并创建 HTTPS 终端节点。
无论你使用还是 SageMaker Python SDK,开启数据采集所需的步骤都是相似的。 AWS SDK for Python (Boto) 如果您使用 AWS SDK,请在CreateEndpointConfig方法中定义DataCaptureConfig字典以及必填字段,以开启数据采集。如果您使用 SageMaker Python SDK,请导入该DataCaptureConfigsagemaker.model.Model.deploy()
方法中的 DataCaptureConfig
参数。
要使用后续的代码片段,请用您自己的信息替换示例代码italicized
placeholder text
中的。
如何启用数据捕获
指定数据捕获配置。可以使用此配置捕获请求负载和/或响应负载。接下来的代码片段演示了如何使用 AWS SDK for Python (Boto) 和 SageMaker AI Python SDK 启用数据采集。
注意
您无需使用 Model Monitor 来捕获请求或响应负载。
部署模型
部署您的模型并创建一个启用了 DataCapture
的 HTTPS 端点。
查看捕获的数据
从 SageMaker Python SDK 预测器类中创建预测器Predictor
类返回的对象来调用端点。提供端点的名称(前面定义为 endpoint_name
),以及分别用于序列化程序和反序列化程序的序列化程序对象和反序列化程序对象。有关序列化器类型的信息,请参阅 AI SageMaker Python
from sagemaker.predictor import Predictor from sagemaker.serializers import
<Serializer>
from sagemaker.deserializers import<Deserializers>
predictor = Predictor(endpoint_name=endpoint_name, serializer =<Serializer_Class>
, deserializer =<Deserializer_Class>
) # Example #from sagemaker.predictor import Predictor #from sagemaker.serializers import CSVSerializer #from sagemaker.deserializers import JSONDeserializer #predictor = Predictor(endpoint_name=endpoint_name, # serializer=CSVSerializer(), # deserializer=JSONDeserializer())
在接下来的代码示例场景中,我们使用本地存储在名为 validation_with_predictions
的 CSV 文件中的示例验证数据来调用端点。我们的示例验证集包含每个输入的标签。
with 语句的前几行首先打开验证集 CSV 文件,然后用逗号字符","
拆分文件中的每一行,之后将返回的两个对象分别存储到标签和 input_cols 变量中。对于每一行,输入 (input_cols
) 将传递给预测器变量 (predictor
) 的对象内置方法 Predictor.predict()
。
假设模型返回一个概率。概率范围在整数值 0 和 1.0 之间。如果模型返回的概率大于 80% (0.8),则为预测分配一个整数值标签 1。否则,我们为预测分配一个整数值标签 0。
from time import sleep validate_dataset = "validation_with_predictions.csv" # Cut off threshold of 80% cutoff = 0.8 limit = 200 # Need at least 200 samples to compute standard deviations i = 0 with open(f"test_data/{validate_dataset}", "w") as validation_file: validation_file.write("probability,prediction,label\n") # CSV header with open("test_data/validation.csv", "r") as f: for row in f: (label, input_cols) = row.split(",", 1) probability = float(predictor.predict(input_cols)) prediction = "1" if probability > cutoff else "0" baseline_file.write(f"{probability},{prediction},{label}\n") i += 1 if i > limit: break print(".", end="", flush=True) sleep(0.5) print() print("Done!")
由于您在前面的步骤中启用了数据捕获,因此,请求和响应负载将与其他一些元数据一起保存到您在 DataCaptureConfig
中指定的 Amazon S3 位置。将捕获数据传输到 Amazon S3 可能需要几分钟的时间。
通过列出存储在 Amazon S3 中的数据捕获文件来查看捕获的数据。Amazon S3 路径格式为:s3:///
。{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename
.jsonl
预计会看到根据调用发生时间组织的来自各个时段的不同文件。运行以下命令打印出单个捕获文件的内容:
print("\n".join(capture_file[-3:-1]))
这将返回一个特定于 SageMaker AI 的 JSOnline 格式的文件。以下是从我们使用 csv/text
数据调用的实时端点获取的响应示例:
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"} {"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
在接下来的示例中,capture_file
对象是列表类型。为列表的第一个元素建立索引以查看单个推理请求。
# The capture_file object is a list. Index the first element to view a single inference request print(json.dumps(json.loads(capture_file[0]), indent=2))
这将返回与下面类似的响应。根据您的端点配置、 SageMaker AI 模型和捕获的数据,返回的值将有所不同:
{ "captureData": { "endpointInput": { "observedContentType": "text/csv", # data MIME type "mode": "INPUT", "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n", "encoding": "CSV" }, "endpointOutput": { "observedContentType": "text/csv; charset=character-encoding", "mode": "OUTPUT", "data": "0.023190177977085114", "encoding": "CSV" } }, "eventMetadata": { "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "inferenceTime": "2022-02-14T17:25:06Z" }, "eventVersion": "0" }