移动网站建设的前景,成都响应式网站建设,2017电商网站建设背景,中国能源建设集团有限公司是央企在生产环境中部署机器学习模型是数据工程中经常被忽视的领域。网上的大多数教程/博客都侧重于构建、训练和调整机器学习模型。如果它不能用于实际的预测#xff0c;那么它又有什么用呢#xff1f; 接下来了解一下有哪些部署选项吧#xff1a;评估选项 在生产中部署机器学习模… 在生产环境中部署机器学习模型是数据工程中经常被忽视的领域。网上的大多数教程/博客都侧重于构建、训练和调整机器学习模型。如果它不能用于实际的预测那么它又有什么用呢 接下来了解一下有哪些部署选项吧评估选项 在生产中部署机器学习模型时有多种选择。其中一种流行的方法是使用Azure Machine Learning Studio等云服务设计和训练模型这些服务具有使用拖放工具构建和训练模型的能力。此外将这些模型作为Web服务发布只需点击几下即可。此类设置的附加优势在于该部署会随着应用程序使用量的增加而自动扩展。 虽然短时间看起来很方便但从长远来看这种设置可能会有问题。当我们想要将应用程序从第三方云平台迁移并将其部署在我们的服务器上时就有难度了。由于这些工具与其各自的云平台紧密集成因此这种设置不可移植。此外随着应用程序的扩展云计算的成本可能是一个令人望而却步的因素。 如果我们构建自定义REST-API作为机器学习模型的终点则可以避免这些问题。特别是本文将使用基于Python的Flask Web框架来为模型构建API然后将这个flask应用程序整齐地集成到Docker映像中来进行部署。Docker显然适合解决这个问题因为应用程序的所有依赖项都可以打包在容器中并且可以通过必要时刻简单地部署更多容器来实现可伸缩性。这种部署架构本质上是可扩展的、成本有效的和便携的。DockerDocker是一种开源的容器化技术允许开发人员将应用程序与依赖库打包在一起并将其与底层操作系统隔离开来。与VM不同docker不需要每个应用程序的Guest虚拟机操作系统因此可以维护轻量级资源管理系统。与容器相比虚拟机更重量级因此容器可以相对快速地旋转同时具有较低的内存占用这有助于将来我们的应用程序和模型的可伸缩性。JenkinsJenkins可能是最受欢迎的持续集成和持续交付工具大约拥有1400个插件可自动构建和部署项目。Jenkins提供了一个在其管道中添加GitHub web-hook的规定这样每次开发人员将更改推送到GitHub存储库时它都会自动开始为修改后的模型运行验证测试并构建docker镜像来进行部署。ngrokngrok是一个免费工具可将公共URL传送到本地运行的应用程序它会生成一个可以在GitHub web-hook中用于触发推送事件的URL。FlaskFlask是一个用Python编写的开源Web框架内置开发服务器和调试器。虽然有许多可以替代Web框架来创建REST API但Flask的简单性备受青睐。部署 你可能想知道“我进入了什么样的环状土地”但我保证接下来的步骤将变得简单实用。到目前为止我们已经了解了部署体系结构中的不同组件以及每个组件的功能的简要说明。在本节中将介绍部署模型的详细步骤。 部署过程可以暂时分为四个部分构建和保存模型、使用REST API公开模型将模型打包在容器内以及配置持续集成工具。 在继续下一步之前使用以下命令将GitHub存储库复制到本地计算机。 此存储库包含所有代码文件可用作部署自定义模型的参考。
git clone gitgithub.com:EkramulHoque/docker-jenkins-flask-tutorial.git
注虽然以上提到的步骤适用于Windows操作系统但修改这些命令以在Mac或Unix系统上运行应该是很简单的。训练和保存模型 在本例中使用来自scikit-learn的鸢尾花数据集来构建我们的机器学习模型。在加载数据集后提取用于模型训练的特征x和目标y。为了进行预测先创建一个名为“labels”的字典其中包含目标的标签名称这里将决策树分类器用作模型。你可以在sklearn随意尝试其他分类器 通过调用模型上的方法来生成测试数据的预测标签。 我们使用pickle库将模型导出为pickle文件并将模型保存在磁盘上。从文件加载模型后我们将样本数据作为模型的输入并预测其目标变量。
#!/usr/bin/env python
# coding: utf-8
import pickle
from sklearn import datasets
irisdatasets.load_iris()
xiris.data
yiris.target#labels for iris dataset
labels {0: setosa,1: versicolor,2: virginica
}#split the data set
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size.5)#Using decision tree algorithm
from sklearn import tree
classifiertree.DecisionTreeClassifier()
classifier.fit(x_train,y_train)
predictionsclassifier.predict(x_test)#export the model
pickle.dump(classifier, open(model.pkl,wb))#load the model and test with a custom input
model pickle.load( open(model.pkl,rb))
x [[6.7, 3.3, 5.7, 2.1]]
predict model.predict(x)
print(labels[predict[0]])
构建REST API Flask web框架帮助我们创建与模型通信所需的HTTP端点我们使用pickle.load方法从磁盘读取保存的模型。 Flask提供了一个route装饰器它告诉应用程序哪个URL应该调用相关的函数。它接受2个参数即“rule”和“options”。 rule参数表示绑定到函数的URLoptions是要转发到Rule对象的参数列表。 在示例中/ apiURL绑定到predict函数。因此当我们发出POST请求时它会调用以JSON格式接收特征向量的函数。然后将“特征”向量传递到模型中该模型对”特征”向量进行预测然后以JSON格式返回标签。 请注意Flask类的run方法是在本地开发服务器上运行应用程序。在这里将主机传递为0.0.0.0以便在docker容器中公开它。你可以在docker配置设置中查看更多相关信息。 from flask import Flask, request, jsonify
import json
import pickle
import pandas as pd
import numpy as npapp Flask(__name__)# Load the model
model pickle.load(open(model.pkl,rb))
labels {0: versicolor, 1: setosa,2: virginica
}app.route(/api,methods[POST])
def predict():# Get the data from the POST request.data request.get_json(forceTrue)predict model.predict(data[feature])return jsonify(predict[0].tolist())if __name__ __main__:
app.run(debugTrue,host0.0.0.0)
打包 为了允许Docker托管我们的API我们需要指定一组允许Docker构建映像的指令。这组指令可以保存在Dockerfile中该文件包含了可在命令行上调用来创建Docker镜像的所有命令。 现在开始创建Dockerfile先打开文本编辑器并将其另存为“Dockerfile”不带后缀或前缀。
FROM ubuntu:16.04
FROM python:3.6.5
RUN apt-get update -y \apt-get install -y python-pip python-dev# We copy just the requirements.txt first to leverage Docker cache
COPY ./requirements.txt /app/requirements.txtWORKDIR /appRUN pip install -r requirements.txtCOPY . /appCMD python /app/model.py python /app/server.py
工作目录现包含以下文件 •model.py用于训练和构建模型 •server.py来管理请求和服务器 •Dockerfile包含docker镜像的说明 •requirements.txt包含API所需的库持续集成 到目前为止我们已经创建了Flask API完成了一个Dockerfile并将项目推送到git存储库中。作为先决条件需要安装这3个应用程序--DockerNgrok和Jenkins。本节中的视频将演示之前在架构图中提到的整个过程。结论 在这篇博客中我们深入研究了使用DockerFlask和Jenkins部署机器学习模型的过程。 我们希望对你在生产中部署自己的机器学习模型时有所帮助。可以在此处找到本文中提供的代码的GitHub。
原文链接 本文为云栖社区原创内容未经允许不得转载。