使用Flask在Heroku上部署机器学习模型

机器学习平台即服务

几周前我写了一篇关于使用Spark部署机器学习模型的文章,如果你想批量做预测,而不是实时做预测,这是一种部署ML模型的好方法。

使用Spark部署机器学习模型

但如果你想实时进行预测,那么这个方案就不理想了,因为。

  1. 做预测需要几秒钟的时间,而且不会是实时的。
  2. 将会有手动部署,有一些停机时间。
  3. 没有UI来测试这个解决方案。

将机器学习模型部署为服务可以解决大部分的问题,而且预测将是实时的。但会有一些问题,如可扩展性、监控和服务的停机时间。虽然有很多云计算供应商可以解决这些问题,并提供24*7的支持。不过,如果你是一家小公司或者刚刚开始从事AI/ML,不想花更多的时间来处理云部署或DevOps任务,想要一个快速的部署选项,那么在Heroku上使用Flask部署你的机器学习模型将解决你所有的问题。

使用Flask的Heroku

Heroku是Salesforce的一个平台即服务工具。Heroku由AWS支持,所有Heroku应用/服务都托管在AWS上。AWS提供基础设施并处理所有的负载平衡、资源利用、网络、日志、监控,而Heroku作为一个中间人,提供一个可扩展的、自动化的快速部署平台,具有所有的云功能。使用Flask将提供测试的UI,它可以与企业级的应用程序集成。

图片由作者提供

使用Flask在Heroku上进行部署的步骤

使用Flask在Heroku上的部署有7个步骤,从创建机器学习模型到部署。这些步骤对所有的机器学习模型都是一样的,你可以用这些步骤在Heroku上部署任何ML模型。

  1. 创建ML模型并保存(pickle)它
  2. 为UI和python主文件(app.py)创建Flask文件,该文件可以解开步骤1中的机器学习模型并进行预测
  3. 创建requirements.txt来设置Flask网络应用和所有的python依赖项
  4. 创建Procfile来启动Flask应用命令
  5. 在Github repo中提交步骤1、2、3和4的文件
  6. 在Heroku上创建账户/登录,创建一个应用,与Github repo连接,并选择分支
  7. 在Heroku上选择手动部署(或启用自动部署)。

就这样完成了!!

你可以在Heroku仪表板上查看日志,或者使用Heroku CLI。在日志的最后,它将给出访问用户界面上部署的应用程序的URL。这个URL的语法是这样的 https://app-name.herokuapp.com/

深入探究

现在让我们看看上述7个步骤的实际代码实现(用python)。

步骤1中,我们创建一个ML模型,并将其持久化在一个pickle文件中。

medium.com/media/c74c3…

这里的gbc在第3行,是一个为收入预测而训练的梯度提升分类器模型。如果你想看看我是如何创建这个梯度提升预测模型的,请参考GitHub链接

第2步, 我们将创建flask文件 - index.html和app.py。

**index.html,**是一个flask用户界面文件,用于为模型提供输入(或特征)。

app.py,是一个python主文件,用于解开步骤1中的梯度提升模型,渲染flask UI页面index.html,并根据UI的输入进行预测。

medium.com/media/fb3b3…

第3步中,我们将创建requirements.txt来添加flask应用的所有依赖项。

medium.com/media/7d840…

在第4步,我们将创建Procfile来指定Heroku应用在启动时执行的命令。

medium.com/media/58293…

在第5步,我们将把步骤1-4中的所有文件添加到Github repo中。你可以在这里找到收入预测的Github repo。

第6步,我们将登录Heroku并创建一个新的应用程序,这里是收入预测-api-heroku。

图片由作者提供

接下来,我们将把步骤5中创建的GitHub repo连接到Heroku应用程序,并选择一个分支。

图片由作者提供

最后在第7步,选择手动(或自动)部署,你可以看到构建日志的滚动。一旦应用程序被部署,你将在日志中得到应用程序的URL,并且会显示成功信息。

图片由作者提供

点击查看,它将带你到步骤2中的Flask UI页面。

图片由作者提供

一旦你填写了所有的字段并点击预测,它就会给出最终的预测结果。

作者的图片

Heroku日志

你可以在heroku-cli中查看Heroku应用程序的部署日志。一旦你下载了cli,打开命令提示符并登录到Heroku。

图片来源:作者

登录后,你可以使用以下命令查看部署日志

heroku logs -app 。

图片由作者提供

你可以在日志中看到所有加载的构建库和应用部署步骤。如果你在部署过程中遇到任何错误/失败,这些日志对调试更有用。

就这样吧!使用这些简单的步骤,任何机器学习模型都可以部署在Heroku上,以获得实时预测。

限制因素

  1. 成本-- Heroku每小时的定价比AWS/Azure贵得多。因此,如果你在Heroku上使用多个大规模的应用程序,它肯定会是一个成本较高的事情。
  2. 有限的地理区域- 与AWS/Azure相比,Heroku支持有限的地理区域。
  3. 手动扩展-- Heroku不提供网络应用的自动扩展,但允许手动水平和垂直扩展。
  4. 与Git相关的部署-- Heroku的部署与Git相关,如果你使用其他版本控制工具,这是一个限制。

总结

如果你正在部署一个小/中规模的应用程序,不担心自动扩展,只想专注于建立ML应用程序而不是基础设施,那么使用Heroku生产ML模型是一个很好的选择。

虽然使用Heroku进行部署会花费更多的钱,但同样的费用可以通过更少的资源来构建/监控内部/云端的基础设施和进行DevOps任务来节省。Heroku对初学者友好,你可以在几秒钟内创建一个服务器并部署应用程序。在AWS的支持下,Heroku提供了所有的云平台功能,如:扩展、日志、监控、配置和健康检查。此外,你还可以得到24*7的操作支持,以及无/最小的停机时间。

要访问使用Heroku进行实时预测的完整代码,请参考GitHub链接

如果你想了解更多关于模型部署的策略,请参考------。

机器学习模型的生产化

谢谢你的阅读。如果你喜欢这个故事,请喜欢、分享并关注更多此类内容。如果有任何问题/评论/反馈,请随时联系我们。

Github: github.com/charumakhij…LinkedIn。 www.linkedin.com/in/charumak…


使用Flask在Heroku上部署机器学习模型》最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事来继续对话。

猜你喜欢

转载自juejin.im/post/7055213932931186701