机器学习原来如此轻松!最简单的机器学习部署指南
点击上方关注,All in AI中国
作者:Sylvain Truong
使用Google App Engine快速将你的sklearn代码启动并在云中运行
对于数据科学从业人员来说,首次从概念验证转向工作产品似乎是令人生畏的。幸运的是,不断增长的云服务可以为你提供帮助。迈出部署的第一步并不像以前那么难。
在这篇文章中,我将通过基于sklearn框架的示例演示如何通过App Engine来轻松完成此项操作。
当涉及到根据公司需求建立机器学习应用程序时,工程师们可能会热衷于遵循固有的规则。我个人从Google的ML规则中获取了一些灵感,特别是:
规则#4:保持模型简单,设施正确
这一点来自对研究导向的学术背景要求,我承认这是一个很容易被忽视的规则。与研究环境不同,在公司工作时,机器学习工程师会遇到其他类型的利益相关者,主要是:
- 决策者:对于工程师来说,能够根据决策者的需求提出建议并解释原理,以及能够进行富有成效的沟通是非常重要的。无论在哪种情况下,你如果不能做出对应的解释,"黑匣子"模型被批准和实际使用的几率较小。
- 其他工程师:对于机器学习模型来说,不仅需要在离线模式下运行,而且还要提供"预测"能力,这些模型可能需要与公司的其他IT基础设施进行"通信"(例如,提供实时建议,一个电子商务平台,或在驾驶应用程序上提供驾驶员的ETA)。实现此目标的一种方法是将每个模型视为一个微服务,并使其通过REST API接口进行通信。
基础设施即服务(IaaS)和平台即服务(PaaS)提供商的大规模增长使机器学习工程师可以更轻松地部署产品并确认评估器管道的可靠性。
在可以用来部署模型的云工具中,值得一提的是:
- AmazonWebServices(AWS):Elastic Container Service,SageMaker,Lambda
- Google云平台(GCP):计算引擎,App 引擎,Cloud ML,云功能
- 其他:Heroku,Algorithmia
在这篇文章中,我将展示如何利用云服务部署和提供简单的机器学习模型。
我将专注于PaaS Google App Engine,它是一个完全托管的多功能工具,允许工程师构建几乎任何类型的应用程序。App Engine在大多数流行语言(Java,PHP,Node.js,Python,C#,. Net,Ruby,Go)中都带有标准运行时。它还支持自定义运行时的Docker容器部署。
项目
它是关于部署基于Python包sklearn中可用的20Newsgroups公共数据集的文本分类器。(http://scikit-learn.org/stable/datasets/twenty_newsgroups.html)
此数据集包含论坛文本消息,从20个论坛/主题中抽样组成。主题具有相同的表示,每个论坛消息仅分配给一个主题。
文本分类器旨在将字符串列表作为输入,并为每个字符串返回前3个最有可能的论坛主题,以及置信度分数。
工具
虽然Google Cloud ML提供sklearn,但它仅支持纯sklearn模型。目前尚不支持包裹(Wrapped)的sklearn模型。(https://stackoverflow.com/questions/50086673/can-a-custom-sklearn-model-be-uploaded-to-gcloud-ml-engine/50111742#comment90054000_50111742)
因此,我们将使用多用途工具App Engine练一个封装的文本分类器,将其二进制表示转储到Google云存储中,从那里加载它并提供预测。
我们将使用Python,Google Cloud Python SDK,Flask / Gunicorn进行应用程序部署,并使用sklearn进行模型规范。
基础设施
这是我们将构建的云基础设施的概述。
1 | 设置你的Google Cloud项目
为了能够在GCP上部署应用程序,首先需要设置项目*。 特别是,你必须安装Google Cloud SDK,它允许你从命令行与GCP服务进行交互。
*在撰写本文时,Google提供了为期12个月的试用期。更多信息在这里。(https://console.cloud.google.com/getting-started)
2 | 编写sklearn-Flask应用程序
Github上提供了完整的存储库。它的组织如下:
一些代码亮点
core.py为(Text Vectoriser,Classifier)管道定义了一个包装类。 拟合方法是获取20Newsgroups数据集并在其上拟合了一个20类分类器。
main.py定义了Flask应用程序。特别是,它具有两个处理程序/ fitand / predict以及初始化处理程序_load_model。
_load_model检查模型二进制文件是否在环境变量GCS_BUCKET和GCS_BLOB的指定的路径上可用,如果可用,则加载它:
fit_model适合TextClassifier并将其转储到Google云端存储:
predict_from_model返回基于文本输入参数的预测,假设TextClassifier先前已加载到内存中:
3 | 配置
App Engine服务的所需配置通过app.yaml文件进行通信。 特别是,你可以用它来指定运行时、环境变量、实例资源以及anentrypoint。 该项目的入口点启动了一个基于Flask应用程序的Gunicorn服务器。
4 | 部署
如果你已经安装了Google Cloud SDK,则可以进入项目的根目录并进行调用
如果部署成功,则返回消息应该是这样的(注意项目名称):
我们来做一些测试吧!
我们使用出色的命令行工具curl向我们刚刚部署的端点发出HTTP请求。
测试1:训练模型并将其转储到GCS
几秒钟后返回
测试2:获得预测
输入是字符串是
返回
总结
我们在sklearn和Flask之上构建了一个简单的Python应用程序。我们使用Google App Engine进行模型部署和服务,并使用Google Cloud Storage进行模型二进制存储。这个例子极具普适性,所以你没有理由不开始构建!