自定义推理扩展配置

Gateway with Inference Extension基于推理扩展实现了针对生成式AI推理服务的一系列增强管理能力。您可以通过配置注解调整路由策略,或通过创建ConfigMap来修改或覆盖扩展的部署配置。本文主要介绍如何通过增加注解和创建ConfigMap来修改推理扩展的部署配置。

功能介绍

Gateway API Inference Extension中,InferencePool资源代表一组共享相同计算配置、加速器类型、基础模型和模型服务器的Pod,在逻辑上对AI模型服务资源进行分组和管理。组件和InferencePool资源的绑定关系,可通过InferencePool资源上的注解对路由策略进行自定义配置,也可以通过部署自定义ConfigMap,来覆盖推理扩展Deployment的部署配置。两种方式有以下区别:

对比项

注解方式

ConfigMap方式

覆盖范围

支持变更负载均衡策略、请求排队策略和推理框架及对应的策略配置参数。

可以完全覆盖推理扩展的默认配置,包括Deployment、ServicePodDisruptionBudget。

更新方式

热更新,实时生效。

热更新,实时生效。

配置复杂度

与要修改的配置数量成正比。即覆盖的配置越多,要增加的注解越多。

仅需要部署ConfigMap并为InferencePool增加epp-overlay的注解即可。后续变更可以直接通过更新ConfigMap完成。

组件版本依赖

支持所有版本。

需要组件版本在1.4.0-aliyun.2及以上。

若您只需要更新推理扩展的负载均衡策略或变更推理框架支持,推荐使用注解方式进行配置。若您需要对推理扩展进行更精细的配置调整,则推荐使用ConfigMap方式。

通过配置注解修改推理扩展路由策略

您可以通过为InferencePool资源增加inference.networking.x-k8s.io/routing-strategy注解,将推理扩展使用的负载均衡策略变更为前缀感知的负载均衡。示例如下:

apiVersion: inference.networking.x-k8s.io/v1alpha2
kind: InferencePool
metadata:
  name: vllm-app-pool
  annotations:
    inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE" # 指定负载均衡策略
spec:
  targetPortNumber: 8000
  selector:
    app: vllm-app
  extensionRef:
    name: inference-gateway-ext-proc

支持的配置注解说明

推理扩展支持通过InferencePool注解在多方面进行自定义配置,以下是支持的注解分类说明。

负载均衡策略

注解

类型

默认值

说明

inference.networking.x-k8s.io/routing-strategy

string

DEFAULT

指定推理扩展使用的负载均衡策略,有两种取值:

  • DEFAULT:默认的基于推理服务器负载感知的负载均衡策略。

  • PREFIX_CACHE:在默认负载均衡策略基础上,将共享同一前缀内容的请求尽可能发送到同一个推理服务器Pod的负载均衡策略。

更多关于前缀感知的负载均衡,请参见使用智能推理路由实现前缀感知负载均衡

inference-epp-env.networking.x-k8s.io/prefix-cache-hash-block-size

int64

64

使用前缀感知负载均衡时,推理扩展会将请求拆分成固定大小的“块”,并与缓存中的前缀进行匹配。

此参数用于设定每个“块”的字符串长度。为了达到最佳的负载均衡效果,建议您将此值调整为与模型服务器内部的分块策略相匹配。

inference-epp-env.networking.x-k8s.io/prefix-cache-max-prefix-blocks

int64

128

此参数用于限制单个请求能够匹配到的前缀分块的最大数量。

当实际匹配数超过此限制时,系统将按该上限值进行处理,多余的匹配部分将被忽略。

inference-epp-env.networking.x-k8s.io/prefix-cache-lru-capacity

int64

50000

此参数用于设置缓存中单个前缀记录所能包含的最大分块数量。

请注意,设置的值越大,缓存所需的内存也越多。

请求排队

注解

类型

默认值

说明

inference.networking.x-k8s.io/queueing

string

disabled

是否启用推理请求排队能力。更多关于推理请求的排队能力,请参见使用智能推理路由实现推理请求排队与优先级调度

inference-epp-env.networking.x-k8s.io/total-queue-capacity

int64

104857600

此参数用于限制推理请求队列的总容量(即所有Prompt的字节数之和)。

一旦队列总大小超出此上限,最早进入的请求将被丢弃,以确保队列不会因请求积压而导致内存溢出。

inference-epp-env.networking.x-k8s.io/queue-ttl

Duration

30s

此参数用于设置请求在队列中的最大等待时间。等待时间超过该上限的请求将被丢弃,以避免客户端无谓的等待并及时释放系统资源。

说明

此参数的值是一个可能带有符号的十进制数字序列,每个数字可以带有可选的小数部分和单位后缀,例如 "300ms"、"-1.5h" 或 "2h45m"。有效的时间单位包括 "ns"、"us"(或 "µs")、"ms"、"s"、"m"、"h"。

推理框架支持

注解

类型

默认值

说明

inference.networking.x-k8s.io/model-server-runtime

string

vllm

声明InferencePool后端的模型服务器推理框架,以启用推理扩展对特定推理框架的支持,有三种取值:

  • vllm:适用于vLLM v0vLLM v1。

  • sglang:适用于SGlang。

  • trt-llm:适用于使用TensorRT-LLM推理后端的Triton。

更多信息,请参见推理服务框架支持说明

使用 ConfigMap 管理推理扩展配置

重要

此方式依赖Gateway with Inference Extension组件版本在1.4.0-aliyun.2及以上。

推理扩展和网关一同部署在集群envoy-gateway-system命名空间下,相关资源可以通过标签选择器进行查找。例如,查找部署在default命名空间下的qwen-pool InferencePool资源对应的推理扩展deployment,您可以通过以下命令获取:

kubectl get deployments -n envoy-gateway-system -l inference-pool=qwen-pool,inference-pool-namespace=default

以下示例展示具体的配置步骤。

  1. 创建并部署ConfigMap。

    apiVersion: v1
    data:
      deployment: |- 
        spec:
          replicas: 1
          template:
            spec:
              affinity:
                podAntiAffinity:
                  preferredDuringSchedulingIgnoredDuringExecution:
                  - weight: 100
                    podAffinityTerm:
                      labelSelector:
                        matchLabels:
                          inference-pool: qwen-pool
                          inference-pool-namespace: default
                      topologyKey: kubernetes.io/hostname
              containers:
                - name: inference-gateway-ext-proc
                  resources:
                    limits:
                      cpu: '4'
                      memory: 4G
                    requests:
                      cpu: 500m
                      memory: 1G
    kind: ConfigMap
    metadata:
      name: custom-epp

    ConfigMap修改了推理扩展的容器资源配置并加入了PodpodAntiAffinity配置。

  2. InferencePool增加注解,指定应用自定义的配置ConfigMap,以对指定的推理扩展应用自定义覆盖配置。

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      annotations:
        inference.networking.x-k8s.io/epp-overlay: custom-epp # 指定推理扩展覆盖配置
      name: qwen-pool
    spec:
      extensionRef:
        group: ''
        kind: Service
        name: qwen-ext-proc
      selector:
        app: qwen
      targetPortNumber: 8000