捕获数据 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

捕获数据

要使用 模型监控器,请配置实时推理终端节点以从 请求和响应中捕获数据,并将捕获的数据存储在 中Amazon S3。模型监控器将此数据的指标与您为模型创建的基准进行比较。有关创建基准的信息,请参阅创建基准

设置数据捕获

  1. 首先,配置 Amazon S3 用于存储捕获数据的 模型监控器 存储桶。

    import boto3 import re import json from sagemaker import get_execution_role, session region= boto3.Session().region_name role = get_execution_role() print("RoleArn: {}".format(role)) # You can use a different bucket, but make sure the role you chose for this notebook # has s3:PutObject permissions. This is the bucket into which the data is captured bucket = session.Session(boto3.Session()).default_bucket() print("Demo Bucket: {}".format(bucket)) prefix = 'sagemaker/DEMO-ModelMonitor' data_capture_prefix = '{}/datacapture'.format(prefix) s3_capture_upload_path = 's3://{}/{}'.format(bucket, data_capture_prefix) reports_prefix = '{}/reports'.format(prefix) s3_report_path = 's3://{}/{}'.format(bucket,reports_prefix) code_prefix = '{}/code'.format(prefix) s3_code_preprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'preprocessor.py') s3_code_postprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'postprocessor.py') print("Capture path: {}".format(s3_capture_upload_path)) print("Report path: {}".format(s3_report_path)) print("Preproc Code path: {}".format(s3_code_preprocessor_uri)) print("Postproc Code path: {}".format(s3_code_postprocessor_uri))
  2. 接下来,将预训练模型上传到 Amazon S3。

    model_file = open("model/your-prediction-model.tar.gz", 'rb') s3_key = os.path.join(prefix, 'your-prediction-model.tar.gz') boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(model_file)
  3. 通过配置要在 DataCaptureConfig 结构中捕获的数据来配置要捕获的数据。可以使用此配置捕获请求负载和/或响应负载。

    from sagemaker.model_monitor import DataCaptureConfig endpoint_name = 'your-pred-model-monitor-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) data_capture_config=DataCaptureConfig( enable_capture = True, sampling_percentage=100, destination_s3_uri=s3_capture_upload_path)
  4. 通过传递在上一步中部署模型时创建的配置来启用数据捕获。

    predictor = model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge', endpoint_name=endpoint_name data_capture_config=data_capture_config)
  5. 调用终端节点将数据发送到终端节点,以实时获取推理。由于您在前面的步骤中启用了数据捕获,请求和响应负载以及一些其他元数据将保存在您在 Amazon S3 DataCaptureConfig中指定的位置。

    from sagemaker.predictor import RealTimePredictor import time predictor = RealTimePredictor(endpoint=endpoint_name,content_type='text/csv') # get a subset of test data for a quick test !head -120 test_data/test-dataset-input-cols.csv > test_data/test_sample.csv print("Sending test traffic to the endpoint {}. \nPlease wait...".format(endpoint_name)) with open('test_data/test_sample.csv', 'r') as f: for row in f: payload = row.rstrip('\n') response = predictor.predict(data=payload) time.sleep(0.5) print("Done!")
  6. 通过列出存储在 中的数据捕获文件来查看捕获的数据Amazon S3。预计会看到根据调用发生时间组织的来自各个时段的不同文件。

    s3_client = boto3.Session().client('s3') current_endpoint_capture_prefix = '{}/{}'.format(data_capture_prefix, endpoint_name) result = s3_client.list_objects(Bucket=bucket, Prefix=current_endpoint_capture_prefix) capture_files = [capture_file.get("Key") for capture_file in result.get('Contents')] print("Found Capture Files:") print("\n ".join(capture_files))

    Amazon S3 路径的格式如下所示:

    s3://{destination-bucket-prefix}/{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl