

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 모니터링 작업 일정 예약
<a name="model-monitor-scheduling"></a>

Amazon SageMaker Model Monitor는 실시간 엔드포인트에서 수집된 데이터를 모니터링할 수 있는 기능을 제공합니다. 반복되는 일정에 따라 데이터를 모니터링하거나 일회성으로 즉시 모니터링할 수 있습니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html) API를 사용하여 모니터링 일정을 만들 수 있습니다.

SageMaker AI는 모니터링 일정을 통해 작업 처리를 시작하여 지정된 기간 동안 수집되었던 데이터를 분석할 수 있습니다. 처리 작업에서 SageMaker AI는 현재 분석에 대한 데이터세트를 사용자가 제공하는 기준 통계 및 제약 조건과 비교합니다. 그런 다음 SageMaker AI는 위반 보고서를 생성합니다. 또한 분석 중인 각 기능에 대해 CloudWatch 지표를 내보냅니다.

SageMaker AI는 테이블 형식 데이터세트에 대한 분석을 수행하기 위한 사전 구축된 컨테이너를 제공합니다. 아니면 [Amazon SageMaker Model Monitor에서 자체 컨테이너 지원](model-monitor-byoc-containers.md)항목에 설명된 대로 자체 컨테이너를 사용하는 방법을 선택할 수도 있습니다.

실시간 엔드포인트 또는 배치 변환 작업에 대한 모델 모니터링 일정을 생성할 수 있습니다. 기준 리소스(제약 조건 및 통계)를 사용하여 실시간 트래픽 또는 배치 작업 입력과 비교합니다.

**Example 기준 할당**  
다음 예제에서는 모델 훈련에 사용된 훈련 데이터세트가 Amazon S3에 업로드되었습니다. Amazon S3에 이미 데이터를 보유 중인 경우에는, 이를 직접 가리킬 수 있습니다.  

```
# copy over the training dataset to Amazon S3 (if you already have it in Amazon S3, you could reuse it)
baseline_prefix = prefix + '/baselining'
baseline_data_prefix = baseline_prefix + '/data'
baseline_results_prefix = baseline_prefix + '/results'

baseline_data_uri = 's3://{}/{}'.format(bucket,baseline_data_prefix)
baseline_results_uri = 's3://{}/{}'.format(bucket, baseline_results_prefix)
print('Baseline data uri: {}'.format(baseline_data_uri))
print('Baseline results uri: {}'.format(baseline_results_uri))
```

```
training_data_file = open("test_data/training-dataset-with-header.csv", 'rb')
s3_key = os.path.join(baseline_prefix, 'data', 'training-dataset-with-header.csv')
boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(training_data_file)
```

**Example 반복 분석 일정**  
실시간 엔드포인트에 대한 모델 모니터를 예약하려는 경우, 기준 제약 조건 및 통계를 사용하여 실시간 트래픽과 비교합니다. 다음 코드 조각은 실시간 엔드포인트에 대한 모델 모니터를 예약하는 데 사용되는 일반적인 형식을 보여줍니다. 이 예제에서는 모델 모니터가 매시간 실행되도록 예약합니다.  

```
from sagemaker.model_monitor import CronExpressionGenerator
from time import gmtime, strftime

mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
my_default_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint"
    ),
    post_analytics_processor_script=s3_code_postprocessor_uri,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

**Example 일회성 분석 일정**  
다음과 같은 인수를 `create_monitoring_schedule`메서드에 전달하여 분석이 반복 없이 한 번만 실행되도록 예약할 수도 있습니다.  

```
    schedule_cron_expression=CronExpressionGenerator.now(),
    data_analysis_start_time="-PT1H",
    data_analysis_end_time="-PT0H",
