跳到正文
vLLM Blog· the Kinference Team·· 1 天前精选AI 评分71

Buoyant 开源 Kinference:面向 vLLM 与 Kubernetes 的推理控制平面

Introducing Kinference: An Open Source Inference Control Plane for vLLM and Kubernetes

AI 导读

Buoyant 发布开源项目 Kinference,作为 vLLM 与 Kubernetes 之上的推理控制平面,提供 token 限流、租户用量与成本追踪、负载均衡和推理策略。

推荐理由

原文给出 KV cache 感知负载均衡的基准对比和策略配置示例,可据此判断推理平台层的调度取舍。

正文 · AI 翻译

我们很高兴地宣布 Kinference [kay-inference],这是一个新的开源项目,用于使用 vLLM 构建可扩展的推理平台。

Kinference by Buoyant
Buoyant 出品的 Kinference

我们在 Buoyant 创建了 Kinference,此前我们看到客户在其环境中运行开放权重模型时举步维艰。我们将 Kinference 设计为你所需构建平台的控制平面层。它使用 vLLM 完成底层推理,并提供在实践中构建推理平台所需的一系列功能。这包括令牌速率限制、租户使用量和成本跟踪、智能负载均衡以及推理策略。

Kinference Architecture
Kinference 架构

Kinference 可以与你现有的技术栈配合使用。使用 Kinference 只需将推理客户端指向其 HTTP 端点,并向该端点发送兼容 OpenAI 或 Anthropic 的推理流量即可。

Kinference 为一组异构且不断演进的模型提供服务,这些模型运行在异构且不断演进的 GPU 池上,并服务于异构且不断演进的客户端集合。

推理负载均衡与性能

除了策略和路由层之外,Kinference 还提供针对推理的负载均衡,它会考虑 GPU 队列大小、历史性能以及 GPU 上 KV 缓存内容等信号。尤其是这种 KV 缓存感知能力,使 Kinference 能够将请求发送到针对该特定请求执行工作量最少的 vLLM worker。

对 GPU 的 KV 缓存内容进行建模,可以为分布式推理带来显著的性能提升。例如,在我们的公开 Kinference 基准测试中,我们展示了与标准 Kubernetes 负载均衡(下图中标记为“service”)相比,Kinference(标记为“kinference”)在一种工作负载类型上能够将请求的首令牌时间(TTFT)中位数缩短 95%,端到端延迟中位数缩短 45%。

Time to First Token at light load
轻负载下的首令牌时间

通过将缓存感知纳入策略,平台所有者可以创建策略,将简单请求发送到成本更低的模型——但前提是这比一开始就发送到昂贵模型的工作量更少。

在上面的空载延迟基准测试中,我们试图单独衡量 Kinference 的 KV 缓存感知负载均衡的效果。在下面的容量基准测试中,我们测量了每个端点在延迟 SLO 内每分钟可服务的请求数。

Goodput by concurrency
按并发数计算的有效吞吐量

在容量基准测试中,Kinference 在共享前缀上提供了7.4 倍的有效吞吐量,在多轮对话上提供了约 3.5 倍的有效吞吐量。它能够在共享前缀工作负载上以并发数 32(所测最高值)达到我们选定的 SLO,在多轮对话工作负载上以并发数 8 达到该 SLO,而 kube-proxy 方法在任何并发级别下都无法达到该 SLO。

在我们的此处阅读有关基准测试设置、过程和发现的更多详细信息。

策略驱动的方法

Kinference 的核心是推理策略这一理念。

推理策略允许平台所有者在使用量、性能和优先级之间进行权衡。我们观察到客户在解决如下问题:

  • 我们如何让用户不仅能够请求特定的模型检查点(“请给我 27B 参数、FP8 量化的 Qwen 3.8”),还能请求更广泛的模型类别,例如“任何 Qwen 3.8 模型”或“任何适合编码的模型”?
  • 我们如何将“简单”的推理请求重定向到更便宜的模型,即使用户请求的是昂贵的模型?以及,我们如何在不将整个提示历史发送到冷 GPU 并造成巨大延迟损失的情况下做到这一点?

我们没有构建一组一次性功能,而是在 Kinference 中构建了一个策略层,可以表达所有这些功能——以及许多其他功能。

例如,以下是如何为 Kinference 定义 YAML 策略,按复杂度级别对提示进行语义分类,并将较简单的提示路由到更便宜的模型——除非考虑到缓存使用情况,将其发送到昂贵模型会更快。

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: smart-semantic-routing
  namespace: inference
