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 接口,我们将在本文中使用。
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
在我们的例子中,我们只需要定义一个 Python 包装器,它包括:
- 导入本文训练部分中使用的 ML 管道的代码
- 加载模型工件的 init 方法
- 每次发送请求时都会调用的 predict 方法
完整的包装器代码:
一旦我们有了包装器,我们就可以使用 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 协议——在这个例子中,我们将使用后者来支持流处理。
我们有以下组件:
- 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 模式定义我们的部署配置文件:
在配置 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 实用程序来做到这一点。
同样,我们也可以监听模型产生的输出数据。
现在,当我们将输入数据发送到输入主题时:
{”data”: {”ndarray”: [”This is an input”]}}
因此,我们将在输出主题流中看到预测:
{“data”:{“names”:[“t:0”,”t:1"],”ndarray”: [[0.6758450844706712, 0.32415491552932885]]},”meta”:{}}
有了这个,我们现在在可扩展的架构中部署了一个模型,用于实时机器学习处理——更具体地说,这个架构允许每个组件的水平和垂直可扩展性。部署的模型可以扩展到可变数量的副本,以及基于 Kubernetes HPA 的自动扩展,可根据资源使用情况进行水平扩展。同样,Kafka 也可以通过代理的数量水平扩展,从而实现低延迟的大吞吐量。这可以在下图中更直观地看到。
示例
文本分类
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
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)