```
이러한 인수에서 `schedule_cron_expression`매개변수는 `CronExpressionGenerator.now()`값을 사용하여 한 번의 분석을 즉시 실행하도록 예약합니다. 이 설정을 사용하는 모든 일정에는 `data_analysis_start_time`및 `data_analysis_end_time`매개변수가 필요합니다. 이러한 매개변수는 분석 기간의 시작 시간과 종료 시간을 설정합니다. 이러한 시간을 현재 시간을 기준으로 한 오프셋으로 정의하고, ISO8601 기간 형식을 사용하세요. 이 예제에서 시간값 `-PT1H`및 `-PT0H`는 1시간 전의 과거와 현재 시간 사이의 기간을 정의합니다. 이 일정을 사용하면, 분석은 지정된 해당 기간 동안에 수집된 데이터만을 평가합니다.

**Example 배치 변환 작업 일정**  
다음 코드 조각은 배치 변환 작업에 대한 모델 모니터를 예약하는 데 사용되는 일반적인 형식을 보여줍니다.  

```
from sagemaker.model_monitor import (
    CronExpressionGenerator,
    BatchTransformInput, 
    MonitoringDatasetFormat, 
)
from time import gmtime, strftime

mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
my_default_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    batch_transform_input=BatchTransformInput(
        destination="opt/ml/processing/input",
        data_captured_destination_s3_uri=s3_capture_upload_path,
        dataset_format=MonitoringDatasetFormat.csv(header=False),
    ),
    post_analytics_processor_script=s3_code_postprocessor_uri,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

```
desc_schedule_result = my_default_monitor.describe_schedule()
print('Schedule status: {}'.format(desc_schedule_result['MonitoringScheduleStatus']))
```

# 모니터링 일정에 대한 크론 표현식
<a name="model-monitor-schedule-expression"></a>

모니터링 일정에 대한 세부 정보를 제공하려면 모니터링 일정에 대한 세부 정보를 설명하는 `cron`표현식인 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ScheduleConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ScheduleConfig.html)을 사용합니다.

Amazon SageMaker Model Monitor는 다음 `cron`표현식을 지원합니다.
+ 매 시간 작업이 시작되도록 설정하려면 다음을 사용하세요.

  `Hourly: cron(0 * ? * * *)`
+ 작업을 매일 실행하려면 다음을 사용하세요.

  `cron(0 [00-23] ? * * *)`
+ 작업을 즉시 한 번 실행하려면 다음 키워드를 사용하세요.

  `NOW`

예를 들어 다음은 유효한 `cron`표현식입니다.
+ 매일 오후 12시(UTC): `cron(0 12 ? * * *)`
+ 매일 오전 12시(UTC): `cron(0 0 ? * * *)`

6시간, 12시간마다 실행을 지원하기 위해 Model Monitor는 다음 표현식을 지원합니다.

`cron(0 [00-23]/[01-24] ? * * *)`

예를 들어 다음은 유효한 `cron`표현식입니다.
+ 오후 5시(UTC)부터 12시간마다: `cron(0 17/12 ? * * *)`
+ 오전 12시(UTC)부터 2시간마다: `cron(0 0/2 ? * * *)`

**참고**  
`cron` 표현식이 오후 5시(UTC)에 시작하도록 설정되어 있지만 실제 실행이 요청된 시간으로부터 0-20분의 지연이 발생할 수 있습니다.
일일 일정에 따라 실행하려는 경우에는 이 파라미터를 제공하지 마세요. SageMaker AI는 매일 실행할 시간을 선택합니다.
현재 SageMaker AI에서는 1\$124시간 사이의 시간당 정수 비율만 지원합니다.

# 모니터링 일정을 위한 서비스 제어 정책 구성
<a name="model-monitor-scp-rules"></a>

 [CreateMonitoringSchedule](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html) API 또는 [UpdateMonitoringSchedule](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateMonitoringSchedule.html) API를 사용하여 모니터링 작업 일정을 만들거나 업데이트할 때는 각각의 모니터링 작업의 매개변수를 지정해야 합니다. 사용 사례에 따라 다음 중 한 가지 방법으로 이를 수행할 수 있습니다.