spec:
  rules:
  - name: low-complexity-consider-qwen
    matches:
    - model: glm-5.3
      tag: complexity-low
    route:
      consider:
      - models: { names: [ qwen-3.6-27b, glm-5.3 ] }
      select: [ { minimize: PredictedTTFT } ]

这是另一个示例,使用 Kinference 在队列深度或缓存压力表明 GPU 已饱和时,将多余请求突发到云提供商端点(如 OpenAI、Anthropic、Databricks 等)。

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: burst-policy
  namespace: inference
spec:
  rules:
  - name: burst-to-cloud
    route:
      exclude:
      - name: drop-overloaded-workers
        drop:
          backend:       { type: Local }
          queuedPrompts: { greaterThan: 2 }
 
      select:
      - { type: Local,
          minimize: PredictedTTFT }
      - { type: Provider,
          order: [bedrock, databricks] }

最后,这是一个策略示例,根据提示是否包含 PII 对其进行语义分类,并在 GPU 池饱和时将请求突发到第三方提供商。

apiVersion: kinference.buoyant.io/v1alpha1
kind: InferencePolicy
metadata:
  name: pii-stays-local
  namespace: inference
spec:
  rules:
  - name: serve
    route:
      exclude:
      - name: pii-never-leaves-cluster
        if:   { tag: pii-detected }
        drop: { backend: { type: Provider } }
      select:
      - { type: Provider,
          order: [ databricks ] }
      - { type: Local,
          minimize: PredictedTTFT }
      onEmpty: Reject   # fail closed

借助推理策略,平台所有者可以基于租户、请求的模型、底层 GPU 池的状态、提示的语义分类以及许多其他因素,为推理请求应如何路由(或拒绝)创建明确的规则。这些策略可以经过人工或代理审查;可以提交到 git;可以进行 lint 和审查;并且可以独立应用或回滚。

我们认为这个策略引擎对于提供真正的推理平台至关重要。更多信息请参阅我们的 Kinference 策略文档。

推理指标和 SLO

最后,有一套全面的推理相关指标,供平台所有者监控、告警并围绕其构建 SLO。Kinference 报告系统上正在发生的事情,不仅包括其自身健康状况,还包括:

  • 输入和输出的令牌速率,以及输入和输出令牌大小的直方图
  • TTFT、ITL 和 E2E 延迟直方图
  • 未缓存与已缓存的提示令牌,用于成本估算
  • 模型使用情况、GPU 饱和度等
Kinference per-tenant metrics dashboard
Kinference 每租户指标仪表板

几乎所有指标也可按租户查看,因此您可以跟踪租户使用情况,围绕特定租户的性能构建特定的 SLO,以及确保您构建的平台满足其要求可能需要的其他一切。

立即试用

入门很简单:

01 安装 Gateway API CRD

注意:本指南将 Kinference 安装到 default 命名空间中。要安装到不同的命名空间,请覆盖以下 helm 命令中的命名空间。

第一步是安装 Gateway API CRD,它提供了处理流量的标准机制。

GWAPI_VERSION=1.5.1
kubectl apply --server-side --force-conflicts -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v$GWAPI_VERSION/standard-install.yaml

02 安装 Kinference 网关

Kinference 有两个基本组件:流量网关和推理处理器。每个组件独立发布,并作为单独的 chart 提供其 CRD,在组件本身之前安装。

安装网关 CRD 和组件:

helm upgrade -i gateway-crds \
  oci://ghcr.io/buoyantio/charts/gateway-crds \
  --devel
 
helm upgrade -i gateway \
  oci://ghcr.io/buoyantio/charts/gateway \
  --devel --wait

03 安装 Kinference

现在,安装 Kinference 和 Kinference CRD:

helm upgrade -i kinference-crds \
  oci://cr.kinference.ai/kinference-ai/charts/kinference-crds \
  --devel
 
helm upgrade -i kinference \
  oci://cr.kinference.ai/kinference-ai/charts/kinference \
  --set extension.enabled=true \
  --devel --wait

04 确保其正常工作

kubectl get pods

验证进程正在运行:

NAME                           READY   STATUS    RESTARTS   AGE
gateway-cp-566cddc46d-jsqlq    1/1     Running   0          8s
kinference-7bb854cfc5-pp4t7    1/1     Running   0          8s

请始终参考 http://kinference.ai/docs/ 上的最新文档,因为这些步骤会随时间演变。

Kinference 是完全开源的,采用 Apache v2 许可证。它现已在 GitHub 上提供。非常欢迎来自其他部署的反馈、问题和基准报告。

来源:vLLM Blog · vllm.ai