

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

# 安排模型质量监测作业
<a name="model-monitor-model-quality-schedule"></a>

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

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

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

## Model Monitor 偏移量
<a name="model-monitor-model-quality-schedule-offsets"></a>

模型质量作业包括 `StartTimeOffset` 和 `EndTimeOffset`，它们是 `create_model_quality_job_definition` 方法 `ModelQualityJobInput` 参数的字段，其工作方式如下：
+ `StartTimeOffset` - 如果已指定，则作业将从开始时间中减去此时间。
+ `EndTimeOffset` - 如果已指定，则作业将从结束时间中减去此时间。

例如，偏移量的格式为-PT7 H，其中 7H 为 7 小时。您可以使用 -PT\$1H 或 -P\$1D，其中 H 为小时数，D 为天数，M 为分钟数，\$1 为数字。此外，偏移量应采用 [ISO 8601 持续时间格式](https://en.wikipedia.org/wiki/ISO_8601#Durations)。

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

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

## 对部署到实时端点的模型进行模型质量监控
<a name="model-monitor-data-quality-schedule-rt"></a>

要为实时端点计划模型质量监控，请将 `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",
    )
)
```

## 对批量转换作业进行模型质量监控
<a name="model-monitor-data-quality-schedule-tt"></a>

要为批量转换作业计划模型质量监控，请将 `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,
)
```