Amazon SageMaker モデルのデプロイのトラブルシューティング - Amazon SageMaker

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

Amazon SageMaker モデルのデプロイのトラブルシューティング

Amazon での機械学習モデルのデプロイ時に問題が発生した場合は SageMaker、次のガイダンスを参照してください。

アクティブな CPU カウントの検出エラー

Linux Java 仮想マシン (JVM) を使用して SageMaker モデルをデプロイすると、検出エラーが発生し、使用可能な CPU リソースの使用が妨げられる可能性があります。この問題は、Java 8 と Java 9 をサポートする一部の JVM と、Java 10 と Java 11 をサポートする大部分の JVM に影響します。これらの JVM が実装する機構では、CPU の数と利用可能な最大メモリを検出して処理します。この検出は、Docker コンテナでモデルを実行する場合や、より一般的には、Linux の taskset コマンドまたはコントロールグループ (cgroups) 内で実行されます。 SageMaker のデプロイでは、これらのリソースを管理するために JVM で使用している設定を利用します。現在、このためにコンテナで使用可能な CPU 数の検出エラーが発生します。

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

誤検出の例については、Java8_191 に基づいており、インスタンスに 4 つの使用可能な CPUs がある JVM で SageMaker デプロイされている 用に設定されたコンテナで、次のコマンドを実行して 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 コンテナで JVM を間接的に使用すると、この問題が発生することもあります。たとえば、SparkML Scala をサポートするために JVM を使用している場合があります。-XX:-UseContainerSupport パラメータは、Java の Runtime.getRuntime().availableProcessors() API から返される出力にも影響します。

model.tar.gz ファイルのデプロイに関する問題

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

また、エンドポイントを作成する前に、モデルのデプロイをローカルでテストすることもお勧めします。

  • SageMaker SDK でローカルモードを使用して、モデルをローカルエンドポイントにデプロイすることで、ホストされた環境を模倣します。詳細については、「ローカルゾーン」を参照してください。

  • vanilla docker コマンドを使用して、コンテナが /ping と /invocations に応答することをテストします。詳細については、「local_test」を参照してください。