flask 部署_使用Flask部署ML模型

论坛 期权论坛     
选择匿名的用户   2021-6-2 15:41   121   0
<div>
<p></p>
<div style="text-align:center;">
  <img alt="e7e1440cf8b4e0dbfacea47fe1d7d23a.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-53b2a7a456fcdb48f8beb520b7b63cb0.png">
</div>
<p>作者 | Brian Schmidt</p>
<p>来源 | Medium</p>
<p>编辑 | 代码医生团队</p>
<p>此博客文章中的代码可以在此github仓库中找到。</p>
<p>https://github.com/schmidtbri/using-ml-model-abc?source&#61;post_page---------------------------</p>
<h2><b>介绍</b></h2>
<p>这篇博文目的是构建一个使用MLModel基类来部署模型的简单应用程序。</p>
<p>在创建软件时,通过抽象与组件交互使代码更易于理解和发展。在软件设计模式的词汇表中,这称为策略模式。使用策略模式时,软件组件的实现细节(“策略”)不是预先决定的,它们会被推迟到以后。相反,设计使用组件的代码与组件本身之间的接口并将其放入代码中。当编写使用该组件的代码时,它是针对抽象接口编写的,相信组件将提供与商定的接口匹配的实现。之后,可以根据需要实施策略的实施。这种方法可以轻松地在策略的实现之间轻松切换。它还可以决定在运行时使用哪种策略实现,从而使软件更加灵活。</p>
<p>通过MLModel抽象与机器学习模型交互,可以构建可以托管任何实现MLModel接口的模型的应用程序。这样简单的模型部署变得更快,因为不需要定制的应用程序来将模型投入生产。</p>
<p>将在本文展示的应用程序利用这一事实,允许软件工程师在Web应用程序中安装和部署任意数量的实现MLModel基类的模型。</p>
<p>总的来说,目的是展示如何将iris_model包中的模型代码部署到一个简单的Web应用程序中。还想展示MLModel抽象如何在生产软件中更容易地使用机器学习模型。</p>
<h2><b>Flask Web应用程序</b></h2>
<p>使用python构建Web应用程序的最简单方法之一是使用Flask框架。Flask可以轻松设置一个提供Web页面和RESTful界面的简单Web应用程序。</p>
<p>首先,为应用程序包设置了项目结构:</p>
<div class="blockcode">
  <pre class="blockcode"><code>- model_service
    - static ( folder containing the static web assets )
    - templates ( folder for the html templates
    - __init__.py
    - config.py
    - endpoints.py
    - model_manager.py
    - schemas.py
    - views.py
- scripts ( folder containing scripts )
- tests ( folder containing the unit test suite)
- requirements.txt
- test_requirements.txt</code></pre>
</div>
<p>使用此代码在__init__.py文件中设置Flask应用程序:</p>
<div class="blockcode">
  <pre class="blockcode"><code>app &#61; Flask(__name__)
if os.environ.get(“APP_SETTINGS”) is not None:
    app.config.from_object(os.environ[‘APP_SETTINGS’])
bootstrap &#61; Bootstrap(app)</code></pre>
</div>
<p>Flask应用程序是通过实例化Flask()类来启动的。配置由config.py文件中的配置类导入,每个环境有一个配置类。环境名称正在作为“APP_SETTINGS”环境变量导入,这使得在运行时更改应用程序的配置变得容易。这个模式在Flask的应用管理和导入配置细节的更多信息。最后,我使用flask_bootstrap包将bootstrap元素添加到网页,此包在加载配置后启动。</p>
<p>到目前为止,这是一个简单的Flask应用程序无法管理或提供机器学习模型,在下一节中将开始添加执行此操作所需的功能。</p>
<h2><b>Model Manager Class</b></h2>
<p>为了正在构建的Flask应用程序中使用iris_model类,需要有一种方法来管理Python进程中的模型对象。为此将创建一个遵循单例模式的ModelManager类。ModelManager类将在应用程序启动时实例化一次。ModelManager单例从配置中实例化MLModel类,并返回有关正在管理的模型对象的信息以及对模型对象的引用。</p>
<p>这是类声明:</p>
<div class="blockcode">
  <pre class="blockcode"><code>class ModelManager(object):_models &#61; []</code></pre>
</div>
<p>ModelManager类有一个名为_models的私有列表属性,它将包含对管理中的模型对象的引用。这个类不是真正的单例,因为每次实例化类时都会创建一个新对象。但是,same_models列表将始终可用于该类的所有实例。选择以这种方式实现单例模式以保持代码简单。</p>
<p>现在需要一种实际实例化模型类的方法,执行此操作的代码如下:</p>
<div class="blockcode">
  <pre class="blockcode"><code>&#64;classmethod
def load_models(cls, configuration):
    for c in configuration:
        model_module &#61; importlib.import_module(c[“module_name”])
        model_class &#61; getattr(model_module, c[“class_name”])
        model_object &#61; model_class()

        if isinstance(model_object, MLModel) is False:
            raise ValueError(“The ModelManager can only hold references to objects of type MLModel.”)
        cls._models.append(model_object)</code></pre>
</div>
<p>load_models()类方法接收配置
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP