使用依赖项部署REST API

时间:2018-05-23 14:25:36

标签: rest api machine-learning

我想将经过培训的机器学习模型部署为REST API。 API将获取文件并首先将其分解为功能。问题是此步骤取决于其他库(例如FFTW)。然后,API将使用上一步中的功能查询模型。

理论上,我可以在云中启动虚拟机,在那里安装所有依赖项,并将终点指向该VM。但如果我们有并发请求,这将无法扩展。

理想情况下,我喜欢将所有内容放在API网关中并利用无服务器范例,因此我不必担心可扩展性。

1 个答案:

答案 0 :(得分:1)

首先,您需要将模型分解为不同的步骤。从您的问题我看到预处理和模型推断步骤。 您的预处理包括依赖项,如FFTW。 你没有指定你有什么样的模型,但我认为它还需要某种环境和/或依赖。

话虽如此,您需要做的是为每一步实施2项服务。 最好将它们打包到docker镜像中,以便保持每个容器的隔离,并且您将能够轻松地部署它们。

通过使用AWS ECS或Kubernetes部署到云提供商和docker业务流程中,可以实现docker杠杆的可扩展性。

有一个开源项目hydro-serving可以帮助您完成此任务。

在这种情况下,您只需要关注模型本身。 hydro-serving负责基础设施。

如果预处理阶段是作为Python脚本实现的 - 我们可以使用requirements.txt中的所有deps在各个容器中部署它。 模型也是如此 - 它具有开箱即用的Tensorflow和Spark模型。 否则,很容易调整现有机制以满足您的要求(其他语言/工具包)

然后,假设您已在某个地方拥有hydro-serving个实例,则可以使用hs upload --host $HOST --port $PORT上传您的步骤 并与您的模型组成一个应用程序管道。 您可以通过HTTP api,GRPC api或Kafka主题访问您的应用程序。

如果您指定要尝试发送到REST API的文件,那将会很棒。 可能您需要以某种方式对它们进行编码,以便通过REST API发送它们。另一方面,你可以通过GRPC api发送它们。

披露:我是hydro-serving

的开发者