

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

# Amazon SageMaker AI 모델 배포 문제 해결
<a name="deploy-model-troubleshoot"></a>

Amazon SageMaker AI에서 기계 학습 모델을 배포할 때 문제가 발생하는 경우 다음 가이드를 참조하세요.

**Topics**
+ [활성 CPU 개수에서 탐지 오류](#deploy-model-troubleshoot-jvms)
+ [model.tar.gz 파일 배포 문제](#deploy-model-troubleshoot-tarballs)
+ [기본 컨테이너가 ping 상태 검사를 통과하지 못했습니다.](#deploy-model-troubleshoot-ping)

## 활성 CPU 개수에서 탐지 오류
<a name="deploy-model-troubleshoot-jvms"></a>

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

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

잘못된 탐지 예시의 경우 Java8\_191을 기반으로 하고 인스턴스에서 사용 가능한 CPU가 4개인 JVM을 사용하여 배포된 SageMaker AI용으로 구성된 컨테이너에서 다음 명령을 실행하여 JVM을 시작합니다.

```
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에 액세스할 수 있습니다.

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

## model.tar.gz 파일 배포 문제
<a name="deploy-model-troubleshoot-tarballs"></a>

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

## 기본 컨테이너가 ping 상태 검사를 통과하지 못했습니다.
<a name="deploy-model-troubleshoot-ping"></a>

 기본 컨테이너가 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의 로컬 모드를 사용하여 모델을 로컬 엔드포인트에 배포하여 호스팅된 환경을 모방합니다. 자세한 내용은 [로컬 모드](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)에서 확인하세요.
+  vanilla 도커 명령을 사용하여 컨테이너가 /ping 및 /invocations에 응답하는지 테스트합니다. 자세한 내용은 [local\_test](https://github.com/aws/amazon-sagemaker-examples/tree/main/advanced_functionality/scikit_bring_your_own/container/local_test)에서 확인하세요.