+  `CreateMonitoringSchedule` 또는 `UpdateMonitoringSchedule`을 호출할 때 [MonitoringScheduleConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MonitoringScheduleConfig.html)의 [MonitoringJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MonitoringJobDefinition.html) 필드를 지정할 수 있습니다. 이 옵션은 데이터 품질 모니터링 작업의 일정을 만들거나 업데이트하는 데만 사용 가능합니다.
+  `CreateMonitoringSchedule` 또는 `UpdateMonitoringSchedule`을 호출할 때 사용자가 `MonitoringScheduleConfig`의 `MonitoringJobDefinitionName`필드에 이미 생성해둔 모니터링 작업 정의의 이름을 지정할 수 있습니다. 다음 API 중 하나를 사용하여 생성하는 모든 작업 정의에 이 방법을 사용할 수 있습니다.
  +  [CreateDataQualityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDataQualityJobDefinition.html) 
  +  [CreateModelQualityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelQualityJobDefinition.html) 
  +  [CreateModelBiasJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html) 
  +  [CreateModelExplainabilityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html) 

   SageMaker Python SDK를 사용하여 일정을 만들거나 업데이트하려면 이 프로세스를 필수적으로 사용해야 합니다.

 앞서 언급한 프로세스는 상호 배타적입니다.즉, 사용자는 모니터링 일정을 생성하거나 업데이트할 때 `MonitoringJobDefinition`필드 아니면 `MonitoringJobDefinitionName`필드를 지정할 수 있습니다.

 모니터링 작업 정의를 생성하거나 `MonitoringJobDefinition`필드에 정의를 지정할 때는 `NetworkConfig`및 `VolumeKmsKeyId`와 같은 보안 매개변수를 설정할 수 있습니다. 관리자는 모니터링 작업이 항상 안전한 환경에서 실행될 수 있도록 이러한 매개변수를 항상 특정한 값으로 설정해두는 것이 좋습니다. 이를 보장하려면 적절한 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)(SCP)을 설정하세요. 서비스 제어 정책(SCP)은 조직의 권한을 관리하는 데 사용할 수 있는 조직 정책의 유형입니다.

 다음 예제는 모니터링 작업 일정을 만들거나 업데이트할 때 인프라 매개변수가 제대로 설정되었는지 여부를 확인하는 데 사용할 수 있는 SCP를 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateDataQualityJobDefinition",
                "sagemaker:CreateModelBiasJobDefinition",
                "sagemaker:CreateModelExplainabilityJobDefinition",
                "sagemaker:CreateModelQualityJobDefinition"
            ],
            "Resource": "arn:*:sagemaker:*:*:*",
            "Condition": {
                "Null": {
                    "sagemaker:VolumeKmsKey":"true",
                    "sagemaker:VpcSubnets": "true",
                    "sagemaker:VpcSecurityGroupIds": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateDataQualityJobDefinition",
                "sagemaker:CreateModelBiasJobDefinition",
                "sagemaker:CreateModelExplainabilityJobDefinition",
                "sagemaker:CreateModelQualityJobDefinition"
            ],
            "Resource": "arn:*:sagemaker:*:*:*",
            "Condition": {
                "Bool": {
                    "sagemaker:InterContainerTrafficEncryption": "false"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateMonitoringSchedule",
                "sagemaker:UpdateMonitoringSchedule"
            ],
            "Resource": "arn:*:sagemaker:*:*:monitoring-schedule/*",
            "Condition": {
                "Null": {
                    "sagemaker:ModelMonitorJobDefinitionName": "true"
                }
            }
        }
    ]
}
```

------

 예제의 처음 두 규칙은 모니터링 작업 정의를 위한 보안 매개변수가 항상 설정되어 있도록 보장합니다. 마지막 규칙은 일정을 만들거나 업데이트하는 조직 내 모든 사용자가 항상 `MonitoringJobDefinitionName`필드를 지정하도록 요구합니다. 이렇게 하면 조직 내부의 누군가가 일정을 만들거나 업데이트할 때 `MonitoringJobDefinition`필드를 지정함으로써 보안 매개변수에 대해 안전하지 않은 값을 설정하는 일이 생기지 않게 됩니다.