如何解決 Amazon SageMaker 推論錯誤「從上游讀取回應標頭時上游逾時 (110: 連線逾時)」?

1 分的閱讀內容
0

當我部署 Amazon SageMaker 端點或執行 BatchTransform 任務時,連線逾時並顯示如下錯誤:從上游讀取回應標頭時上游逾時 (110: 連線逾時),用戶端: 169.xxx.xxx.xxx,伺服器:,請求: "POST /invocations HTTP/1.1",上游:"http://unix:/tmp/gunicorn.sock/invocations",主機: "169.xxx.xxx.xxx:8080"

簡短描述

此錯誤表示 NGINX 與 Web 伺服器之間的連線發生問題。這兩個元件都在模型容器中執行,無論您使用的是自己的容器還是預先建置的容器。這些元件與 SageMaker 託管或批次轉換沒有直接關係。但是,當 NGINX 與 Web 伺服器之間的連線逾時時,SageMaker 無法從 /invocations 端點取得推論。

若要解決此問題,請執行以下操作:

  1. 減少演算法容器的延遲或增加容器的逾時限制。
  2. 增加 NGINX.conf 逾時設定。

解決方法

減少演算法容器的延遲或增加逾時限制

  • **如果您正在執行託管服務的推論程式碼:**您的模型容器必須在 60 秒內回應請求。模型本身的最長處理時間為 60 秒。如果您知道模型需要 50-60 秒的處理時間,請將 SDK 通訊端逾時設定為 70 秒。如需詳細資訊,請參閱容器應如何回應推斷請求
  • 如果您正在執行批次轉換的推斷程式碼:使用 ModelClientConfig 來設定InvocationsTimeoutInSecondsInvocationsMaxRetries 參數。

Amazon SageMaker 會在您的容器上設定 CreateModelCreateTransformJob 中指定的環境變數。調整下列 API 參數以減少演算法容器的延遲。例如,如果輸入可分割,請在建立轉換任務時設定 MaxPayloadInMB 欄位,以限制每個請求的承載大小。

  • **MaxPayloadInMB:**傳送至容器的承載大小上限。如果容器可以快速處理批次轉換,則增加此屬性。如果批次轉換所花費的時間超過預期,請減少此屬性。
  • **MaxConcurrentTransforms:**預設值為 1。如果您有多個 NGINX 工作者,請增加此設定。
  • **BatchStrategy:**若要在小批次處理容納盡可能多的記錄 (最多為 MaxPayloadInMB 限制),請將 BatchStrategy 設定為 MultiRecord,將 SplitType 設定為行。

如果您使用的是實作 Gunicorn 的 SageMaker 架構容器,請將這些屬性作為環境變數傳遞給 Docker 容器:

  • **SAGEMAKER _MODEL_SERVER_TIMEOUT:**Gunicorn 伺服器的逾時。若要在關閉連線之前預留更多時間處理請求,請增加此值。
  • **SAGEMAKER _MODEL_SERVER_WORKERS:**每個 CPU 的工作者數目。

增加 NGINX.conf 逾時設定

如果您使用的是 Amazon SageMaker 的預先建置 Docker 容器之一,則無法修改 NGINX.conf 檔案。只有當您使用自己的 Docker 容器時,才能修改 NGINX.conf。

NGINX 逾時可能會導致失敗,因為 Amazon SageMaker 會在逾時後關閉連線。如果您的容器嘗試讀取或寫入已關閉的連線,請求會失敗。修改下列一或多個屬性以因應網路額外負荷。

  • **proxy_read_timeout:**這是 NGINX 在 request.send 呼叫後等待模型回應的時間。增加此值,讓 Amazon SageMaker 有更多時間在關閉連線之前處理請求。
  • **worker_processes:**這是傳入連線的執行緒數目。在大多數情況下,該值應等於或大於 CPU 核心的數量。例如,對於雙核心執行個體類型 (例如 ml.m5.large),請將此屬性設定為至少兩個。
  • **worker_connections:**這是每個工作者處理程序的同時連線數目上限。最佳實務是將此值的起始值設為 1,024。

如需有關組態設定的詳細資訊,請參閱 NGINX 文件中的 Module ngx_http_proxy_module


AWS 官方
AWS 官方已更新 2 年前