【发布时间】:2021-12-03 21:56:06
【问题描述】:
我们在生产环境中部署了一个使用 FastAPI 的模型预测服务,不幸的是,一些请求由于 10 秒超时而失败。在并发请求方面,我们通常每秒只加载大约 2/3 个请求,所以我认为这不会对 FastAPI 造成太大压力。我们尝试做的第一件事是将 FastAPI 框架与模型本身隔离开来,当我们执行一些跟踪时,我们注意到在此段上花费了很多时间(6 秒):starlette.exceptions:ExceptionMiddleware.__call__。
我们使用的 gunicorn 配置似乎也没有帮助:
"""gunicorn server configuration."""
import os
threads = 2
workers = 4
timeout = 60
keepalive = 1800
graceful_timeout = 1800
bind = f":{os.environ.get('PORT', '80')}"
worker_class = "uvicorn.workers.UvicornWorker"
非常感谢您就上述部分的含义以及在不太剧烈的负载下导致某些请求出现超时问题的原因提供一些指导。
【问题讨论】:
-
嗨 Riley,我现在面临同样的问题,想知道您是否解决了这个问题?提前致谢
-
你好 Leo,只有在使用大型 NLP 模型时才会出现问题。我们通过使用 GPU 而不是 CPU 解决了这个问题。此外,如下所示,celery 和 redis 适用于这些类型的运行时间较长的任务
-
感谢您的回复,很高兴听到通过切换到 GPU 解决了这个问题,只是想知道
starlette.exceptions:ExceptionMiddleware.__call__到底在做什么,这实际上是应用程序代码的包装器吗?
标签: python api rest fastapi starlette