

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

# Amazon CloudWatch 및를 사용하는 규칙에 대한 작업 AWS Lambda
<a name="debugger-cloudwatch-lambda"></a>

Amazon CloudWatch는 Amazon SageMaker AI 모델 훈련 작업 로그와 Amazon SageMaker Debugger 규칙 처리 작업 로그를 수집합니다. Amazon CloudWatch Events 및 로 디버거를 구성 AWS Lambda 하여 디버거 규칙 평가 상태를 기반으로 조치를 취합니다.

## 예제 노트북
<a name="debugger-test-stop-training"></a>

Amazon CloudWatch 및 AWS Lambda를 사용하는 디버거의 내장 규칙에 대한 작업을 사용하여 훈련 작업을 중지하는 실험을 위해 준비된 다음 예제 노트북을 실행할 수 있습니다.
+ [Amazon SageMaker Debugger - 규칙을 통한 CloudWatch Events에 대한 반응](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/tf-mnist-stop-training-job.html)

  이 예제 노트북은 그라데이션이 소실 문제가 있는 훈련 작업을 실행합니다. 디버거 [VanishingGradient](debugger-built-in-rules.md#vanishing-gradient)의 내장된 규칙은 SageMaker AI TensorFlow 예측기를 구문화할 때 사용됩니다. 디버거 규칙이 문제를 감지하면 훈련 작업이 종료됩니다.
+ [SageMaker 디버거 규칙을 사용하여 중단된 훈련 감지 및 동작 간접 호출](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/detect_stalled_training_job_and_actions.html)

  이 예제 노트북은 10분 동안 강제로 휴면 모드로 전환하는 코드 라인이 포함된 훈련 스크립트를 실행합니다. 디버거 [StalledTrainingRule](debugger-built-in-rules.md#stalled-training) 내장 규칙은 문제를 간접 호출하고 훈련 작업을 중지합니다.

**Topics**
+ [예제 노트북](#debugger-test-stop-training)
+ [디버거 규칙 및 훈련 작업에 대한 CloudWatch 로그 액세스](debugger-cloudwatch-metric.md)
+ [CloudWatch 및 Lambda를 사용하여 자동화된 훈련 작업 종료를 위한 디버거 설정](debugger-stop-training.md)
+ [자동 훈련 작업 종료 사용을 중지하기 위해 CloudWatch 이벤트 규칙 비활성화](debugger-disable-cw.md)

# 디버거 규칙 및 훈련 작업에 대한 CloudWatch 로그 액세스
<a name="debugger-cloudwatch-metric"></a>

훈련 문제가 있을 경우 CloudWatch 로그의 훈련 및 디버거 규칙 작업 상태를 사용하여 추가 조치를 취할 수 있습니다. 다음 절차에서는 관련 CloudWatch 로그에 액세스하는 방법을 보여줍니다. CloudWatch를 사용하여 훈련 작업을 모니터링하는 방법에 대한 추가 내용은 [Monitor Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-overview.html)를 참조하세요.

**훈련 작업 로그 및 디버거 규칙 작업 로그에 액세스하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **로그** 노드 아래에 **로그 그룹**을 선택합니다.

1. 로그 그룹 목록에서 다음을 수행합니다.
   + 훈련 작업 로그에 대해 **/aws/sagemaker/TrainingJobs**를 선택하세요.
   + 디버거 규칙 작업 로그에 대해 **/aws/sagemaker/ProcessingJobs**를 선택하세요.

# CloudWatch 및 Lambda를 사용하여 자동화된 훈련 작업 종료를 위한 디버거 설정
<a name="debugger-stop-training"></a>

디버거 규칙은 훈련 작업 상태를 모니터링하고 CloudWatch Events 규칙은 디버거 규칙 훈련 작업 평가 상태를 감시합니다. 다음 섹션에서는 CloudWatch 및 Lambda를 사용하여 훈련 작업 종료를 자동화하는 데 필요한 프로세스를 간략하게 설명합니다.

**Topics**
+ [1단계: Lambda 함수 생성](#debugger-lambda-function-create)
+ [2단계: Lambda 함수 구성](#debugger-lambda-function-configure)
+ [3단계: CloudWatch 이벤트 규칙 생성 및 디버거용 Lambda 함수에 연결](#debugger-cloudwatch-events)

## 1단계: Lambda 함수 생성
<a name="debugger-lambda-function-create"></a>

**Lambda 함수 생성**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **함수**를 선택한 후, **함수 생성**을 선택합니다.

1. **함수 생성** 페이지에서 **새로 작성** 옵션을 선택합니다.

1. **기본 정보** **섹션에 **함수 이름**(예: debugger-rule-stop-training-job**)을 입력합니다.

1. **실행 시간**에서 **Python 3.7**을 선택합니다.

1. **권한**의 경우 드롭다운 옵션을 확장하고 **기본 실행 역할 변경**을 선택합니다.

1. **실행 역할**에서 **기존 역할 사용**을 선택하고 SageMaker AI에서 훈련 작업에 사용할 IAM 역할을 선택합니다.
**참고**  
`AmazonSageMakerFullAccess` 및 `AWSLambdaBasicExecutionRole`이 연결된 실행 역할을 사용해야 합니다. 그렇지 않으면 Lambda 함수가 훈련 작업의 디버거 규칙 상태 변경에 제대로 반응하지 않습니다. 어떤 실행 역할을 사용하고 있는지 확실하지 않은 경우 Jupyter notebook 셀에서 다음 코드를 실행하여 실행 역할 출력을 검색하세요.  

   ```
   import sagemaker
   sagemaker.get_execution_role()
   ```

1. 페이지 하단에서 **함수 생성**을 선택합니다.

다음 그림은 입력 필드와 선택이 완료된 **함수 생성** 페이지의 예를 보여줍니다.

![\[함수 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/debugger/debugger-lambda-create.png)


## 2단계: Lambda 함수 구성
<a name="debugger-lambda-function-configure"></a>

**Lambda 함수를 구성하려면**

1. 구성 페이지의 **함수 코드** 섹션에서 Lambda 코드 편집기 창에 다음 Python 스크립트를 붙여넣습니다. 이 `lambda_handler` 함수는 CloudWatch에서 수집한 디버거 규칙 평가 상태를 모니터링하고 `StopTrainingJob` API 작업을 트리거합니다. SageMaker AI`client`용는 AWS SDK for Python (Boto3) `StopTrainingJob` API 작업을 트리거`stop_training_job`하는 상위 수준 메서드를 제공합니다.

   ```
   import json
   import boto3
   import logging
   
   logger = logging.getLogger()
   logger.setLevel(logging.INFO)
   
   def lambda_handler(event, context):
       training_job_name = event.get("detail").get("TrainingJobName")
       logging.info(f'Evaluating Debugger rules for training job: {training_job_name}')
       eval_statuses = event.get("detail").get("DebugRuleEvaluationStatuses", None)
   
       if eval_statuses is None or len(eval_statuses) == 0:
           logging.info("Couldn't find any debug rule statuses, skipping...")
           return {
               'statusCode': 200,
               'body': json.dumps('Nothing to do')
           }
   
       # should only attempt stopping jobs with InProgress status
       training_job_status = event.get("detail").get("TrainingJobStatus", None)
       if training_job_status != 'InProgress':
           logging.debug(f"Current Training job status({training_job_status}) is not 'InProgress'. Exiting")
           return {
               'statusCode': 200,
               'body': json.dumps('Nothing to do')
           }
   
       client = boto3.client('sagemaker')
   
       for status in eval_statuses:
           logging.info(status.get("RuleEvaluationStatus") + ', RuleEvaluationStatus=' + str(status))
           if status.get("RuleEvaluationStatus") == "IssuesFound":
               secondary_status = event.get("detail").get("SecondaryStatus", None)
               logging.info(
                   f'About to stop training job, since evaluation of rule configuration {status.get("RuleConfigurationName")} resulted in "IssuesFound". ' +
                   f'\ntraining job "{training_job_name}" status is "{training_job_status}", secondary status is "{secondary_status}"' +
                   f'\nAttempting to stop training job "{training_job_name}"'
               )
               try:
                   client.stop_training_job(
                       TrainingJobName=training_job_name
                   )
               except Exception as e:
                   logging.error(
                       "Encountered error while trying to "
                       "stop training job {}: {}".format(
                           training_job_name, str(e)
                       )
                   )
                   raise e
       return None
   ```

   Lambda 코드 편집기 인터페이스에 대한 자세한 내용은 [AWS Lambda 콘솔 편집기를 사용하여 함수 생성을 참조하세요](https://docs.aws.amazon.com/lambda/latest/dg/code-editor.html).

1. 기타 모든 설정을 건너뛰고 구성 페이지 상단에서 **저장**을 선택합니다.

## 3단계: CloudWatch 이벤트 규칙 생성 및 디버거용 Lambda 함수에 연결
<a name="debugger-cloudwatch-events"></a>

**CloudWatch 이벤트 규칙을 생성하고 디버거용 Lambda 함수에 연결하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **이벤트** 아래에서 **규칙**을 선택합니다.

1. **규칙 생성**을 선택합니다.

1. **1단계: 규칙 생성** 페이지의 **이벤트 소스** 섹션에서 **서비스 이름**으로 **SageMaker AI**를 선택하고, **이벤트 유형**으로 **SageMaker AI 훈련 작업 상태 변경**을 선택합니다. 이벤트 패턴 미리 보기는 다음 예제 JSON 문자열과 같아야 합니다.

   ```
   {
       "source": [
           "aws.sagemaker"
       ],
       "detail-type": [
           "SageMaker Training Job State Change"
       ]
   }
   ```

1. **대상** 섹션에서 **대상 추가\$1**를 선택하고 생성한 **debugger-rule-stop-training-job** Lambda 함수를 선택합니다. 이 단계는 CloudWatch 이벤트 규칙을 Lambda 함수와 연결합니다.

1. **세부 정보 구성**을 선택하고 **2단계: 규칙 세부 정보 구성** 페이지를 엽니다.

1. CloudWatch 규칙 정의 이름을 지정합니다. 예를 들어, **debugger-cw-event-rule**입니다.

1. 완료하려면 **규칙 생성**을 선택합니다.

1. Lambda 함수 구성 페이지로 돌아가서 페이지를 새로 고칩니다. **설계자** 패널에서 올바르게 구성되었는지 확인합니다. CloudWatch 이벤트 규칙은 Lambda 함수의 트리거로 등록되어야 합니다. 구성 설계는 다음 예제와 비슷합니다.  
<a name="lambda-designer-example"></a>![\[CloudWatch 구성을 위한 설계자 패널.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/debugger/debugger-lambda-designer.png)

# 자동 훈련 작업 종료 사용을 중지하기 위해 CloudWatch 이벤트 규칙 비활성화
<a name="debugger-disable-cw"></a>

자동 훈련 작업 종료를 비활성화하려면 CloudWatch Events 규칙을 비활성화해야 합니다. Lambda **설계자** 패널에서 Lambda 함수에 연결된 **EventBridge(CloudWatch Events)** 블록을 선택합니다. 그러면 **설계자** 패널 아래에 **EventBridge** 패널이 표시됩니다(예: 이전 스크린샷 참조). **EventBridge(CloudWatch Events): debugger-cw-event-rule** 옆의 확인란을 선택한 다음 **비활성화**를 선택합니다. 나중에 자동 종료 기능을 사용하려면 CloudWatch 이벤트 규칙을 다시 활성화할 수 있습니다.