Amazon SageMaker エンドポイントをデプロイするか、または BatchTransform ジョブを実行すると、次のようなエラーで接続がタイムアウトします。
「アップストリームから応答ヘッダーを読み取っている間にアップストリームがタイムアウトしました (110: Connection timed out)、クライアント: 169.xxx.xxx.xxx、サーバー: 、リクエスト:「POST /invocations HTTP/1.1」、アップストリーム: 「http://unix:/tmp/gunicorn.sock/invocations」、ホスト:「169.xxx.xxx.xxx:8080」
簡単な説明
このエラーは、NGINX とウェブサーバー間の接続に問題があることを示しています。これらのコンポーネントはいずれも、独自のコンテナを使用しているか事前に構築されたコンテナを使用しているかに関係なく、モデルコンテナで実行されます。これらのコンポーネントは、SageMaker のホスティングまたはバッチ変換に直接関係しません。ただし、NGINX とウェブサーバー間の接続がタイムアウトすると、SageMaker は /invocations エンドポイントから推論を取得できません。
この問題を解決する方法:
- アルゴリズムコンテナのレイテンシーを減らすか、コンテナのタイムアウト上限を増やします。
- NGINX.conf タイムアウト設定を増やします。
解決方法
アルゴリズムコンテナのレイテンシーを減らすか、タイムアウト上限を増やす
- ホスティングサービスの推論コードを実行している場合: モデルコンテナは 60 秒以内にリクエストに応答する必要があります。モデル自体の最長処理時間は 60 秒です。モデルの処理時間が 50 ~ 60 秒であることがわかっている場合は、SDK ソケットタイムアウトを 70 秒に設定します。詳細については、「推論リクエストに対するコンテナの応答方法」を参照してください。
- バッチ変換の推論コードを実行している場合: ModelClientConfig を使用して、InvocationStimeOutinSeconds および InvocationsMaxRetries パラメータを設定します。
Amazon SageMaker は、コンテナの CreateModel および CreateTransformJob で指定された環境変数を設定します。次の API パラメータを調整して、アルゴリズムコンテナのレイテンシーを減らします。例えば、入力が分割可能な場合、変換ジョブの作成時に maxPayloadinMB フィールドを設定して、各リクエストのペイロードサイズを制限します。
- maxPayloadinMB: コンテナに送信されるペイロードの最大サイズ。コンテナがバッチ変換をすばやく処理できる場合は、このプロパティを増やします。バッチ変換に予想よりも時間がかかる場合は、このプロパティを減らします。
- MaxConcurrentTransforms: デフォルトは 1 です。複数の NGINX ワーカーがある場合は、この設定を増やします。
- BatchStrategy: できるだけ多くのレコードをミニバッチ (MaxPayLoadInMB の上限まで) に収めるには、BatchStrategy を MultiRecord に設定し、SplitType を Line に設定します。
Gunicorn を実装する SageMaker フレームワークコンテナを使用している場合は、このようなプロパティを環境変数として Docker コンテナに渡します。
- SAGEMAKER _MODEL_SERVER_TIMEOUT: Gunicorn サーバーのタイムアウト。接続が閉じられる前にリクエストを処理する時間を増やすには、この値を増やします。
- SAGEMAKER _MODEL_SERVER_WORKERS: CPU あたりのワーカー数。
NGINX.conf タイムアウト設定を増やす
Amazon SageMaker の事前構築済みの Docker コンテナのいずれかを使用している場合、NGINX.conf ファイルを変更することはできません。NGINX.conf は、独自の Docker コンテナを使用している場合にのみ変更できます。
Amazon SageMaker はタイムアウト後に接続を閉じるため、NGINX タイムアウトによってエラーが発生する可能性があります。コンテナが閉じた接続に対して読み書きを試みると、リクエストは失敗します。ネットワークのオーバーヘッドに対応するために、次の 1 つ以上のプロパティを変更します。
- proxy_read_timeout: これは、request.send 呼び出しの後、NGINX がモデルからの応答を待機する時間です。この値を大きくすると、接続を閉じる前に Amazon SageMaker がリクエストを処理する時間が長くなります。
- worker_processes: インバウンド接続のスレッド数です。ほとんどの場合、値は CPU コアの数と同じかそれ以上である必要があります。例えば、ml.m5.large などの 2 コアのインスタンスタイプの場合、このプロパティは最低 2 に設定します。
- worker_connections: 各ワーカープロセスの同時接続の最大数です。これの開始値を 1024 に設定するのがベストプラクティスです。
構成設定の詳細については、NGINX ドキュメントの「Module ngx_http_proxy_module」を参照してください。