使用 LLM-D 安装
本指南提供了将 vLLM Semantic Router (vsr) 与 LLM-D 结合部署的分步说明。这也将说明一个关键设计模式,即使用 vsr 作为 model selector,结合使用 LLM-D 作为 endpoint selector。
Model selector 提供将 LLM 查询路由到多个完全不同的 LLM 模型之一的能力,而 endpoint selector 则选择多个 endpoint 之一,每个 endpoint 服务一个等效模型(通常是完全相同的基础模型)。因此,此部署展示了 vLLM Semantic Router 作为 model selector 如何与 LLM-D 等 endpoint selector 解决方案完美互补。
由于 LLM-D 有多种部署配置,其中一些需要更大的硬件设置,我们将演示 LLM-D 与 vsr 配合工作的基线版本,以介绍核心概念。当使用更复杂的 LLM-D 配置和生产级良好路径时,这些核心概念同样适用,如 LLM-D 仓库中此链接所述。
此外,我们将使用 LLM-D 与 Istio 作为 Inference Gateway,以构建在本仓库中记录的 Istio 部署示例的步骤和硬件设置之上。无论是否使用 vsr,Istio 也常用作 LLM-D 的默认网关。
架构概览
部署包含以下组件:
- vLLM Semantic Router:为基于 Envoy 的 Gateway 提供智能请求路由和处理决策
- LLM-D:用于大规模 LLM 推理的分布式推理平台,具有 SOTA 性能。
- Istio Gateway:Istio 的 Kubernetes Gateway API 实现,底层使用 Envoy 代理
- Gateway API Inference Extension:通过 ExtProc 服务器扩展 Gateway API 用于推理的附加 API
- 两个 vLLM 实例各服务一个模型:此拓扑中用于演示 Semantic Router 的示例后端 LLM
前置条件
开始之前,请确保已安装以下工具:
- Docker - 容器运行时
- minikube - 本地 Kubernetes
- kind - Kubernetes in Docker
- kubectl - Kubernetes CLI
- istioctl - Istio CLI
我们在下面的描述中使用 minikube。如上所述,本指南构建在本仓库的 vsr + Istio 部署指南之上,因此将参考该指南的公共部分并在此添加增量步骤。
与 Istio 指南一样,您需要一台至少有 2 个 GPU 支持的机器来运行本练习,以便我们可以部署并测试使用 vsr 在两个不同的 LLM 基础模型之间进行模型路由。
步骤 1:Istio 指南的公共步骤
首先,按照 Istio 指南中的步骤创建本地 minikube 集群。
步骤 2:安装 Istio Gateway、Gateway API、Inference Extension CRDs
完全按照 Istio 指南中的描述安装 Kubernetes Gateway API、Gateway API Inference Extension、Istio 控制平面和 Istio Gateway 实例的 CRDs。使用该指南中记录的相同版本的 Istio。如果您按照 LLM-D 的良好路径,这部分将由 LLM-D 仓库中的 Gateway 提供商 Helm charts 完成。在本指南中,我们手动设置这些以保持与本仓库 Istio 指南的通用性和可重用性。这也将帮助读者理解基于 GIE/EPP 的部署和基于 LLM-D 的部署之间的共同点,以及 vsr 如何在两种情况下使用。
如果正确安装,您应该使用以下命令看到 gateway api 和 inference extension 的 api CRDs 以及 Istio gateway 和 Istiod 的运行 pods。
kubectl get crds | grep gateway
kubectl get crds | grep inference
kubectl get pods | grep istio
kubectl get pods -n istio-system
步骤 3:部署 LLM 模型
现在与 Istio 指南文档类似部署两个 LLM 模型。注意从清单文件名称可知,这些示例命令要从仓库的顶层文件夹执行。LLM-D 部署文档中此步骤的对应部分是 LLM-D Model Service 的设置。为简单起见,本指南不需要 LLM-D Model service。
kubectl create secret generic hf-token-secret --from-literal=token=$HF_TOKEN
# 创建运行 llama3-8b 的 vLLM 服务
kubectl apply -f deploy/kubernetes/istio/vLlama3.yaml
第一次运行时可能需要几分钟(10+)来下载模型,直到运行此模型的 vLLM pod 处于 READY 状态。同样地部署第二个 LLM (phi4-mini) 并等待几分钟直到 pod 处于 READY 状态。
# 创建运行 phi4-mini 的 vLLM 服务
kubectl apply -f deploy/kubernetes/istio/vPhi4.yaml
完成后,您应该能够使用以下命令看到两个 vLLM pod 都处于 READY 状态并正在服务这些 LLM。您还应该看到 Kubernetes 服务暴露了这些模型服务的 IP/端口。在下面的示例中,llama3-8b 模型通过服务 IP 为 10.108.250.109 和端口 80 的 kubernetes 服务提供服务。
# 验证运行两个 LLM 的 vLLM pod 处于 READY 状态并正在服务
kubectl get pods
NAME READY STATUS RESTARTS AGE
llama-8b-57b95475bd-ph7s4 1/1 Running 0 9d
phi4-mini-887476b56-74twv 1/1 Running 0 9d
# 查看这些模型服务的 Kubernetes 服务 IP/端口
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36d
llama-8b ClusterIP 10.108.250.109 <none> 80/TCP 18d
phi4-mini ClusterIP 10.97.252.33 <none> 80/TCP 9d
步骤 4:部署 InferencePools 和 LLM-D 调度器
LLM-D(和 Kubernetes IGW)使用一个名为 InferencePool 的 API 资源,以及一个调度器(称为 LLM-D 推理调度器,有时也等效地称为 EndPoint Picker/EPP)。
部署提供的清单以创建与本练习中使用的 2 个基础模型对应的 InferencePool 和 LLM-D 推理调度器。
为了展示模型选择和端点选择的完整组合,通常需要至少 2 个 inferencepools,每个池至少有 2 个端点。由于这需要 4 个 vllm 服务 pods 实例和 4 个 GPU,这需要更复杂的硬件设置。本指南在两个 InferencePools 中各部署 1 个模型端点,以展示 vsr 的模型选择与 LLM-D 调度器的端点选择配合工作并相互补充的核心设计。
# 为 Llama3-8b 模型创建 LLM-D 调度器和 InferencePool
kubectl apply -f deploy/kubernetes/llmd-base/inferencepool-llama.yaml
# 为 phi4-mini 模型创建 LLM-D 调度器和 InferencePool
kubectl apply -f deploy/kubernetes/llmd-base/inferencepool-phi4.yaml