Seldon-Core 监控回流研究

研究 Seldon Core 实时、批处理,请求数据和返回数据进行数据回流,kafka,es, 但是 seldon core 版本必须大于 1.3。

Seldon Core 简介

Seldon Core 将您的 ML 模型(Tensorflow、Pytorch、H2o 等)或语言包装器(Python、Java 等)转换为生产 REST/GRPC 微服务。

Seldon Core 处理数千个生产机器学习模型的扩展,并提供开箱即用的高级机器学习功能,包括高级指标、请求日志、解释器、异常值检测器、A/B 测试、金丝雀等。

使用Seldon Core 进行模型容器化

Model Containerisation with Seldon Core

Seldon Core 可用于将我们的模型转换为可扩展的微服务,并使用 Seldon 云原生 kubernetes 运算符将其部署到 Kubernetes。使用 Seldon Core 部署的模型支持 REST 和 GRPC 接口,但从 1.3 版开始,它也支持本机 kafka 接口,我们将在本文中使用。

file

Seldon 提供了几种生产机器学习模型的方法。最常见的方法是使用现有的预打包模型服务器之一。但是,在这种情况下,我们将通过扩展默认的 sklearn 预打包服务器以添加 SpaCy 及其各自的英语语言模型来构建我们自己的自定义模型服务器。
为了使用 Seldon 容器化我们的模型,我们将遵循使用 Python 语法包装器(Language wrapper)的标准 Seldon 核心工作流程。如下图所示,容器化模型所需的标准步骤是:

  • Create a Python Wrapper Class to expose the model logic
  • Add Python dependencies via requirements.txt file
  • Add environment parameters such as protocol, log level, etc
  • Optionally add any further dependencies with Dockerfile extension

file

在我们的例子中,我们只需要定义一个 Python 包装器,它包括:

  • 导入本文训练部分中使用的 ML 管道的代码
  • 加载模型工件的 init 方法
  • 每次发送请求时都会调用的 predict 方法

完整的包装器代码:
file

一旦我们有了包装器,我们就可以使用 s2i CLI 简单地运行 Seldon 实用程序,即:

s2i build . seldonio/seldon-core-s2i-python3:1.3.0 nlp-model:0.1

现在我们已经将我们的模型完全容器化为镜像 nlp-model:0.1,我们将能够在下一节中部署它以进行流处理。

Kafka Stream Processing

Seldon 模型支持 REST、GRPC 和 Kafka 协议——在这个例子中,我们将使用后者来支持流处理。
file

我们有以下组件:

  • Kubernetes 集群——我们所有组件都将部署到的 Kubernetes 集群
  • Reddit Source — 以 reddit 评论流的形式生成输入数据的组件
  • Kafka Queue — Kafka 集群组件,将处理消费者和生产者提供的数据流
  • Seldon ML Service — 我们使用 Seldon 部署的容器化 reddit 分类器模型
  • Kafka model_input 主题——Reddit Source 将产生的输入主题,以及我们的 Seldon 模型将从中消费的输入主题
  • Kafka model_output topic — 其他应用程序可以从中消费的输出主题
  • 其他应用程序——在我们的例子中,这是一个单一的消费者应用程序,但是这可能包括任何其他想要从 model_output 主题消费的应用程序

为简单起见,我们将跳过设置 kubernetes 集群所需的步骤——包括设置 Kafka 代理和安装 Seldon Core——但您可以在笔记本示例中找到完整的说明。
现在我们可以部署我们的模型了。为此,我们只需要按照 SeldonDeployment 模式定义我们的部署配置文件:
file

在配置 YAML 中可以看到,该结构包含以下关键点:

  • The name of the model name: reddit-kafka
  • The graph.name: classifier is the model we will deploy
  • The serverType: kafka enables the deployed microservice with the kafka interface (as opposed to the REST or GRPC protocol)
  • KAFKA_BROKER the server for the Kafka broker
  • KAFKA_INPUT_TOPIC The name of the input topic to consume from
  • KAFKA_OUTPUT_TOPIC The name of the output topic to produce to

我们现在可以使用 kubectl 命令创建模型:

kubectl apply -f sdep_reddit_kafka.yaml

创建模型后,我们现在可以将数据发送到输入主题中。我们可以通过使用 kafka-console-producer.sh 实用程序来做到这一点。

file

同样,我们也可以监听模型产生的输出数据。
file

现在,当我们将输入数据发送到输入主题时:

{”data”: {”ndarray”: [”This is an input”]}}

因此,我们将在输出主题流中看到预测:

{“data”:{“names”:[“t:0”,”t:1"],”ndarray”: [[0.6758450844706712, 0.32415491552932885]]},”meta”:{}}

有了这个,我们现在在可扩展的架构中部署了一个模型,用于实时机器学习处理——更具体地说,这个架构允许每个组件的水平和垂直可扩展性。部署的模型可以扩展到可变数量的副本,以及基于 Kubernetes HPA 的自动扩展,可根据资源使用情况进行水平扩展。同样,Kafka 也可以通过代理的数量水平扩展,从而实现低延迟的大吞吐量。这可以在下图中更直观地看到。

file

示例

文本分类

SKLearn Spacy Reddit Text Classification Example¶

本教程中的步骤包括:

  • Train and build your NLP model
  • Build your containerized model
  • Test your model as a docker container
  • Run Seldon in your kubernetes cluster
  • Deploy your model with Seldon
  • Interact with your model through API
  • Clean your environment

环境准备

确保安装以下依赖项,因为它们对于此示例的工作至关重要:

  • Helm v3.0.0+
  • A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)
  • kubectl v1.14+
  • Python 3.6+
  • Python DEV requirements (we’ll install them below)

具体请看ipynb完整代码:examples/models/sklearn_spacy_text/sklearn_spacy_text_classifier_example.ipynb.

使用 Argo Worfklows 进行批处理¶

Batch processing with Argo Worfklows

在notebook中,我们将深入探讨如何使用 Argo Workflows 和 Seldon Core 运行批处理。
依赖项:

  • Seldon core installed as per the docs with an ingress
  • Minio running in your cluster to use as local (s3) object storage
  • Argo Workfklows installed in cluster (and argo CLI for commands)

具体请看ipynb完整代码:examples/batch/argo-workflows-batch/README.ipynb.


相关文章:
Real Time Machine Learning at Scale using SpaCy, Kafka & Seldon Core

为者常成,行者常至