【问题标题】:Deploying ML models with Flask and Gunicorn使用 Flask 和 Gunicorn 部署 ML 模型
【发布时间】:2020-08-23 20:43:35
【问题描述】:

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

【问题讨论】:

    标签: flask deployment gunicorn flask-restful rest


    【解决方案1】:

    我看到很多东西,比如提到的 .env 、 .config 和 wsgi.py 文件

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

    例如对于.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,然后在代码中做一些逻辑来根据这个的存在来启用实际的功能。

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


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

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2019-11-25
      • 2019-03-20
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多