启动时在 FastAPI 项目中加载模型
loading models in FastAPI projects at startup
所以我目前正在从事一个服务于多种 NLP 服务的 FastAPI 项目。为此,我想提供与 spacy 和 huggingface 不同的模型。
由于那些模型非常大,为每个post请求加载模型时的推理时间非常长。我的想法是 在 FastAPI 启动时加载所有模型(在 app/main.py 中),但是,我不确定这是否好 choice/idea 或者如果这种方法有一些缺点,因为模型将在缓存中(?)。 (说明:我想将项目docker化,然后部署到虚拟机上)
到目前为止我在互联网上找不到任何指导,所以我希望在这里得到一个好的答案:)
提前致谢!
如果您使用 gunicorn
+ uvicorn
工作堆栈部署您的应用程序。您可以使用 gunicorn
的 --preload
标志。
来自 gunicorn
的文档
preload_app
--preload Default: False
Load application code before the worker processes are forked.
By preloading an application you can save some RAM resources as well
as speed up server boot times. Although, if you defer application
loading to each worker process, you can reload your application code
easily by restarting workers.
您只需要在 运行 选项中使用 --preload
标志。
gunicorn --workers 2 --preload --worker-class=uvicorn.workers.UvicornWorker my_app:app
所以我目前正在从事一个服务于多种 NLP 服务的 FastAPI 项目。为此,我想提供与 spacy 和 huggingface 不同的模型。
由于那些模型非常大,为每个post请求加载模型时的推理时间非常长。我的想法是 在 FastAPI 启动时加载所有模型(在 app/main.py 中),但是,我不确定这是否好 choice/idea 或者如果这种方法有一些缺点,因为模型将在缓存中(?)。 (说明:我想将项目docker化,然后部署到虚拟机上)
到目前为止我在互联网上找不到任何指导,所以我希望在这里得到一个好的答案:)
提前致谢!
如果您使用 gunicorn
+ uvicorn
工作堆栈部署您的应用程序。您可以使用 gunicorn
的 --preload
标志。
来自 gunicorn
的文档preload_app
--preload Default: False
Load application code before the worker processes are forked.
By preloading an application you can save some RAM resources as well as speed up server boot times. Although, if you defer application loading to each worker process, you can reload your application code easily by restarting workers.
您只需要在 运行 选项中使用 --preload
标志。
gunicorn --workers 2 --preload --worker-class=uvicorn.workers.UvicornWorker my_app:app