当前位置: 首页 > 知识库问答 >
问题:

构建和公开机器学习模型RESTAPI的最佳方法是什么?

诸葛阳成
2023-03-14

我一直致力于设计REST api使用spring框架,并将它们部署在像Tomcat这样的Web服务器上。我还致力于构建机器学习模型,并使用该模型在Python中使用skLearning进行预测。现在我有一个用例,在这个用例中,我想公开一个构建机器学习模型的REST api和另一个进行预测的REST api。什么样的建筑应该帮助我实现同样的目标。(同样的例子可能是亚马逊机器学习。他们已经公开了用于生成模型和进行预测的REST api)

我在互联网上搜索,发现了以下方法:

  1. 用JavaML模型REST api编写整个事情
  2. 用Python-ML模型REST api编写整个事情

但是,使用机器学习,它的模型和预测实际上更容易,在python中更受支持,使用像sklearn这样的库,而不是Java。我真的很想把python用于机器学习部分。

我在考虑和方法,其中我写REST api使用JAVA,但使用子进程使python ML调用。那会起作用吗?

有人能帮我了解我可以采取的可能的建筑方法吗?也请提出最可行的解决方案

提前感谢。

共有3个答案

马国源
2023-03-14

根据我过去所做的,我提出了两个选择(也许还有更多,但这就是我已经实施的)

  1. 如果您可以访问云服务并有预算,那么Azure ML将是您的最佳选择,它将是一个伟大的ML框架和环境,要创建您的rest API,您只需单击两下即可公开它,然后使用任何语言的JSON使用它
  2. 使用scikit学习并用python编写REST API,但可以从任何语言使用,此选项不像Azure ML那样简单且用户友好,因为您必须手动编写所有代码并使用scikit的模型持久性函数,但一旦公开,您可以在java(或任何其他语言)中使用它。我将此作为参考:https://loads.pickle.me.uk/2016/04/04/deploying-a-scikit-learn-classifier-to-production/
  3. Spark MLlib:我还没有尝试过这个选项,但我在stack overflow中问了自己一个问题,得到了一些有趣的答案:如何为Spark MLlib模型服务
拓拔浩阔
2023-03-14

BentoML是一个专门为此设计的开源框架。这使得构建RESTAPI服务器非常容易,以便为应用程序公开机器学习模型。

从JAVA API服务器对python进行子进程调用是可能的,但是由于每次启动进程的延迟和成本,它可能会遇到性能问题。BentoML有一个用python asynio实现的高性能通用API前端,并在该层中进行自适应微批处理。然后将预测请求分组为小批量,并将其发送到托管模型的Python进程,以便进行模型推理。

前面的一个答案建议以标准格式序列化模型,然后从其他语言使用它。有一些框架采用这种方法,例如,PMML格式、用于深度学习模型的ONNX格式,以及可以从scikit学习模型转换的Apple Core ML的mlmodel格式。这种方法有两个缺点:1。将模型转换为在不同的运行时运行时,通常会出现不一致的情况。您将需要一个单独的工作流程来处理预处理和后处理代码,这些代码通常是用Python编写的。当您处理大量模型或非常频繁地更新模型时,额外的工作流通常容易出错,并且很难维护。其中,像BentoML这样的框架使数据科学家能够用Python编写前/后处理逻辑,并将它们与模型捆绑在一起,以便在生产中提供服务。

免责声明:我是BentoML项目的作者

羊舌墨一
2023-03-14

正如其他人提到的那样,

>

另一个选项是将python ML模型存储为。pkl文件,并使用Flask/DJango rest框架部署模型。客户端应用程序可以使用rest服务。这里是youtube上的一个优秀教程。https://www.youtube.com/watch?v=s-i6nzXQF3g

 类似资料:
  • 问题内容: 我认为自己是一位经验丰富的Java开发人员,并计划开始学习C ++。 如果您有相同的经验,即在Java之后学习C ++,那么我想听听您对这样做的最佳方法的想法。 [更新]“最佳方法”没有得到很好的量化。我正在寻找的是利用我现有的Java知识和编程经验,以便可以快速使用C ++。 问题答案: 我已经向Java人员教过C ++,即使我向他们学习了另一个方向。 我对Bruce Eckels的

  • 我更喜欢第一种方式,因为我认为在构建器中重复它们是多余的。第一种方法是否存在一些缺点? 提前谢谢,抱歉我的英语不好。

  • 问题内容: 我想学习蚂蚁。谁能推荐一些有关此主题的良好学习资源?从在线入门教程到深入的书籍,任何资源都会受到赞赏。 谢谢你的帮助! 问题答案: ant.apache.org。看看手册。 蚂蚁最佳实践 不会花很长时间-蚂蚁并不难。 这是一个示例,可以重用的build.xml开头。它足够通用,可供我重复使用。目录命名约定应易于遵循。我使用的布局模仿IntelliJ的输出。

  • 问题内容: 我是来自ASP.NET C#背景的Django领域的新手。我正在寻找一些好的资源来帮助我学习Django / Python的来龙去脉。有什么建议吗? 问题答案: 实用Django的项目,第二版由詹姆斯·贝内特的Django的释放经理 本书涵盖了构建应用程序,添加功能,诸如DVCS的实用开发技术,自动构建部署工具等内容,还有一章专门介绍了可重用开发以及如何提交给PyPI。 本书在必要时还

  • 本文向大家介绍机器学习:知道哪些传统机器学习模型相关面试题,主要包含被问及机器学习:知道哪些传统机器学习模型时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 常见的机器学习算法: 1).回归算法:回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。 常见的回归算法包括:最小二乘法(Ordinary Least Square),逐步式回归(Stepwis

  • 问题内容: 我是NHibernate(和ORMS)的新手,并试图掌握它提供的各种选择。作为参考,我将Fluent NHibernate与单独的业务对象配合使用,而后者又将DTO纯粹用于数据访问。我的应用程序体系结构必须同时支持Windows和Web“前端”。 我的选择是一般方法之一,因为似乎有很多选择。我的DTO看起来像下面的示例。每个DTO都有对ISession的引用,该引用从BO传递给它们。他

  • 本文向大家介绍关于机器学习中的强化学习,什么是Q学习?,包括了关于机器学习中的强化学习,什么是Q学习?的使用技巧和注意事项,需要的朋友参考一下 Q学习是一种强化学习算法,其中包含一个“代理”,它采取达到最佳解决方案所需的行动。 强化学习是“半监督”机器学习算法的一部分。将输入数据集提供给强化学习算法时,它会从此类数据集学习,否则会从其经验和环境中学习。 当“强化代理人”执行某项操作时,将根据其是否