继续创造,加快成长!这是我参加「日新计划 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。

使用 Seldon Core 服务模型

运用自定义 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