使用 Flask 和 Gunicorn 部署机器学习模型

Deploying ML models with Flask and Gunicorn

我是第一次部署 ML 模型。我正在使用 flask-restful 创建一个 rest api 和 gunicorn 作为独立 WSGI.my 项目目录只有 2 个文件,ML_model.py 和 rApi.py。我使用 gunicorn -w 4 -b 127.0.0.1:5000 rApi:app 安装了 gunicorn 和 运行 服务器并且我能够使用 restAPI。我看到很多东西,比如在线教程中提到的 .env 、 .config 和 wsgi.py 文件。 我错过了什么。如果我已经可以使用 API,为什么还需要所有这些文件?

I see many things like .env , .config and wsgi.py files mentioned

很可能这些东西只是将配置加载到应用程序中的不同方式。

例如,对于 .env 文件,您可以声明一些变量,格式如下:

#.env
MODEL_FILE=some/path/to/a.h5

然后用 python-dotenv 之类的东西加载它,最终允许您在您的应用中执行以下操作:

model_to_use = os.getenv('MODEL_FILE', 'default.h5')
then_do_someting_with(model_to_use)

这会将硬编码(可能是秘密变量)排除在您的代码之外,避免将它们提交给源代码管理。因此,当您将应用程序部署到另一个服务器或系统时,您可以创建一个新的 .env 文件,其中包含:

MODEL_FILE=some/production_ready/file.h5

现在可以使用不同的功能部署相同的代码副本。


如果您想将上述所有配置一起加载,可以使用专用 config.py,然后在您的 app.py 中执行以下操作:

from config import MODEL_FILE
# ...
do_something_with(MODEL_FILE)

有时会看到专用 wsgi.py 文件,以便 WSGI 服务器可以加载模块 wsgi:app。此文件可能包含特定于 WSGI 部署的配置(例如将 ProxyFix middleware 应用到应用程序)。

当然,这只是将该配置应用于应用程序的一种方法。您还可以传入一个 PROXYFIX_ON env var,然后在代码中执行一些逻辑以根据此存在启用实际功能。

后者表示通过更改环境变量来禁用或启用功能。前者表示根据用于 运行 服务器的模块禁用或启用功能。


如何设计应用程序的这一部分完全取决于您。从环境变量加载配置虽然很常见。了解您选择的部署方法如何处理这个问题当然是个好主意。例如: