Amazon SageMaker에서 InternalServerError 응답 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 24일

Amazon SageMaker에서 훈련 작업을 실행하거나 예측을 수행할 때 요청이 실패하고 다음과 같은 오류가 발생했습니다: "HTTP Error 500: Internal Server Error" 또는 "InternalServerError: We encountered an internal error. Please try again." 오류의 근본 원인을 어떻게 찾을 수 있습니까?

해결 방법

훈련 작업

요청을 재시도합니다. TrainingJobStatus가 여전히 실패(Failed)로 표시되면 FailureReason을 검토하여 실패 원인을 확인합니다. 전체 오류 스택을 보려면 다음 섹션에 설명된 대로 Amazon CloudWatch logs를 확인합니다.

추론 요청

엔드포인트와 연결된 CloudWatch logs를 확인하여 근본 원인을 확인합니다.

1.    SageMaker 콘솔을엽니다.

2.    오류가 발생한 위치에 따라 훈련 작업 또는 엔드포인트를 선택합니다.

3.    훈련 작업 또는 엔드포인트의 이름을 선택합니다.

4.    [Monitor(모니터링)] 섹션에서 [View logs(로그 보기)]를 선택하여 CloudWatch 콘솔을 엽니다.

5.    CloudWatch 콘솔에서 해당 훈련 작업 또는 엔드포인트에 대한 로그 스트림을 선택합니다.

훈련 작업의 경우 로그 스트림은 /aws/sagemaker/TrainingJobs CloudWatch 로그 그룹에 위치합니다. 스트림 이름은 훈련 이름으로 시작합니다(예: imageclassfi-job-2020-04-05/xxxxx).

엔드포인트의 경우 로그 스트림은 /aws/sagemaker/Endpoints/endpoint_name CloudWatch 로그 그룹에 위치합니다. 스트림 이름은 변형 이름으로 시작합니다(예: AllTraffic/i-xxxxxxx).

6.    로그를 검토하여 자세한 오류 메시지를 찾습니다. 이 프로세스를 단순화하기 위해 훈련 작업 또는 추론 스크립트에 디버깅 코드를 추가할 수 있습니다. 예를 들어 작업 상태 또는 데이터 세트의 실제 값을 프린트합니다. 그런 다음 CloudWatch logs에서 프린트된 메시지를 찾습니다.

다음은 엔드포인트 디버깅을 위한 추론 코드의 예입니다. 이 코드를 사용하여 predict() 함수를 올바르게 호출했는지 확인할 수 있습니다. 이 코드는 또한 엔드포인트에 전달된 실제 값을 보여주는 데이터 변수를 프린트합니다. 이 예에서 MYDEBUG는 CloudWatch 로그 스트림에서 검색하려는 키워드는 입니다.

def predict():
    data = None
    print("MYDEBUG: Predict function called")
    # Convert from CSV to pandas
    if flask.request.content_type == 'text/csv':
        data = flask.request.data.decode('utf-8')
        s = StringIO.StringIO(data)
        data = pd.read_csv(s, header=None)
        ## To print the  actual data set
        print( "MYDEBUG: Printing data")
        print( data.head(10) )

7.    로그의 정보를 사용하여 오류의 근본 원인을 확인합니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?