如何解决 Amazon SageMaker 推理错误“从上游读取响应标头时出现上游超时(110:连接超时)”?

1 分钟阅读
0

当我部署 Amazon SageMaker 端点或执行 BatchTransform 任务时,连接超时并出现如下错误: "upstream timed out (110: Connection timed out) while reading response header from upstream, client: 169.xxx.xxx.xxx, server: , request: "POST /invocations HTTP/1.1", upstream: "http://unix:/tmp/gunicorn.sock/invocations" , host: "169.xxx.xxx.xxx:8080"

简短描述

此错误表示 NGINX 和 Web 服务器之间的连接存在问题。无论您使用自己的容器还是预构建的容器,这两个组件都会在模型容器中运行。这些组件与 SageMaker 托管或批量转换没有直接关系。但是,当 NGINX 和 Web 服务器之间的连接超时时,SageMaker 无法从 /invocations 端点获得推理。

要解决此问题,请执行以下操作:

  1. 减少算法容器的延迟或增加容器的超时限制。
  2. 增加 NGINX.conf 超时设置。

解决方法

减少算法容器的延迟或增加超时限制

  • **如果您正在运行托管服务的推理代码:**您的模型容器必须在 60 秒内响应请求。模型本身可能具有最长 60 秒的处理时间。如果您知道自己的模型需要 50-60 秒的处理时间,请将开发工具包套接字超时设置为 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),请将此属性至少设置为 2。
  • **worker_connections:**这是每个工作进程同时连接的最大数量。最佳实践是将此值的起始值设置为 1024。

有关配置设置的更多信息,请参阅 NGINX 文档中的 Module ngx_http_proxy_module


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