安排模型质量监控作业 - Amazon SageMaker

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

安排模型质量监控作业

创建基准后,您可以调用 ModelQualityMonitor 类实例的 create_monitoring_schedule() 方法来计划每小时一次的模型质量监控。以下几节介绍如何为部署到实时端点的模型以及为批量转换作业创建模型质量监控。

重要

创建监控计划时,您可以指定批量转换输入或端点输入,但不能同时指定两者。

与数据质量监控不同,如果要监控模型质量,则需要提供 Ground Truth 标签。但是,Ground Truth 标签可能会延迟。要解决这个问题,请在创建监控计划时指定偏移量。

Model Monitor 偏移量

模型质量作业包括 StartTimeOffsetEndTimeOffset,它们是 create_model_quality_job_definition 方法 ModelQualityJobInput 参数的字段,其工作方式如下:

  • StartTimeOffset - 如果已指定,则作业将从开始时间中减去此时间。

  • EndTimeOffset - 如果已指定,则作业将从结束时间中减去此时间。

例如,偏移量的格式为-PT7H,其中 7H 为 7 小时。您可以使用 -PT#H 或 -P#D,其中 H 为小时数,D 为天数,M 为分钟数,# 为数字。此外,偏移量应采用 ISO8601 持续时间格式

例如,如果您的 Ground Truth 在 1 天后开始出现,但在一周内没有完成,则将 StartTimeOffset 设置为 -P8D,将 EndTimeOffset 设置为 -P1D。然后,如果您计划在 2020-01-09T13:00 运行某项作业,则它会分析介于 2020-01-01T13:002020-01-08T13:00 之间的数据。

重要

计划节奏应确保一次执行在下一次执行开始之前完成,这样就能完成执行中的 Ground Truth 合并作业和监控作业。一次执行的最大运行时间在两个作业之间分配,因此,对于每小时一次的模型质量监控作业,作为 StoppingCondition 一部分指定的 MaxRuntimeInSeconds 值不得大于 1800。

对部署到实时端点的模型进行模型质量监控

要为实时端点计划模型质量监控,请将 EndpointInput 实例传递给 ModelQualityMonitor 实例的 endpoint_input 参数,如以下代码示例所示:

from sagemaker.model_monitor import CronExpressionGenerator model_quality_model_monitor = ModelQualityMonitor( role=sagemaker.get_execution_role(), ... ) schedule = model_quality_model_monitor.create_monitoring_schedule( monitor_schedule_name=schedule_name, post_analytics_processor_script=s3_code_postprocessor_uri, output_s3_uri=s3_report_path, schedule_cron_expression=CronExpressionGenerator.hourly(), statistics=model_quality_model_monitor.baseline_statistics(), constraints=model_quality_model_monitor.suggested_constraints(), schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, endpoint_input=EndpointInput( endpoint_name=endpoint_name, destination="/opt/ml/processing/input/endpoint", start_time_offset="-PT2D", end_time_offset="-PT1D", ) )

对批量转换作业进行模型质量监控

要为批量转换作业计划模型质量监控,请将 BatchTransformInput 实例传递给 ModelQualityMonitor 实例的 batch_transform_input 参数,如以下代码示例所示:

from sagemaker.model_monitor import CronExpressionGenerator model_quality_model_monitor = ModelQualityMonitor( role=sagemaker.get_execution_role(), ... ) schedule = model_quality_model_monitor.create_monitoring_schedule( monitor_schedule_name=mon_schedule_name, batch_transform_input=BatchTransformInput( data_captured_destination_s3_uri=s3_capture_upload_path, destination="/opt/ml/processing/input", dataset_format=MonitoringDatasetFormat.csv(header=False), # the column index of the output representing the inference probablity probability_attribute="0", # the threshold to classify the inference probablity to class 0 or 1 in # binary classification problem probability_threshold_attribute=0.5, # look back 6 hour for transform job outputs. start_time_offset="-PT6H", end_time_offset="-PT0H" ), ground_truth_input=gt_s3_uri, output_s3_uri=s3_report_path, problem_type="BinaryClassification", constraints = constraints_path, schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )