一个开源模型服务(model serving)指南

335 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情

简介

当我们完成模型训练之后,我们如何处理我们的模型呢?

模型本身没有多大价值 —— 关键在于你如何使用它们。无论是推动您的业务决策,还是为您的客户提供新功能,服务框架的作用都是让您的模型栩栩如生。

使用模型服务框架,您可以

  • 通过 API 与模型交互。正因为如此,任何与你的模型对话的东西都可以在不知道任何内部细节的情况下这样做,比如使用了哪些工具来训练它或者它是用什么语言编写的。
  • 将模型与应用程序的其他组件一起部署在云中
  • 轻松扩展模型以满足用户需求

举一个具体的例子,假设您经营一家在线商店,并且您希望您的每个客户都能看到个性化的产品推荐。有很多方法可以为这个任务训练模型,但假设你已经完成了那部分,下一个挑战是让网站与之对话。

即使模型可能很复杂,模型服务框架会隐藏这种复杂性,给我们留下一个简单的 API,这样,每当我们希望客户看到推荐时,我们需要做的就是查询该 API。

批量与实时

有时,您希望模型能够提供即时结果。 在产品推荐示例中就是这种情况,我们希望在客户浏览网站时向他们提供相关建议。

在其他情况下,结果不需要是即时的,并且可以按计划(schedule)访问模型。 想象一下,我们有一些产品的价格每周都会更新,使用的模型是经过训练可以根据季节性趋势进行定价。

许多模型服务框架同时适用于实时和批量使用,但在实现模型服务之前了解您需要哪种方法很重要。

我需要模型服务框架吗?

虽然我们都需要以某种方式与我们的模型进行交互,但模型服务框架并不是唯一的方法。

模型服务的优势在于它可以将复杂的模型隐藏在简单的 API 后面,这使得这种方法非常适合在云中运行的任何应用程序,包括 Web 应用程序。

但并非一切都是基于云的。 比如:边缘/物联网应用。 以使用模型检测人脸的智能相机为例。 在这种情况下,模型需要直接在摄像机的硬件上运行,因为将视频流式传输到远程服务器太慢了。

有什么可供选择的模型服务框架?

开源模型服务框架的选择非常广泛。为了缩小范围,考虑以下几个因素对选择会有所帮助:

  • 机器学习库支持。任何模型都将使用 TensorFlow、PyTorch 或 SKLearn 等 ML 库进行训练。例如,一些服务工具支持多个 ML 库,而另一些可能仅支持 TensorFlow。
  • 模型是如何打包的。一个典型的模型由原始模型资产和一堆代码依赖组成。本指南中的服务工具都是通过将模型 + 依赖项打包到 Docker 容器中来工作的。 Docker 是将软件打包、分发和部署到现代基础设施的行业标准方式。
  • 模型运行的地方。一些服务框架只是为您提供了一个容器,您可以在任何支持 Docker 的地方运行该容器。其他的则建立在 Kubernetes 之上,Kubernetes 是用于自动化部署、扩展和管理容器的最流行的开源解决方案。

考虑到这些因素,让我们看一些可供选择的模型服务框架。

Seldon

Seldon Core 是一个成熟的工具,专为可扩展、可靠的模型服务而构建,它以丰富的开箱即用功能集支持这一点,包括高级指标、日志记录、可解释性和 A/B 测试。

Seldon Core 的一项特别重要的功能是指标和监控。每个模型服务都公开了可以集成到您的软件监控堆栈中的指标,并且它可以与 Seldon 的另一个开源产品 Alibi-Detect 结合使用,对漂移和偏差等模型进行特定的监控。

优点

  • 由 Kubernetes 提供支持。容器编排的事实标准,Seldon 利用其提供所有模型服务功能,以低管理开销提供可扩展且可靠的基础架构。
  • 支持许多 ML 库。包括 PyTorch、TensorFlow、SKLearn。
  • 不需要额外的代码。默认情况下,您无需编写任何代码即可部署模型;您只需告诉 Seldon 在哪里可以找到您的模型资产,然后让它完成剩下的工作。
  • 模型监控。包括启用模型监控的功能。

缺点

  • Kubernetes 并不总是最好的选择。有了 Seldon,您别无选择,只能使用 Kubernetes。如果您只部署一两个模型,那么运行 Kubernetes 可能对您的需求来说成本太高。

BentoML

虽然 Seldon Core 专注于 Kubernetes 上的模型部署,但 BentoML 对模型的部署位置并不挑剔。

使用 Bento 的最简单方法是通过 Docker 容器,但这也不是必需的,因为您可以在自己的基础架构上运行自己的 BentoML 服务实例。

优点

  • 支持许多 ML 库。 包括 PyTorch、TensorFlow、SKLearn。
  • 在任何地方部署模型。 包括 Docker、Kubernetes 或 AWS、GCP 和 Azure 等云平台。

缺点

  • 没有内置编排。编排是关于自动化容器的部署、管理、扩展和网络。 BentoML 由您决定:根据您的部署位置,编排支持会有所不同。 相比之下,Seldon Core 通过 Kubernetes 免费获得这个功能。

Kubeflow 和 KServe

Kubeflow 是最古老的开源 MLOps 框架之一。它涵盖了许多不同的领域,从pipelines、模型训练和模型服务。正如您可能从名称中猜到的那样,它运行在 Kubernetes 之上。

Kubeflow 的现有用户会发现最容易坚持使用它进行模型服务。最近,Kubeflow 的模型服务部分被拆分为一个独立的项目,称为 KServe,您可以在没有 Kubeflow 的其余部分的情况下使用它。

从表面上看,KServe 承诺与 Seldon Core 类似的东西:在 Kubernetes 上运行任何模型。但与 Seldon 相比,KServe 更轻量级,使其更易于设置和运行,但代价是功能更少。

优点

  • 支持许多 ML 库。包括 PyTorch、TensorFlow、SKLearn。
  • 不仅仅是服务。如果完全使用 Kubeflow,那么您可以在同一个系统中训练和部署模型。

缺点

  • Legacy。 在过去几年中,MLOPS 工具有了很大的进步,KServe 和 Kubeflow 在很多方面都落后于这一趋势。
  • 缺少高级监控。与 Seldon Core 相比,这是 Kubeflow 尤其欠缺的一个领域。

原文链接:A guide to open source model serving