Amazon SageMaker 모델 배포 문제 해결 - 아마존 SageMaker

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

Amazon SageMaker 모델 배포 문제 해결

SageMakerAmazon에서 기계 학습 모델을 배포할 때 문제가 발생하는 경우 다음 지침을 참조하십시오.

활성 CPU 개수에서 탐지 오류

Linux Java 가상 머신 (JVM) 을 사용하여 SageMaker 모델을 배포하는 경우 사용 가능한 CPU 리소스를 사용하지 못하게 하는 탐지 오류가 발생할 수 있습니다. 이 문제는 Java 8 및 Java 9를 지원하는 일부 JVM과 Java 10 및 Java 11을 지원하는 대부분의 JVM에 영향을 미칩니다. 이러한 JVM은 Docker 컨테이너, 더 일반적으로는 Linux taskset 명령 또는 제어 그룹 (cgroup) 내에서 모델을 실행할 때 사용 가능한 CPU 수와 최대 메모리를 감지하고 처리하는 메커니즘을 구현합니다. SageMaker배포에는 JVM이 이러한 리소스를 관리하는 데 사용하는 일부 설정이 활용됩니다. 현재 이로 인해 컨테이너가 사용 가능한 CPU 수를 잘못 감지하게 됩니다.

SageMaker 인스턴스의 CPU 액세스를 제한하지 않습니다. 그러나 컨테이너에 사용할 수 있는 CPU가 더 많을 경우 JVM은 CPU 개수를 1로 감지할 수 있습니다. 따라서 JVM은 모든 내부 설정을 조정하여 1 CPU 코어만 사용할 수 있는 것처럼 실행합니다. 이러한 설정은 컨테이너의 동시성, 처리량 및 지연 시간에 부정적인 영향을 미치는 가비지 수집, 잠금, 컴파일러 스레드 및 기타 JVM 내부에도 영향을 미칩니다.

오류 탐지의 예를 들어, Java8_191 기반 JVM과 함께 배포되고 인스턴스에 사용 가능한 CPU 4개가 있는 컨테이너에서 다음 명령을 실행하여 JVM을 시작하십시오. SageMaker

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version

다음 출력이 생성됩니다.

active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

이 문제의 영향을 받는 수많은 JVM에서는 이 동작을 비활성화하고 인스턴스의 모든 CPU에 대한 전체 액세스를 재설정할 수 있습니다. Java 애플리케이션을 시작할 때 -XX:-UseContainerSupport 파라미터를 포함시켜서 원치 않는 동작을 비활성화하고 모든 인스턴스 CPU에 대한 전체 액세스를 설정합니다. 예를 들어 다음과 같이 java 명령을 실행하여 JVM을 시작합니다.

java -XX:-UseContainerSupport -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version

다음 출력이 생성됩니다.

active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

컨테이너에서 사용된 JVM이 -XX:-UseContainerSupport 파라미터를 지원하는지 여부를 확인합니다. 지원하는 경우 JVM을 시작할 때 항상 파라미터를 전달합니다. 이를 통해 인스턴스의 모든 CPU에 액세스할 수 있습니다.

컨테이너에서 JVM을 간접적으로 사용하는 경우에도 이 문제가 발생할 수 있습니다. SageMaker 예를 들어 JVM을 사용하여 SparkML Scala를 지원하는 경우입니다. -XX:-UseContainerSupport 파라미터는 Java Runtime.getRuntime().availableProcessors() API에서 반환되는 출력에도 영향을 미칩니다.

model.tar.gz 파일 배포 문제

model.tar.gz 파일을 사용하여 모델을 배포할 때 모델 tarball에 symlink가 포함되어서는 안 됩니다. Symlink는 모델 생성 실패의 원인이 됩니다. 또한 tarball에 불필요한 파일을 포함하지 않을 것을 권장합니다.

기본 컨테이너가 ping 상태 검사를 통과하지 못했습니다.

기본 컨테이너가 ping 상태 확인에 실패하고 다음 오류 메시지가 표시되면 컨테이너 또는 스크립트에 문제가 있음을 나타냅니다.

The primary container for production variant beta did not pass the ping health check. Please check CloudWatch Logs logs for this endpoint.

이 문제를 해결하려면 해당 엔드포인트의 로그 CloudWatch 로그를 확인하여 컨테이너가 또는 응답하지 못하게 하는 오류나 문제가 있는지 확인해야 합니다. /ping /invocations 로그에는 문제를 가리키는 오류 메시지가 표시될 수 있습니다. 오류 및 실패 사유 식별 후 오류를 해결해야 합니다.

또한 엔드포인트 생성 전 모델 배포를 로컬에서 테스트하는 것도 좋은 관행입니다.

  • SageMaker SDK의 로컬 모드를 사용하면 모델을 로컬 엔드포인트에 배포하여 호스팅된 환경을 모방할 수 있습니다. 자세한 내용은 로컬 모드에서 확인하세요.

  • vanilla 도커 명령을 사용하여 컨테이너가 /ping 및 /invocations에 응답하는지 테스트합니다. 자세한 내용은 local_test에서 확인하세요.