康庄大道:智能推理调度
概览
本指南为大多数 vLLM 部署提供了推荐的开箱即用型调度配置,通过负载感知和前缀缓存(prefix-cache)感知均衡,降低尾部延迟并提高吞吐量。这可以在单块能够加载 Qwen/Qwen3-0.6B 的 GPU 上运行。
此配置文件默认使用近似前缀缓存感知评分器,它仅通过观察请求流量来预测前缀缓存的局部性。精确前缀缓存感知路由功能通过内省 vLLM 实例的缓存条目来提高命中率,并将在未来的版本中成为默认选项。
硬件要求
此开箱即用示例需要 2 块任何受支持类型的 GPU
- NVIDIA GPU:任何 NVIDIA GPU(支持情况由所使用的推理镜像决定)
- Intel XPU/GPU:Intel Data Center GPU Max 1550 或兼容的 Intel XPU 设备
- TPU:Google Cloud TPU(使用 GKE TPU 配置时)
备选 CPU 部署:对于仅限 CPU 的部署(不需要 GPU),请参阅 硬件后端 章节以获取特定于 CPU 的部署说明。CPU 部署要求每个副本配备具有 64 核和 64GB RAM 的 Intel/AMD CPU。
先决条件
-
请在本地系统中安装适当的客户端工具以使用本指南。
-
确保您的集群基础设施足以部署大规模推理
-
在系统中安装 监控栈。
-
为安装创建一个命名空间。
export NAMESPACE=llm-d-inference-scheduler # or any other namespace (shorter names recommended)
kubectl create namespace ${NAMESPACE} -
在目标命名空间中创建名为 `llm-d-hf-token` 的 Secret,其键为 `HF_TOKEN`,并匹配有效的 HuggingFace 令牌以拉取模型。
-
[如果使用独立推理调度(standalone-inference-scheduling)请跳过] 配置并部署您的 网关控制平面
安装
使用 helmfile 来组合并安装技术栈。部署该技术栈的命名空间(Namespace)将派生自 ${NAMESPACE} 环境变量。如果您尚未设置此变量,在此示例中它将默认为 llm-d-inference-scheduler。
重要提示: 当使用较长的命名空间名称(如 llm-d-inference-scheduler)时,生成的 pod 主机名可能会变得过长,并由于 Linux 主机名长度限制(通常最大 64 个字符)而导致问题。建议使用较短的命名空间名称(如 llm-d)并设置 RELEASE_NAME_POSTFIX 以生成较短的主机名,从而避免潜在的网络或 vLLM 启动问题。
部署
cd guides/inference-scheduling
- GPU 部署
- CPU 部署
GPU 部署
helmfile apply -n ${NAMESPACE}
仅 CPU 部署
helmfile apply -e cpu -n ${NAMESPACE}
注意: 您可以设置 $RELEASE_NAME_POSTFIX 环境变量来更改发布名称。这是我们支持并发安装的方式。例如:RELEASE_NAME_POSTFIX=inference-scheduling-2 helmfile apply -n ${NAMESPACE}
推理请求调度器和硬件选项
推理请求调度器
- 网关选项
- 独立选项
网关选项
注意: 此选项使用 Istio 作为默认网关提供商,请参阅 网关选项 以了解如何使用特定提供商进行安装。
要指定您的网关选择,可以使用 -e <gateway option> 标志,例如:
helmfile apply -e kgateway -n ${NAMESPACE}
适用于 DigitalOcean Kubernetes 服务 (DOKS)
helmfile apply -e digitalocean -n ${NAMESPACE}
注意: DigitalOcean 部署使用公开的 Qwen/Qwen3-0.6B 模型(不需要 HuggingFace 令牌),并针对具有自动容忍度和节点选择器的 DOKS GPU 节点进行了优化。Gateway API v1 兼容性修复已自动包含在内。
要查看支持哪些 Gateway 选项,请参考我们的 Gateway 提供商先决条件文档。每个提供商的 Gateway 配置都在 gateway-configurations 目录中进行跟踪。
您还可以自定义 Gateway,更多信息请参阅我们的 Gateway 自定义文档。
独立选项
通过此选项,推理调度器将与 Envoy 代理边车(sidecar)一起部署,而不是使用 Kubernetes Gateway API 配置的代理。
要作为独立推理调度器部署,请使用 -e standalone 标志,例如:
helmfile apply -e standalone -n ${NAMESPACE}
硬件后端
目前在 inference-scheduling 示例中,我们支持 xpu、tpu、cpu 和 cuda GPU 的配置。默认情况下,我们使用支持 cuda GPU 的模型服务器数值,但若要在其他硬件后端之一上部署,您可以使用:
helmfile apply -e xpu -n ${NAMESPACE} # targets istio as gateway provider with XPU hardware
# or
helmfile apply -e gke_tpu -n ${NAMESPACE} # targets GKE externally managed as gateway provider with TPU hardware
# or
helmfile apply -e cpu -n ${NAMESPACE} # targets istio as gateway provider with CPU hardware
CPU 推理
此情况要求使用第 4 代 Intel Xeon 处理器 (Sapphire Rapids) 或更高版本。
使用网关选项时安装 HTTPRoute
请遵循特定提供商的说明来安装 HTTPRoute。
为 "kgateway" 或 "istio" 安装
kubectl apply -f httproute.yaml -n ${NAMESPACE}
为 "gke" 安装
kubectl apply -f httproute.gke.yaml -n ${NAMESPACE}
为 "digitalocean" 安装
kubectl apply -f httproute.yaml -n ${NAMESPACE}
验证安装
- 网关选项
- 独立选项
网关选项
- 首先,您应该能够列出所有 helm release,以查看已安装到所选命名空间中的 3 个 chart。
helm list -n ${NAMESPACE}
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gaie-inference-scheduling llm-d-inference-scheduler 1 2025-08-24 11:24:53.231918 -0700 PDT deployed inferencepool-v1.2.0 v1.2.0
infra-inference-scheduling llm-d-inference-scheduler 1 2025-08-24 11:24:49.551591 -0700 PDT deployed llm-d-infra-v1.3.6 v0.3.0
ms-inference-scheduling llm-d-inference-scheduler 1 2025-08-24 11:24:58.360173 -0700 PDT deployed llm-d-modelservice-v0.3.17 v0.3.0
- 通过此示例,您开箱即用应拥有以下资源
kubectl get all -n ${NAMESPACE}
NAME READY STATUS RESTARTS AGE
pod/gaie-inference-scheduling-epp-f8fbd9897-cxfvn 1/1 Running 0 3m59s
pod/infra-inference-scheduling-inference-gateway-istio-6787675b9swc 1/1 Running 0 4m3s
pod/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5b58lw9 1/1 Running 0 3m55s
pod/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5bt5f9s 1/1 Running 0 3m55s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gaie-inference-scheduling-epp ClusterIP 10.16.3.151 <none> 9002/TCP,9090/TCP 3m59s
service/gaie-inference-scheduling-ip-18c12339 ClusterIP None <none> 54321/TCP 3m59s
service/infra-inference-scheduling-inference-gateway-istio LoadBalancer 10.16.1.195 10.16.4.2 15021:30274/TCP,80:32814/TCP 4m3s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gaie-inference-scheduling-epp 1/1 1 1 4m
deployment.apps/infra-inference-scheduling-inference-gateway-istio 1/1 1 1 4m4s
deployment.apps/ms-inference-scheduling-llm-d-modelservice-decode 2/2 2 2 3m56s
NAME DESIRED CURRENT READY AGE
replicaset.apps/gaie-inference-scheduling-epp-f8fbd9897 1 1 1 4m
replicaset.apps/infra-inference-scheduling-inference-gateway-istio-678767549 1 1 1 4m4s
replicaset.apps/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5b8 2 2 2 3m56s
独立选项
- 首先,您应该能够列出所有 helm 发布,以查看已安装到所选命名空间中的 2 个图表(chart)
helm list -n ${NAMESPACE}
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gaie-inference-scheduling llm-d-inference-scheduler 1 2025-08-24 11:24:53.231918 -0700 PDT deployed inferencepool-v1.2.0 v1.2.0
ms-inference-scheduling llm-d-inference-scheduler 1 2025-08-24 11:24:58.360173 -0700 PDT deployed llm-d-modelservice-v0.3.17 v0.3.0
- 通过此示例,您开箱即用应拥有以下资源
kubectl get all -n ${NAMESPACE}
NAME READY STATUS RESTARTS AGE
pod/gaie-inference-scheduling-epp-f8fbd9897-cxfvn 1/1 Running 0 3m59s
pod/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5b58lw9 1/1 Running 0 3m55s
pod/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5bt5f9s 1/1 Running 0 3m55s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gaie-inference-scheduling-epp ClusterIP 10.16.3.151 <none> 9002/TCP,9090/TCP 3m59s
service/gaie-inference-scheduling-ip-18c12339 ClusterIP None <none> 54321/TCP 3m59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gaie-inference-scheduling-epp 1/1 1 1 4m
deployment.apps/ms-inference-scheduling-llm-d-modelservice-decode 2/2 2 2 3m56s
NAME DESIRED CURRENT READY AGE
replicaset.apps/gaie-inference-scheduling-epp-f8fbd9897 1 1 1 4m
replicaset.apps/ms-inference-scheduling-llm-d-modelservice-decode-8ff7fd5b8 2 2 2 3m56s
注意: 这假设您的 ${NAMESPACE} 中没有其他指南部署,并且您没有通过 ${RELEASE_NAME} 环境变量更改默认 Release 名称。
使用该组件栈
有关开始发起推理请求的说明,请参阅 我们的文档
清理
移除部署
# From examples/inference-scheduling
helmfile destroy -n ${NAMESPACE}
# Or uninstall manually
helm uninstall infra-inference-scheduling -n ${NAMESPACE} --ignore-not-found
helm uninstall gaie-inference-scheduling -n ${NAMESPACE}
helm uninstall ms-inference-scheduling -n ${NAMESPACE}
注意:如果您设置了 $RELEASE_NAME_POSTFIX 环境变量,您的发布名称将与上述命令不同:infra-$RELEASE_NAME_POSTFIX、gaie-$RELEASE_NAME_POSTFIX 和 ms-$RELEASE_NAME_POSTFIX。
使用网关选项时清理 HTTPRoute
请按照特定提供商的说明删除 HTTPRoute。
清理 "kgateway" 或 "istio"
kubectl delete -f httproute.yaml -n ${NAMESPACE}
清理 "gke"
kubectl delete -f httproute.gke.yaml -n ${NAMESPACE}
清理 "digitalocean"
kubectl delete -f httproute.yaml -n ${NAMESPACE}
自定义
有关自定义指南的信息以及构建自己的指南的技巧,请参阅 我们的文档
此内容自动同步自 llm-d/llm-d 仓库 main 分支上的 guides/inference-scheduling/README.md。