简介
KServe 提供 一个 Kubernetes 自定义资源定义,用于在任意框架上提供机器学习 (ML) 模型服务。 它旨在通过为常见的 ML 框架(如:Tensorflow、XGBoost、Scikit-Learn、PyTorch 和 ONNX)提供高性能、高度抽象的接口来解决生产模型服务场景。
它封装了自动缩放、网络、健康检查和服务配置的复杂性,为您的 ML 部署带来了尖端的服务功能,如:GPU 自动缩放、归零缩放和金丝雀发布等。 它为 Production ML Serving 提供了一个简单、可插拔且完整的故事(story),包括预测、预处理、后处理和可解释性。
由于 0.7 版本 Kfserving 更名为 KServe ,我们仍然支持之前的KFServing 0.5.x 和 0.6.x 版本发布,请参考相应的发布分支获取文档。
为什么选择 KServe
- KServe 是 Kubernetes 上的标准模型推理平台,专为高度可扩展的场景而构建。
- 跨 ML 框架提供高性能、标准化的推理协议。
- 通过自动缩放(包括:GPU 上的缩放为零)支持现代 serverless 推理工作负载。
- 使用 ModelMesh 提供高可扩展性、density packing 和智能路由。
- 用于生产 ML 服务(包括预测、前/后处理、监控和可解释性)的简单且可插拔的生产服务。
- 具备金丝雀发布、实验、集成和转换器等高级部署。
KServe 基本概念
模型服务控制平面(Model Serving Control Plane)
KServe Control Plane:负责协调 InferenceService
自定义资源。 它为预测器、转换器、解释器创建了 Knative serverless 部署,以根据传入的请求工作负载启用自动缩放,包括在没有收到流量时缩小到零。启用原始部署模式后,控制平面会创建 Kubernetes 的 deployment, service, ingress、HPA 资源。
控制平面组件
- KServe 控制器:负责创建 service, ingress 资源、模型服务器容器和模型代理容器,用于请求/响应日志记录、批处理和模型拉取。
- Ingress Gateway:用于路由外部或内部请求的网关。
在 Serverless 模式下:
- Knative Serving 控制器:负责服务修订管理、创建网络路由资源、带有队列代理的 serverless 容器以暴露流量指标并强制执行并发限制。
- Knative Activator:恢复缩放到零的 Pod 并转发请求。
- Knative Autoscaler (KPA):监视流向应用程序的流量,并根据配置的指标向上或向下扩展副本。
模型服务数据平面(Model Serving Data Plane)
InferenceService 数据平面架构由一个静态组件图组成,这些组件协调单个模型的请求。 集成、A/B 测试和多臂老虎机(Multi-Arm-Bandits)等高级功能应该共同组成 InferenceServices
。
基本概念
组件:每个端点由多个组件组成:“预测器”、“解释器”和“转换器”。唯一需要的组件是预测器,它是系统的核心。随着 KServe 的发展,我们计划增加支持的组件的数量,以支持异常值检测等场景。
预测器:预测器是InferenceService的主力。它只是一个模型和一个模型服务器,使其在网络端点可用。
解释器:解释器启用了一个可选的备用数据平面,除了预测之外还提供模型解释。用户可以定义自己的解释器容器,其中配置了相关的环境变量,如预测端点。对于常见的场景,KServe 提供了像 Alibi 这样的开箱即用的解释器。
转换器(Transformer):转换器使用户能够在预测和解释工作流之前定义预处理和后处理步骤。和解释器一样,它也配置了相关的环境变量。对于常见的场景,KServe 提供了开箱即用的转换器,例如:Feast。
数据平面 (V1)
KServe 具有跨所有模型框架的标准化的预测工作流。
API | Verb | Path | Payload |
Readiness | GET | /v1/models/ |
Response:{"name": , "ready": true/false} |
Predict | POST | /v1/models/:predict |
Request:{"instances": []} Response:{"predictions": []} |
Explain | POST | /v1/models/:explain |
Request:{"instances": []} Response:{"predictions": [], "explainations": []} |
Predict
所有 InferenceServices 都使用 Tensorflow V1 HTTP API。
注意:只有 TensorFlow 模型支持signature_name
和inputs
字段。
Explain
与解释器一起部署的所有InferenceServices都支持标准化的解释API。该接口与Tensorflow V1 HTTP API 相同,只是添加了一个:explain
verb。
数据平面 (V2)
数据平面协议的第二个版本解决了 V1 数据平面协议发现的几个问题,包括跨大量模型框架和服务的性能和通用性。
Predict
The V2 protocol proposes both HTTP/REST and GRPC APIs. See the complete specification for more information.
V2 协议提出了 HTTP/REST 和 GRPC API。 有关详细信息,请参阅完整规范。
KServe 主要组件
单一模型服务
在 CPU/GPU 上为常见的 ML 框架(Scikit-Learn、XGBoost、Tensorflow、PyTorch)以及可插拔的自定义模型运行提供单模型推理的 Serverless 部署。
模型网格(ModelMesh)
ModelMesh 专为大规模、高密度和频繁变化的模型场景而设计。 ModelMesh 智能地在内存中加载和卸载 AI 模型,以对用户的响应和计算占用空间之间进行智能权衡。
模型可解释性
提供 ML 模型检阅(inspection)和解释,KServe 集成了 Alibi, AI Explainability 360, Captum 来帮助解释预测结果并衡量这些预测的置信度。
模型监控
支持有效载荷记录、异常值、对抗性和漂移检测,KServe 集成了 Alibi-detect, AI Fairness 360, Adversarial Robustness Toolbox (ART),以帮助监控生产中的 ML 模型。
高级部署
支持金丝雀发布、模型实验/集成和特征转换器,包括 Feast 以及自定义前/后处理。