엔드포인트를 생성하거나 업데이트할 때 Amazon SageMaker 엔드포인트가 실패 상태가 되는 이유는 무엇인가요?

최종 업데이트 날짜: 2022년 11월 21일

Amazon SageMaker 엔드포인트 생성 또는 업데이트가 실패한 이유를 확인하고 문제를 해결하고 싶습니다.

해결 방법

SageMaker 엔드포인트의 생성 또는 업데이트가 실패하면 SageMaker가 실패 이유를 제공합니다. 다음 옵션 중 하나를 사용하여 이 이유를 검토하세요.

  • SageMaker 콘솔에서 엔드포인트를 확인합니다. 콘솔에 실패 원인이 보고됩니다.
  • AWS Command Line Interface(AWS CLI) 명령인 describe-endpoint를 실행합니다. FailureReason 필드를 점검하여 실패 원인을 확인합니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

다음은 몇 가지 실패 원인과 해결 방법입니다.

InsufficientInstanceCapacity 오류로 인해 요청된 ML 컴퓨팅 용량을 프로비저닝할 수 없음

엔드포인트를 생성하려고 할 때 다음과 같은 오류가 발생할 수 있습니다.

Unable to provision requested ML compute capacity due to InsufficientInstanceCapacity error

AWS에 엔드포인트에 대해 요청된 인스턴스를 프로비저닝할 충분한 용량이 없을 때 이 오류가 발생합니다.

다음 방법 중 하나 이상을 시도하여 이 오류를 해결할 수 있습니다.

  • 용량이 자주 바뀔 수 있으므로 몇 분 정도 기다렸다가 다시 시도합니다.
  • 엔드포인트에 여러 인스턴스를 사용하는 경우 더 적은 수의 인스턴스로 엔드포인트를 생성해 봅니다. Auto Scaling이 구성된 경우 SageMaker는 필요에 따라 용량이 허용하는 만큼 스케일 업하거나 스케일 다운할 수 있습니다.
  • 워크로드를 지원하는 다른 인스턴스 유형을 사용해 봅니다. 엔드포인트를 생성한 후 원하는 인스턴스 유형으로 엔드포인트를 업데이트합니다. SageMaker에서 블루/그린 배포 방법을 사용하여 가용성을 극대화하므로 사용자는 현재 프로덕션 워크로드에 영향을 주지 않고 새 인스턴스 유형으로 전환할 수 있습니다.

프로덕션 변형 <variant>의 컨테이너가 ping 상태 확인을 통과하지 못했습니다. 이 엔드포인트에 대한 CloudWatch 로그를 확인하세요.

SageMaker 엔드포인트에 사용되는 컨테이너에서 /invocations/ping 엔드포인트에 응답하는 웹 서버를 구현해야 합니다. 엔드포인트를 생성하면 SageMaker는 컨테이너가 시작된 후 /ping 엔드포인트에 주기적 GET 요청을 보내기 시작합니다.

최소한, 컨테이너가 HTTP 200 OK 상태 코드와 빈 본문으로 응답하여 추론 요청을 수락할 준비가 되었음을 나타내야 합니다. SageMaker가 컨테이너 시작 후 4분 내에 컨테이너로부터 일관된 응답을 받지 못할 때 이 오류가 발생합니다. 엔드포인트가 상태 확인에 응답하지 않기 때문에 SageMaker는 엔드포인트를 정상으로 간주하지 않습니다. 따라서 엔드포인트는 Failed(실패)로 표시됩니다.

AWS Deep Learning Containers 이미지 중 하나를 사용할 때도 상태 확인이 실패할 수 있습니다. 이러한 이미지는 TorchServe 또는 Multi Model Server를 사용하여 추론 및 상태 확인을 위해 HTTP 엔드포인트를 구현하는 모델을 제공합니다. 이러한 프레임워크는 200 OK 상태 코드로 SageMaker에 응답하기 전에 모델이 로드되었는지 여부를 확인합니다. 서버에서 모델이 로드되었음을 확인할 수 없으면 상태 확인이 실패합니다. 메모리 사용량을 비롯한 여러 가지 이유로 모델이 로드되지 않을 수 있습니다. 해당 오류 메시지는 엔드포인트에 대한 Amazon CloudWatch Logs에 기록됩니다. 엔드포인트에 로드된 코드로 인해 오류가 발생한 경우(예: PyTorch의 경우 model_fn) 오류가 AWS CloudTrail에 기록됩니다. 이러한 로그의 세부 사항을 늘리려면 모델의 SAGEMAKER_CONTAINER_LOG_LEVEL 환경 변수를 Python 로깅의 로그 수준으로 업데이트합니다.

상태 확인 요청이 성공하려면 2초 내에 응답을 받아야 합니다. 모델 컨테이너를 로컬에서 시작하고 컨테이너에 GET 요청을 보내 응답을 확인하여 응답을 테스트해야 합니다.

컨테이너에 대한 모델 데이터 아카이브를 추출하지 못함

SageMaker는 엔드포인트에서 사용할 모델 데이터가 포함된 TAR 파일을 필요로 합니다. SageMaker가 TAR 파일을 다운로드한 후 데이터 아카이브가 추출됩니다. SageMaker가 이 데이터 아카이브를 추출할 수 없는 경우 이 오류가 발생할 수 있습니다. 예를 들어, 모델 아티팩트에 TAR 파일에 있는 파일에 대한 심볼 링크가 포함된 경우 SageMaker는 데이터 아카이브를 추출할 수 없습니다.

엔드포인트를 생성할 때 모델 아티팩트가 TAR 파일 내에 심볼 링크를 포함하지 않는지 확인하세요. TAR 파일에 심볼 링크가 포함되어 있는지 확인하려면 모델 데이터를 추출한 후 아티팩트 내에서 다음 명령을 실행합니다.

find . -type l -ls

이 명령은 현재 디렉터리와 하위 디렉터리를 검색한 후 찾은 모든 심볼 링크를 반환합니다. 반환된 링크를 파일의 실제 사본으로 바꾸세요.

CannotStartContainerError

SageMaker에서 컨테이너를 시작하여 추론을 준비하지 못하는 경우 이 오류가 발생합니다.

SageMaker에서 엔드포인트를 시작하면 다음 명령으로 컨테이너가 시작됩니다.

docker run <image-id> serve

이 명령이 실행되면 컨테이너가 제공 프로세스를 시작해야 합니다.

이 오류를 해결하려면 SageMaker Python SDK에 로컬 모드를 사용합니다. 또는 docker run 명령으로 추론 이미지를 실행해 보세요. SageMaker Python SDK는 SageMaker 엔드포인트와 유사한 모델을 로드합니다. 그러나 모델을 로드하도록 명령 또는 컨테이너를 구성하지 않는 한 Docker는 모델을 로드하지 않습니다. 다음과 유사한 명령을 사용하여 모델을 로컬로 로드할 수 있습니다.

docker run -v $(pwd)/test_dir:/opt/ml -p 8080:8080 --rm ${image} serve

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?