启动时加载 FastAPI 项目中的模型

Coc*_*zor 10 deployment fastapi

所以我目前正在开发一个为多种 NLP 服务提供服务的 FastAPI 项目。为此,我想提供来自 spacy 和 Huggingface 的不同模型。

由于这些模型非常大,因此为每个发布请求加载模型时的推理时间非常长。我的想法是在 FastAPI 启动时加载所有模型(在 app/main.py 中),但是,我不确定这是否是一个好的选择/想法,或者这种方法是否有一些缺点,因为模型会在缓存中(?)。(信息:我想对项目进行 dockerize,然后将其部署在虚拟机上)

到目前为止,我无法在互联网上找到任何指导,所以我希望在这里得到一个好的答案:)

提前致谢!

Yag*_*nci 8

gunicorn如果您使用+工作堆栈部署应用程序uvicorn。您可以使用gunicorn--preload标志。

来自gunicorn的文档

预加载应用程序

--preload 默认值:False

在分叉工作进程之前加载应用程序代码。

通过预加载应用程序,您可以节省一些 RAM 资源并加快服务器启动时间。不过,如果您将应用程序加载推迟到每个工作进程,则可以通过重新启动工作进程来轻松重新加载应用程序代码。

您只需要--preload在运行选项中使用标志即可。

gunicorn --workers 2 --preload --worker-class=uvicorn.workers.UvicornWorker my_app:app
Run Code Online (Sandbox Code Playgroud)