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

上次更新日期:2020 年 11 月 5 日

当我部署 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 终端节点获得推理。要解决此问题:

    减少算法容器的延迟或增加容器的超时限制。 增加 NGINX.conf 超时设置。
解决方法 减少算法容器的延迟或增加超时限制 如果您正在运行托管服务的推理代码:您的模型容器必须在 60 秒内响应请求。模型本身可能具有最长 60 秒的处理时间。如果您知道自己的模型将需要 50-60 秒的处理时间,请将开发工具包套接字超时设置为 70 秒。有关更多信息,请参阅容器应如何响应推理请求。 如果您正在运行批量转换的推理代码:使用 ModelClientConfig 配置 InvocationsTimeoutInSecondsInvocationsMaxRetries 参数。

Amazon SageMaker 会在容器上设置已在 CreateModel 和 CreateTransformJob 中指定的环境变量。调整以下 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 超时设置

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。</p