KServe 机器学习模型服务框架介绍

发布时间: 更新时间: 总字数:1384 阅读时间:3m 作者: IP上海 分享 网址

KServe 是一个基于 Kubernetes 的机器学习模型服务框架,支持以 Kubernetes CRD 的形式将单个或多个经过训练的模型(例如 TFServing、TorchServe、Triton 等推理服务器)部署到模型服务运行时,使得模型的部署、更新和扩展变得更加简单快捷。

KServe 介绍

KServe 是一个基于 Kubernetes 的机器学习模型服务框架,提供简单的 Kubernetes CRD,可用于将单个或多个经过训练的模型(例如 TFServing、TorchServe、Triton 等推理服务器)部署到模型服务运行时。

  • ModelServer 和 MLServer 是 KServe 中两个模型服务运行时,用于在 KServe 中部署和管理机器学习模型。
  • KServe 内置了 ModelServer 和 MLServer 两种预定义模型服务运行时,它们能够提供开箱即用的模型服务:
    • ModelServer 使用预测 v1 协议在 KServe 本身中实现 Python 模型服务运行时,MLServer 使用 REST 和 gRPC 实现预测 v2 协议。
    • 如果需要更复杂的用例,您也可以选择构建自己的自定义模型服务器。
    • 此外,KServe 还提供基本 API 原语,可轻松构建自定义模型服务运行时。
    • 您也可以使用其他工具(例如 BentoML)来构建您自己的自定义模型服务镜像。

基于 Knative 使用 InferenceService 部署模型后,您将获得以下 Serverless 能力:

  • 缩容到 0
  • 基于 RPS、并发数、CPU/GPU 指标自动弹性
  • 多版本管理
  • 流量管理
  • 安全认证
  • 开箱即用可观测性

KServe Controller

KServe Controller 是 KServe 的核心组件之一,它负责管理 InferenceService 自定义资源,并通过创建 Knative 服务部署实现自动化的扩缩容,即该服务部署能根据请求流量进行自动扩缩容,并在未收到流量时将服务的 Pod 缩容到 0。这种自动化的扩缩容可以有效地管理模型服务的资源使用,并确保只有在需要时才会使用资源。

KServe arch

Hugging Face Runtime Overview

┌───────────────────────────────────────────────┐
│             KServe InferenceService           │
└───────────────────────────────────────────────┘
                        │
                        ▼
┌───────────────────────────────────────────────┐
│           Hugging Face Runtime Server         │
├───────────────────────────────────────────────┤
│                                               │
│    ┌─────────────┐          ┌─────────────┐   │
│    │     vLLM    │◄───┐  ┌──►  Hugging    │   │
│    │   Backend   │    │  │  │    Face     │   │
│    └─────────────┘    │  │  │   Backend   │   │
│                       │  │  └─────────────┘   │
│    ┌─────────────────────────────────────┐    │
│    │    Backend Selection & Fallback     │    │
│    └─────────────────────────────────────┘    │
│                                               │
└───────────────────────────────────────────────┘
                        │
                        ▼
┌───────────────────────────────────────────────┐
│           OpenAI-Compatible APIs              │
│                                               │
│  • Completions                                │
│  • Chat Completions                           │
│  • Embeddings                                 │
│  • Scoring                                    │
└───────────────────────────────────────────────┘

部署 kserve

前提条件

已在集群中部署 Knative

部署

curl -s "https://raw.githubusercontent.com/kserve/kserve/release-0.15/hack/quick_install.sh" | bash -r

# 或
curl -s "https://raw.githubusercontent.com/kserve/kserve/release-0.15/hack/quick_install.sh" | bash

查看

$ kubectl get pods -n kserve
NAME                                                   READY   STATUS    RESTARTS   AGE
kserve-controller-manager-7f5b6c4d8f-abcde              1/1     Running   0          2m
kserve-localmodel-controller-manager-5b8b6574c7-jz42m   1/1     Running   0          2m

部署 GenAI 服务

  • Create a namespace
kubectl create namespace kserve-test
  • Create an InferenceService
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "qwen-llm"
  namespace: kserve-test
spec:
  predictor:
    model:
      modelFormat:
        name: huggingface
      args:
        - --model_name=qwen
      storageUri: "hf://Qwen/Qwen2.5-0.5B-Instruct"
      resources:
        limits:
          cpu: "2"
          memory: 6Gi
          nvidia.com/gpu: "1"
        requests:
          cpu: "1"
          memory: 4Gi
          nvidia.com/gpu: "1"
  • Create Hugging Face secret
kubectl create secret generic hf-secret \
  --from-literal=HF_TOKEN=your_hf_token_here \
  -n kserve-test
  • create a clusterstoragecontainer resource
apiVersion: "serving.kserve.io/v1alpha1"
kind: ClusterStorageContainer
metadata:
  name: hf-hub
spec:
  container:
    name: storage-initializer
    image: kserve/storage-initializer:latest
    env:
    - name: HF_TOKEN
      valueFrom:
        secretKeyRef:
          name: hf-secret
          key: HF_TOKEN
          optional: false
    resources:
      requests:
        memory: 2Gi
        cpu: "1"
      limits:
        memory: 4Gi
        cpu: "1"
  supportedUriFormats:
    - prefix: hf://
  • Check InferenceService status
$ kubectl get inferenceservices qwen-llm -n kserve-test
NAME       URL                                             READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION                AGE
qwen-llm   http://qwen-llm.kserve-test.example.com         True           100                              qwen-llm-predictor-default-47q2g   7d23h

参考

  1. https://github.com/kserve/kserve
  2. https://kserve.github.io/website/docs/getting-started/quickstart-guide
  3. https://kserve.github.io/website/docs/getting-started/genai-first-isvc
  4. https://kserve.github.io/website/docs/model-serving/generative-inference/tasks/text-generation
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics