跳转至正文

康庄大道:智能推理调度

概览

本指南为大多数 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。

先决条件

安装

使用 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 部署

helmfile apply -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 自定义文档

硬件后端

目前在 inference-scheduling 示例中,我们支持 xputpucpucuda 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

使用该组件栈

有关开始发起推理请求的说明,请参阅 我们的文档

清理

移除部署

# 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_POSTFIXgaie-$RELEASE_NAME_POSTFIXms-$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

📝 如需建议更改,请编辑源文件创建 issue