在 Heroku 上部署机器学习模型

已发表: 2021-01-05

机器学习是一个持续的过程,包括数据提取、清理、挑选重要特征、模型构建、验证和部署,以在看不见的数据上测试模型。

虽然最初的数据工程和模型构建阶段是一个相当乏味的过程,并且需要花费大量时间来处理数据,但模型部署可能看起来很简单,但它是一个关键过程,并且取决于您想要定位的用例。 您可以为移动用户、网站、智能设备或任何其他物联网设备提供模型。

可以选择将模型集成到主应用程序中,将其包含在 SDLC 或云中。 在云平台中部署和运行模型有多种策略,对于大多数情况来说,这似乎是一个更好的选择,因为谷歌云平台、Azure、亚马逊网络服务和 Heroku 等工具的可用性。

虽然您可以选择以 Pub/Sub 方式公开模型,但 API(应用程序接口)或 REST 包装器更常用于在生产中部署模型。 随着模型复杂性的增加,不同的团队被分配来处理通常称为机器学习工程师的这种情况。 有了这么多的介绍,让我们看看如何在 Heroku 平台上将机器学习模型部署为 API。

目录

什么是 Heroku?

Heroku 是一个平台即服务工具,允许开发人员托管他们的无服务器代码。 这意味着人们可以开发脚本来为特定目的服务其中一个或另一个。 Heroku 平台本身托管在 AWS(亚马逊网络服务)上,这是一种基础设施即服务工具。

Heroku 是一个免费平台,但正常运行时间限制为 500 小时。 这些应用程序作为测功机托管,在不活动 30 分钟后进入睡眠模式。 这可确保您的应用在不活动期间不会占用所有空闲时间。 该平台支持 Ruby、Java、PHP、Python、Node、Go、Scala。 大多数数据科学初学者都会参考这个平台来获得在云中运行和部署模型的经验。

准备模型

现在您已经了解了这个平台,让我们为它准备模型。 训练机器学习模型时,相应的参数存储在内存本身中。 这个模型需要导出到一个单独的文件中,这样我们就可以直接加载这个模型,传递看不见的数据,并获得输出。

通常使用不同的模型格式,例如 Pickle、将 Python 对象模型转换为比特流的 job-lib、ONNX、PMML 或 MOJO,它是一种 H20.ai 导出格式,并提供模型也可以集成到 Java 应用程序中。 为简单起见,假设我们想通过 pickle 导出模型,那么您可以通过以下方式完成:

进口泡菜

Pkl_Filename = “model.pkl”

使用 open(Pkl_Filename, 'wb') 作为文件:

pickle.dump(模型名称,文件)

该模型现在存储在一个单独的文件中,并准备好集成到 API 中使用。

服务器逻辑

为了提供对该模型的访问以进行预测,我们需要一个可以重定向和处理所有客户端请求的服务器代码。 Python 支持 Web 开发框架,其中一个著名的就是 Flask。

它是一个简约的框架,允许用几行代码设置服务器。 由于它是一个最小的包,因此没有明确支持许多功能,例如身份验证和 RESTful 特性。 这些可以与扩展集成。

另一种选择是选择新发布的框架 FastAPI。 它更快、可扩展、有据可查,并带有许多集成包。 现在,让我们继续使用烧瓶设置一个简单的预测路线。

从烧瓶进口烧瓶

进口泡菜

app = Flask(__name__)

使用 open(Filename, 'rb') 作为文件:

模型 = pickle.load(文件)

@app.route('/predict', methods = ['GET', 'POST'])

定义预测():

# 实现通过查询或有效负载获取参数的逻辑

prediction = model.predict([获得的参数])

返回{'结果':预测}

这是一个粗略的代码,用于显示如何处理服务器逻辑。 您可以选择多种策略来更好地实施。

查看:使用 Streamlit 部署 ML 模型的指南

设置部署文件

Heroku 需要我们的应用程序所需的所有依赖项的列表。 这称为需求文件。 它是一个文本文件,列出了应用程序使用的所有外部库。 在此示例中,文件内容将包含:

烧瓶

sklearn

麻木的</p>

熊猫

独角兽

最后一个库 gunicorn 允许我们设置 WSGI 服务器实现,它为客户端和处理 HTTP 流量的服务器形成接口。 Heroku 还需要另一个称为 Procfile 的文件,用于指定应用程序的入口点。 考虑到服务端逻辑文件是用名字main.py保存的,那么要放入这个文件的命令是:

网站:gunicorn 主要:应用程序

“web”是我们正在部署的 dyno 类型,“gunicorn”充当中介,将请求传递给服务器代码“main”并在“main”中搜索“app”。 该应用程序处理此处的所有路线。

最终部署

所有的准备工作都完成了,现在是时候在云中运行应用程序了。 如果不在 Heroku 上,请创建一个帐户,单击创建应用程序,选择任何区域。 之后连接您的 GitHub 帐户,并选择包含以下文件的存储库:服务器代码、model.pkl、requirements.txt 和 Procfile。

在此之后只需点击部署分支! 如果成功,请访问生成的链接,您的应用程序应该已上线。 现在您可以向 appname.herokuapp.com/predict 路由发出请求,它应该会给出预测。 了解有关机器学习模型的更多信息。

结论

这是对什么是 Heroku、为什么需要它以及如何在 Flask 的帮助下部署模型的介绍。 有很多托管平台提供更高级的功能,例如数据管道、流媒体,但 Heroku 作为免费平台对于只想体验部署的初学者来说仍然是一个不错的选择。

如果您有兴趣了解有关机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为工作专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业、IIIT- B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。

使用 Heroku 平台的缺点是什么?

Heroku 不适合大型企业,因为该平台的文档并不广泛。 另一个问题是只读文件系统,这使得大容量文件上传(如电影或高分辨率照片)难以处理。 Heroku 是一个平台即服务提供商,其定制数量有限。 Heroku 仅接受美元付款,不接受欧元等其他货币付款。 对于喜欢用自己的货币支付的企业主来说,这可能是一个小小的不便。 此外,在 CRE(通用运行时环境)中,Heroku 不提供静态 IP 地址。

Heroku 与 AWS 有何不同?

AWS 中的部署过程并不简单,因此在复杂性方面也不是特别友好。 Heroku 提供了一个易于操作的即用型环境。 Heroku 比 AWS 成本更高,因为它需要较少的人工干预。 AWS 可以处理高或非常高的计算需求,而 Heroku 可以处理适度的计算需求。 Heroku 与 AWS 不同,它不需要定期的基础设施维护。 在部署方面,AWS 和 Heroku 都快如闪电。

我可以免费使用 Heroku 多长时间?

Heroku 帐户有一个免费的 dyno 小时池,可用于免费应用程序。 这取代了免费程序的 18 小时限制,使它们能够在必要时全天 24 小时运行。 新帐户可获得 550 小时免费测功小时,如果您使用信用卡验证身份,则额外获得 450 小时。 Heroku 提供免费计划来帮助您学习技术并开始使用。 许多 Heroku 附加组件提供免费计划,Heroku Buttons 和 Buildpacks 也是如此。