使用 Seldon Core 服务模型

1,049 阅读7分钟

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

当您构建机器学习驱动的产品时,弄清楚如何弥合模型与其他一切之间的差距至关重要。 例如,也许你有一个很好的推荐模型,但在我们能够将这些推荐呈现给客户之前,这个模型并没有多大用处。

这就是模型服务的用武之地。在本文中,我们将了解如何使用 Seldon Core 为模型提供服务,这是一个为速度和大规模而构建的开源服务框架,能够一次运行 1000 多个模型。 我将讨论一些让 Seldon 在这个领域独一无二的东西,以及在你的项目中使用和反对使用它的原因。

这是关于 Seldon Core 系列的第一部分。 除了模型服务的基础知识,在以后的部分中,我们将使用 Alibi Detect 监控 Seldon 模型以及将 Seldon 与 ZenML 流水线集成

什么是模型服务?

作为一个模型服务框架,Seldon Core 是一个很好的公司,位于数十个不同的模型服务框架中(请参阅我们的模型服务指南以了解更多关于它们的信息)。

我们想要对模型服务做三件事:

  • 通过 API 与您的模型交互,以便产品的其他组件可以与模型交互,而无需了解其内部细节。
  • 将模型部署到云端(或其他地方,如边缘/物联网环境)。
  • 轻松扩展模型以满足用户需求

可以想象,每个框架都采用不同的方法来解决这些问题。 让我们看看 Seldon 如何在这三点上发挥作用。

Seldon Core 简介

Seldon Core 支持来自各种 ML 框架的模型,包括 TensorFlow 和 PyTorch。它还适用于多种实现语言,支持 R、Julia、C++ 和 Java 以及 Python。这是我们在许多模型服务框架(竞品)中看不到的。

它通过将模型打包到 Docker 容器中来工作。 Seldon 提供了一系列预先构建的 Docker 镜像,许多真实世界的模型可以通过使用其中一个镜像来立即部署,而无需您编写任何额外的代码。

Seldon 在 Kubernetes 之上运行。如果您不熟悉它,Kubernetes 是基于云的容器编排的事实标准,它提供了一种强大而可靠的方式来运行和扩展容器。这是 Seldon 的超能力之一:通过在 Kubernetes 之上运行,Seldon 在规模和可靠性方面为模型服务带来了同样的能力。

因此,您需要维护一个 Kubernetes 集群才能使用 Seldon,但由于所有主要的云提供商都将 Kubernetes 作为托管服务提供,所以,这并不是一个巨大的开销。如果您需要规模化,这是最好的选择。

基于 Kubernetes 也意味着它最适合云部署。它不会用于基于边缘的或物联网场景的模型服务。

Seldon Core 安装

Kubernetes 集群是设置 Seldon Core 的先决条件。 之后,安装 Seldon 就非常简单了。

Seldon 提供了使用 Helm 在 Kubernetes 上安装的说明,这是最简单的方法。

此外,可以选择在本地运行 Seldon。 这样做的好处是,您可以在实际部署任何东西之前在本地试验模型以及提供配置,同时仍然确保您的实验环境与生产中使用的环境相匹配。

Seldon 在这里推荐的方法是使用 Kind(它代表 Docker 中的 Kubernetes)。 有关更多详细信息,请参阅用于本地安装的 Seldon 文档

Seldon 如何为模型服务?

让我们看一个例子。 假设我们有一个用 SKLearn 训练过的模型。 实际上,ML 框架并不重要。 它也可以是 PyTorch、Tensorflow 等。

首先,我们需要将模型资产托管在 Seldon 可以访问它们的地方。 这可以是 Google Cloud 存储桶、AWS S3 存储桶等。 在内部,Seldon 使用名为 rclone 的工具从云存储位置读取文件,因此它可以与 rclone 支持的 40 多个平台中的任何一个一起使用。

接下来我们需要配置模型服务器。 配置如下所示:

apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
  name: iris-model
  namespace: seldon
spec:
  name: iris
  predictors:
  - graph:
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/v1.14.0-dev/sklearn/iris
      name: classifier
    name: default
    replicas: 1

这似乎是很多配置,所以让我们分解重要的部分:

  • 名称(Name)每个模型都需要有一个唯一的名称。 这样我们就可以在部署后对其进行管理,在应用程序日志中识别它等。
  • 预测器(Predictors):这是我们描述模型本身的地方。 可以有多个预测变量,但对于我们的目的而言,这并不重要。

需要使用以下信息设置预测器:

  • 实现(Implementation)这是一个什么样的模型服务? 在我们的例子中,它是一个 SKLearn 服务。
  • 模型 URI(Model URI)模型资产在哪里? 我们在这里使用谷歌云存储桶。
  • 副本(Replicas):模型服务可能需要处理数千个请求。 我们可以通过设置副本的数量在多个服务之间均衡负载

我们使用 Kubernetes 命令行工具部署服务:

kubectl apply -f iris_server.yaml

就像这样,我们有一个模型服务,我们可以使用 REST API 与模型进行交互。 无需编写任何代码,我们就将模型变成了 Web 服务,这非常酷。 不仅如此,Seldon 还为您的 API 提供基于 Swagger 的文档。 您可以使用它来试验和测试您的 API。

image.png

使用自定义 Docker 镜像服务

虽然 Seldon 的预构建 Docker 镜像可以让您轻松启动和运行,但有时我们需要构建自己的镜像。这包括当我们的模型需要安装特殊依赖项时,或者当我们想要对模型输入进行一些预处理时。

Seldon 使用并推荐了一种构建 Docker 镜像的特殊方式,称为 source to image (s2i)。最初,s2i 是由 RedHat 开发的,旨在提供一种从源代码生成镜像的方法。

如果您已经熟悉如何使用 Dockerfile 构建 Docker 映像,那么 s2i 只是此过程之上的一个抽象。如果您更喜欢编写自己的 Dockerfile,也不必使用 s2i,这只是推荐的方法。

尽管这一切听起来有点复杂,但实际上并不是这样。构建自己的镜像是大多数团队在某个时候不可避免地最终会做的事情,Seldon 花了很多心思让这件事变得轻松。

Seldon 适合你吗?

Seldon 是一个成熟的模型服务框架,兼容多种不同类型的 ML 模型,并且可以跨多种编程语言工作。它预先构建的 Docker 镜像使得将模型投入生产变得非常容易,而且因为它建立在 Kubernetes 之上,你也可以获得 Kuberentes 所著名的可靠性和规模。

但并不是每个人都想建立和维护一个 Kubernetes 集群,而且对于很多人来说,承担这样做的复杂性和成本并没有什么意义。如果您正处于构建基于 ML 的产品的早期阶段,并且您预计短期内不会有大规模的需求,情况尤其如此。

话虽如此,使用 Kubernetes 变得越来越容易。这个过程从托管的 Kubernetes 服务开始,这些服务为您处理配置和扩展集群。

最近,谷歌发布了 Autopilot,它可以让你在 Kubernetes 上运行东西,而无需运行自己的集群,并且只需为 CPU 和内存资源付费。由于 Autopilot 的限制,Seldon 还不能在上面运行,但如果这种情况发生变化,那么进入的门槛就会降低很多,即使对于那些早期项目,Seldon 也将是一个不错的选择。

除了模型服务的用途之外,Seldon Core 还有更多好处。在下一篇博客中,我们将看看 Alibi Detect,它可以用来监控 Seldon 模型。

在那之前,可以看看我们在 Github 上的 Seldon 示例

原文链接:Serving models with Seldon Core