기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
CloudWatch 및 Lambda를 사용하여 자동 훈련 작업 종료를 위한 Debugger 설정
디버거 규칙은 훈련 작업 상태를 모니터링하고 CloudWatch 이벤트 규칙은 디버거 규칙 훈련 작업 평가 상태를 모니터링합니다. 다음 섹션에서는 CloudWatch 및 Lambda를 사용하여 훈련 작업 종료를 자동화하는 데 필요한 프로세스를 간략하게 설명합니다.
1단계: Lambda 함수 생성
Lambda 함수를 생성하는 방법
에서 AWS Lambda 콘솔을 엽니다https://console.aws.amazon.com/lambda/
. -
왼쪽 탐색 창에서 함수를 선택한 후, 함수 생성을 선택합니다.
-
함수 생성 페이지에서 새로 작성 옵션을 선택합니다.
-
기본 정보 섹션에서 함수 이름(예: debugger-rule-stop-training-job )을 입력합니다.
-
실행 시간에서 Python 3.7을 선택합니다.
-
권한의 경우 드롭다운 옵션을 확장하고 기본 실행 역할 변경을 선택합니다.
-
실행 역할 에서 기존 역할 사용을 선택하고 에서 훈련 작업에 사용하는 IAM 역할을 선택합니다 SageMaker.
참고
AmazonSageMakerFullAccess
및AWSLambdaBasicExecutionRole
이 연결된 실행 역할을 사용해야 합니다. 그렇지 않으면 Lambda 함수가 훈련 작업의 디버거 규칙 상태 변경에 제대로 반응하지 않습니다. 어떤 실행 역할을 사용하고 있는지 확실하지 않은 경우 Jupyter notebook 셀에서 다음 코드를 실행하여 실행 역할 출력을 검색하세요.import sagemaker sagemaker.get_execution_role()
-
페이지 하단에서 함수 생성을 선택합니다.
다음 그림은 입력 필드와 선택이 완료된 함수 생성 페이지의 예를 보여줍니다.
2단계: Lambda 함수 구성
Lambda 함수를 구성하려면
-
구성 페이지의 함수 코드 섹션에서 Lambda 코드 편집기 창에 다음 Python 스크립트를 붙여넣습니다.
lambda_handler
함수는 에서 수집한 Debugger 규칙 평가 상태를 모니터링하고StopTrainingJob
API 작업을 CloudWatch 트리거합니다.client
for 는 AWS SDK for Python (Boto3)StopTrainingJob
API 작업을 트리거하는 상위 수준 메서드stop_training_job
인 를 SageMaker 제공합니다.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 콘솔 편집기를 사용하여 함수 생성을 참조하세요.
-
기타 모든 설정을 건너뛰고 구성 페이지 상단에서 저장을 선택합니다.
3단계: CloudWatch 이벤트 규칙 생성 및 Debugger용 Lambda 함수에 대한 링크
CloudWatch 이벤트 규칙을 생성하고 Debugger용 Lambda 함수에 연결하려면
에서 CloudWatch 콘솔을 엽니다https://console.aws.amazon.com/cloudwatch/
. -
탐색 창에서 이벤트 아래에서 규칙을 선택합니다.
-
Create rule을 선택합니다.
-
1단계: 규칙 생성 페이지의 이벤트 소스 섹션에서 서비스 이름 SageMaker을 선택하고 이벤트 유형에 대한 SageMaker 훈련 작업 상태 변경을 선택합니다. 이벤트 패턴 미리 보기는 다음 예제 JSON 문자열과 같아야 합니다.
{ "source": [ "aws.sagemaker" ], "detail-type": [ "SageMaker Training Job State Change" ] }
-
대상 섹션에서 대상 추가*를 선택하고 생성한 debugger-rule-stop-training-job Lambda 함수를 선택합니다. 이 단계에서는 CloudWatch 이벤트 규칙을 Lambda 함수와 연결합니다.
-
세부 정보 구성을 선택하고 2단계: 규칙 세부 정보 구성 페이지를 엽니다.
-
CloudWatch 규칙 정의 이름을 지정합니다. 예: debugger-cw-event-rule.
-
완료하려면 규칙 생성을 선택합니다.
-
Lambda 함수 구성 페이지로 돌아가서 페이지를 새로 고칩니다. 설계자 패널에서 올바르게 구성되었는지 확인합니다. CloudWatch 이벤트 규칙은 Lambda 함수의 트리거로 등록되어야 합니다. 구성 설계는 다음 예제와 비슷합니다.