Gateway with Inference Extension基于推理扩展实现了针对生成式AI推理服务的一系列增强管理能力。您可以通过配置注解调整路由策略,或通过创建ConfigMap来修改或覆盖扩展的部署配置。本文主要介绍如何通过增加注解和创建ConfigMap来修改推理扩展的部署配置。
功能介绍
在Gateway API Inference Extension中,InferencePool资源代表一组共享相同计算配置、加速器类型、基础模型和模型服务器的Pod,在逻辑上对AI模型服务资源进行分组和管理。组件和InferencePool资源的绑定关系,可通过InferencePool资源上的注解对路由策略进行自定义配置,也可以通过部署自定义ConfigMap,来覆盖推理扩展Deployment的部署配置。两种方式有以下区别:
对比项 | 注解方式 | ConfigMap方式 |
覆盖范围 | 支持变更负载均衡策略、请求排队策略和推理框架及对应的策略配置参数。 | 可以完全覆盖推理扩展的默认配置,包括Deployment、Service和PodDisruptionBudget。 |
更新方式 | 热更新,实时生效。 | 热更新,实时生效。 |
配置复杂度 | 与要修改的配置数量成正比。即覆盖的配置越多,要增加的注解越多。 | 仅需要部署ConfigMap并为InferencePool增加 |
组件版本依赖 | 支持所有版本。 | 需要组件版本在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 | 指定推理扩展使用的负载均衡策略,有两种取值:
更多关于前缀感知的负载均衡,请参见使用智能推理路由实现前缀感知负载均衡。 |
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后端的模型服务器推理框架,以启用推理扩展对特定推理框架的支持,有三种取值:
更多信息,请参见推理服务框架支持说明。 |
使用 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
以下示例展示具体的配置步骤。
创建并部署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修改了推理扩展的容器资源配置并加入了Pod的
podAntiAffinity
配置。为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