

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 の数と利用可能な最大メモリを検出して処理します。この検出は、Docker コンテナでモデルを実行する場合や、より一般的には、Linux の `taskset` コマンドまたはコントロールグループ (cgroups) 内で実行されます。SageMaker AI のデプロイでは、JVM がこれらのリソースを管理するために使用するいくつかの設定を利用します。現在、このためにコンテナで使用可能な CPU 数の検出エラーが発生します。

SageMaker AI はインスタンスの CPU へのアクセスを制限しません。ただし、コンテナで使用できる CPU の数が増えると、JVM は CPU 数を `1` として検出する場合があります。その結果、使用可能な CPU コアは `1` つのみであるとして、JVM のすべての内部設定が調整されて実行されます。これらの設定は、ガベージコレクション、ロック、コンパイラースレッドなどの JVM 構成に影響し、コンテナの同時実行、スループット、およびレイテンシーに悪影響を及ぼします。

検出エラーの例を参照するには、コンテナで次のコマンドを実行して JVM を起動します。このコンテナは SageMaker AI 用に設定され、Java8\$1191 に基づく JVM でデプロイされたものであり、この JVM にはインスタンスに 4 つの使用可能な CPU があるものとします。

```
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 を間接的に使用している場合にも、この問題が発生することがあります。たとえば、SparkML Scala をサポートするために JVM を使用している場合があります。`-XX:-UseContainerSupport` パラメータは、Java の `Runtime.getRuntime().availableProcessors()` API`` から返される出力にも影響します。

## model.tar.gz ファイルのデプロイに関する問題
<a name="deploy-model-troubleshoot-tarballs"></a>

`model.tar.gz` ファイルを使用してモデルをデプロイする場合、モデルの tarball にはシンボリックリンクが含まれないようにしてください。シンボリックリンクが含まれていると、モデルの作成が失敗します。また、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 Logs ログをチェックして、コンテナが `/ping` または `/invocations` に応答するのを妨げているエラーまたは問題がないかどうかを確認する必要があります。ログには、問題を示すエラーメッセージが記録されている場合があります。エラーと失敗の理由を特定したら、エラーを解決する必要があります。

 また、エンドポイントを作成する前に、モデルのデプロイをローカルでテストすることもお勧めします。
+  SageMaker SDK のローカルモードを使用して、モデルをローカルエンドポイントにデプロイすることでホスト環境を模倣します。詳細については、「[ローカルゾーン](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)」を参照してください。
+  vanilla docker コマンドを使用して、コンテナが /ping と /invocations に応答することをテストします。詳細については、「[local\$1test](https://github.com/aws/amazon-sagemaker-examples/tree/main/advanced_functionality/scikit_bring_your_own/container/local_test)」を参照してください。