多机与分离式 LLM 推理¶
当模型、KV Cache 或目标吞吐超过单机能力时,推理副本会从一个 Pod 变成多个相互依赖的 Worker。更进一步,Prefill 与 Decode 可以拆成独立资源池,通过网络传输 KV Cache。
这类系统能够提高规模化效率,但也把网络、拓扑、发布、故障和状态管理引入请求关键路径。
1. 先区分三种扩展¶
| 模式 | 扩展对象 | 主要目标 |
|---|---|---|
| Data Parallel | 增加完整模型副本 | 提高总请求吞吐和可用性 |
| 模型并行 | 一个模型副本跨多个 GPU/节点 | 让大模型装得下或降低单请求延迟 |
| P/D 分离 | Prefill 与 Decode 独立池 | 分别优化两类计算并独立扩缩容 |
一个生产系统可能同时使用三者:每个副本内部 TP/PP,多份 DP 副本,再拆分 Prefill 和 Decode Pool。
2. 多机模型副本¶
一个逻辑模型副本
Leader / API Pod
├── Worker 0:GPU 0-7,节点 A
├── Worker 1:GPU 0-7,节点 B
└── Worker 2:GPU 0-7,节点 C
需要整体管理:
- 同时创建和删除;
- 稳定身份与发现;
- Gang/All-or-Nothing 调度;
- 网络和拓扑;
- 所有 Rank 的 Ready;
- 一个 Worker 故障时整体恢复;
- 以完整副本为单位扩缩和发布。
普通 Deployment 不具备这些语义。
2.1 用 DeepSeek-V4-Pro 理解“多机副本”和“多个副本”¶
DeepSeek-V4-Pro 很适合说明这两个容易混淆的层次。官方公开规格为 1.6T 总参数、49B 激活参数、1M Context;模型权重采用 FP4 与 FP8 混合精度。vLLM 官方配方估算混合精度 Checkpoint 约 960GB,并给出一个明确的多节点例子:一个 GB200 NVL4 Tray 有 4 张 GPU,单 Tray 放不下该 Checkpoint,因此使用 2 个 Tray、共 8 张 GPU,以 DP + EP 方式共同承载模型。
参考:DeepSeek-V4 官方发布、DeepSeek-V4 开放权重、vLLM DeepSeek-V4-Pro Recipe
这 2 个节点、8 张 GPU 在平台层首先是一个完整模型副本:
DeepSeek-V4-Pro Replica A
Leader / API Endpoint
├── GB200 NVL4 Tray A1:4 GPU
└── GB200 NVL4 Tray A2:4 GPU
└── vLLM DP + Expert Parallel 通信域
调度器需要一次性为整个组准备节点、GPU、网络和模型数据;任何必要 Rank 未 Ready 时,Replica A 都不应进入外部 Endpoint。Higress 或 AIBrix 也不应该把用户请求直接发送给某个 Worker Pod,只能访问这个组的 Leader/API Service。
当企业为了吞吐和可用性再部署一组相同资源时,才出现“多个完整副本”:
这时有两次不同的调度:
- Kubernetes、Kueue 和 StormService/RoleSet、LeaderWorkerSet 或 KubeRay 决定每个 8-GPU 组如何整体落到节点;
- AIBrix Gateway 决定一次
model=deepseek-v4-pro请求进入 Replica A 还是 B,不能把 A/B 内部 Worker 混成普通 Endpoint 池。
如果只有 Replica A,一个稳定 Leader Service 就足够承接流量,AIBrix 的“选副本”价值有限;如果有 A/B 多组、P/D 两类 Pool、长上下文导致的显著队列差异,或希望做 KV/Session 感知,内部推理路由才开始成为必要能力。
硬件数字不能直接照搬。vLLM 同一配方也给出 8×B300、8×H200 和其他平台的不同参数;实际节点数取决于 GPU 显存、权重精度、Context/并发产生的 KV Cache、Runtime 版本和并行策略。上线前必须按目标硬件复测,而不是由“1.6T 参数”直接推导节点数量。
2.2 除了 DeepSeek-V4,还有哪些现成例子¶
先区分三种“支持”,否则很容易把模型列表写成已经跑通的生产案例:
- AIBrix 官方端到端样例:仓库里有编排、标签、Service 和路由清单;
- vLLM 官方多机配方:模型和多机并行策略有上游依据,但需要把 Runtime 接入 AIBrix;
- 理论上兼容 OpenAI API:只能说明 AIBrix 可以发现和转发,不能证明多机通信、P/D 或扩缩容已经验证。
截至 2026 年 8 月,AIBrix 仓库里最值得直接参考的三套样例是:
| 官方样例 | 证明了什么 | 适合怎么用 | 不能直接照搬的部分 |
|---|---|---|---|
| DeepSeek-R1 671B | 2 个节点、16×H20 96GB、RayClusterFleet、vLLM TP16、Head-only Service、路由、自动扩缩和监控 | 大模型跨节点完整副本的主要蓝本 | 样例基于旧版 vLLM 0.7.3 定制镜像和特定云 RDMA;存储、NIC、镜像和版本必须重做 |
| Qwen2.5-Coder-7B 两节点 | RayClusterFleet 建立 1 个 Head GPU + 1 个 Worker GPU,vLLM TP2,AIBrix 只把请求送给 Head | 用小模型验证 KubeRay、Fleet、Service 和 Gateway 控制链 | 启动时执行 apt/pip,且使用 vLLM 0.7.1;它是教程,不是生产镜像模板 |
| Qwen3-8B P/D | StormService 的 Replica/Pool 两种模式、2 Prefill + 1 Decode、NIXL 传输和 routing-strategy: pd |
验证 Prefill/Decode 角色编排与动态路由 | 这不是“大模型跨节点装载”样例;RDMA 注解、NIXL 镜像和 NCCL 参数带有环境假设 |
真正的大模型候选不只 DeepSeek。下表中的模型都在 vLLM 官方 Recipes 中明确声明兼容 multi_node_tp、multi_node_tp_pp、分布式 Expert Parallel 和 pd_cluster,因此适合把 vLLM Leader/API Endpoint 接到 AIBrix:
| 开放权重模型 | 规模与上下文 | vLLM 最低版本 | 配方中的典型权重显存 | 更适合验证什么 |
|---|---|---|---|---|
| DeepSeek-R1 | 671B / 37B 激活,163K | 0.12.0 | FP8 约 805GB;NVFP4 约 403GB | AIBrix 已有 671B 多机蓝本,适合作为 V4 之外证据最完整的基线 |
| Qwen3-235B-A22B-Instruct | 235B / 22B 激活,262K | 0.10.0 | FP8 约 240GB;NVFP4 约 141GB | 资源门槛相对低,适合第一套真实 MoE 多机、EP 和长上下文验证 |
| Qwen3-Coder-480B-A35B | 480B / 35B 激活,262K | 0.10.0 | FP8 约 576GB;NVFP4 约 288GB | 代码与 Agent 请求、Tool Calling、长上下文以及多副本路由 |
| GLM-4.7 | 358B / 32B 激活,202K | 0.11.0 | FP8 约 430GB;NVFP4 约 215GB | 中文、推理与 Tool Calling,且可验证 MTP 推测解码 |
| Qwen3.5-397B-A17B | 397B / 17B 激活,262K | 0.17.0 | NVFP4/GPTQ Int4 约 238—239GB | 新版多模态/推理模型,但 Runtime 与连接器版本门槛更高 |
| Kimi-K2.5 | 1T / 32B 激活,262K | 0.19.1 | INT4 约 714GB;NVFP4 约 600GB | 超大 MoE、多模态、P/D 和大规模 Expert Parallel;成本最高的一档 |
| MiniMax-M2.5 | 230B / 10B 激活,196K | 0.20.2 | FP8 约 276GB;NVFP4 约 138GB | 用较低权重门槛验证多机和 P/D;部分硬件上单机已能容纳,不要为了多机而多机 |
| Mistral Large 3 675B | 675B / 22B 激活,294K | 0.11.0 | FP8 约 810GB;NVFP4 约 405GB | 国际开放权重模型、多语言和长上下文,多机 TP/PP/EP 与 P/D |
表中的显存只是配方对权重变体给出的最低量级,不包含目标并发所需的全部 KV Cache、CUDA Graph、通信 Buffer 和安全余量;也不等于推荐 GPU 数。尤其 NVFP4 通常要求 Blackwell 原生能力,不能只看总显存相加。
2.3 模型接入 AIBrix 的正确边界¶
AIBrix 并没有一张只允许特定模型的白名单。对普通共置式 vLLM 服务,至少要保证:
- Pod 带有一致的
model.aibrix.ai/name和model.aibrix.ai/port; - vLLM 的
--served-model-name、请求体model、Service 与路由配置一致; - Service 只选择一个完整副本的 Leader/API Pod,不能选中内部 Headless Worker;
- Readiness 只有在所有必要 Rank 和模型都可服务后才成功;
- AIBrix Gateway 在多个完整副本之间选路,组内 Rank 由 RayClusterFleet、StormService/RoleSet、LWS 或 Runtime 管理。
非 P/D 场景中,AIBrix Gateway 与 vLLM 引擎版本的耦合相对较弱,新版 vLLM 只要保持兼容 API、指标和发现标签,通常可以先作为普通模型 Endpoint 接入。P/D、KV Offload、NIXL Connector 和 Runtime Sidecar 则位于数据路径上,版本耦合很强。Qwen3.5、Kimi-K2.5、MiniMax-M2.5 等配方要求的 vLLM 0.17—0.20 已明显新于 AIBrix v0.7.0 示例镜像,必须重新构建镜像并验证 KV Connector、NIXL、CUDA/NCCL 和指标,而不能只替换 model 字段。
推荐按风险递增落地:
- 先用 Qwen2.5-Coder-7B 两节点样例证明 RayClusterFleet 和 Head-only 路由;
- 用 Qwen3-8B 证明 StormService 与 P/D 控制链,但暂不据此宣称性能收益;
- 第一套真实大模型优先选择 Qwen3-235B-A22B FP8,或复现证据更完整的 DeepSeek-R1 671B;
- 再加入第二个完整副本,验证 AIBrix 的队列、Prefix/Session 感知、故障摘除和扩缩;
- 最后才测试 Kimi-K2.5 等 1T 模型以及跨节点 P/D,并用 TTFT、TPOT、Goodput 和故障恢复时间决定是否上线。
2.4 AIBrix 的两条编排路线¶
AIBrix 既可以用 RayClusterFleet 管理多个完整 RayCluster 副本,也可以用 StormService → RoleSet → Pod 直接表达 Prefill、Decode 或其他角色。RoleSet 不是与前两者平级的第三种方案,而是 StormService 管理的下一层资源。
这里只建立概念边界:已经使用 Ray 时通常优先 RayClusterFleet;需要 P/D 分离、角色级弹性或想去掉 Ray 时通常优先 StormService。CRD 层级、依赖、Endpoint、扩缩、更新和故障边界的完整对比,以及裸 Kubernetes 的替代做法,统一放在 AIBrix 实战中的编排方案选型。
3. LeaderWorkerSet¶
LeaderWorkerSet(LWS)用于描述一个 Leader 与多个 Worker 构成的复制单元,适合多机推理和其他 Leader/Worker 工作负载。
它提供:
- Group 级副本;
- Leader/Worker 稳定索引和发现;
- 有序/并行生命周期能力;
- 组级滚动更新和扩缩;
- 与 Kueue、Gateway 和推理控制面集成。
LWS 不负责模型请求路由、配额准入或 KV Cache。通常还需要:
- Kueue 做成组准入和拓扑;
- Gateway/InferencePool 做请求选择;
- 引擎完成 TP/PP 通信;
- 模型缓存和 RDMA 组件提供数据路径。
4. 拓扑选择¶
优先顺序通常是:
- TP 尽量留在 NVLink/NVSwitch 域;
- PP 跨节点时保证稳定 RDMA/高速网络;
- MoE EP 关注 All-to-All 和 Expert 热点;
- CPU、GPU、NIC 保持合理 NUMA/PCIe 邻近;
- 多副本分散到故障域,而单个副本内部集中;
- 模型缓存位于被选节点。
“副本内部集中”和“副本之间分散”是两个不同目标,需要分层拓扑策略。
5. vLLM 多机并行¶
vLLM 支持 Tensor/Pipeline 等分布式推理。典型思路:
- 单节点内 TP 等于本机使用的 GPU 数;
- 模型跨节点时加入 PP;
- 多副本吞吐通过 DP 或上层多个 Deployment/LWS;
- 具体 Runtime 可以使用 Ray 或其他受支持执行后端。
示意:
这表示一个逻辑副本使用 16 张 GPU 的概念配置,实际还需要多节点启动、地址发现、容器共享内存和网络参数。
当前 vLLM 多节点既可以用 Ray,也支持原生 MultiProcessing 的 --nnodes、--node-rank 和 --headless 模式。Ray 是分布式执行 Backend,不是多机推理本身唯一的并行算法;TP、PP、DP、EP 才决定模型计算如何拆分。
参考:vLLM Parallelism and Scaling
5.1 vLLM Ray 多机与 P/D 分离是什么关系¶
它们是两个正交维度:
- vLLM Ray 多机回答:一套 vLLM Engine 如何把同一个模型副本的计算拆到多张 GPU、多个节点;
- P/D 分离回答:一次请求的 Prefill 和 Decode 是否交给两套独立 vLLM Engine,以及如何把 KV Cache 从前者交给后者。
最重要的认知是:Ray Worker 不是 Decode Worker。 普通 Ray 多机模式中的 Head/Worker Rank 会共同参与同一个 Engine 的 Prefill 和 Decode;P/D 模式中的 Prefill、Decode 则是两个具有独立 Scheduler、Batch、KV Cache 和 Endpoint 的引擎。
5.1.1 只有 Ray,没有 P/D¶
Client
→ vLLM API / Ray Head
→ 同一个 vLLM Engine
├─ Ray Rank 0:GPU/权重分片
├─ Ray Rank 1:GPU/权重分片
└─ Ray Rank 2:GPU/权重分片
所有 Rank 共同执行 Prefill 和 Decode
这里模型通过 TP/PP/EP 跨 GPU 放置。一次请求从开始到结束都属于同一个 Engine;Rank 之间会在层、Token 或 Expert 计算中持续进行 Collective、Activation 或 Pipeline 通信。Ray 负责进程放置和执行协调,vLLM 仍负责推理 Scheduler。
5.1.2 只有 P/D,没有 Ray¶
Client
→ P/D Router
→ Prefill vLLM Instance:加载模型,计算 Prompt 和初始 KV
→ NIXL/LMCache/Mooncake 等 Connector 传输 KV
→ Decode vLLM Instance:也加载模型,接收 KV 后逐 Token 生成
两端可以各自只使用一张 GPU,也可以使用单机多卡 MultiProcessing。P/D 不要求 Ray,但要求 P/D-aware Router、KV Connector、Peer 发现以及兼容的模型、KV Layout 和 Engine 版本。Prefill 和 Decode 都不是“只装半个模型”:两边都要具备执行相应阶段所需的完整逻辑模型能力,因此通常会形成两份权重容量,只是每份内部仍可分片。
5.1.3 Ray 与 P/D 可以组合¶
Client
→ P/D Router
→ Prefill Engine(RayCluster P)
├─ P-Head
└─ P-Worker × N
→ 跨 Engine 传输 KV
→ Decode Engine(RayCluster D)
├─ D-Head
└─ D-Worker × M
这时 Ray 解决 P、D 各自内部的模型并行,P/D Router 与 Connector 解决两个 Engine 之间的请求切换和 KV 交接。Prefill、Decode 可以使用不同 TP/PP 形状,但只有 KV Connector 的 TP Mapping 和兼容矩阵明确支持时才能这样配置,不能任意组合。
AIBrix v0.7.0 的官方例子分别展示了 RayClusterFleet 多机和 StormService P/D,尚不是一份可直接套用的“RayClusterFleet 嵌套 StormService”清单。企业如果需要上图的组合,应把它当作高级集成:分别管理 P/D 分布式 Engine,只向 Router 暴露各自的 Leader/API Endpoint,并单独验证发现、配对、KV 传输和故障恢复。
5.1.4 异同对照¶
| 维度 | vLLM Ray 多机 | P/D 分离 |
|---|---|---|
| 拆分对象 | 一个模型副本内部的 Rank、权重和计算 | 一次请求的两个执行阶段 |
| Engine 数量 | 通常 1 个 Engine,多个 Ray Rank | 至少 2 个独立 Engine:Prefill 与 Decode |
| 模型权重 | 按 TP/PP/EP 在 Rank 间分片 | P、D 两边都要加载模型;每边内部可以再次分片 |
| 请求 Scheduler | 一个 vLLM Scheduler 管完整请求 | P、D 各有 Scheduler,还需要外层 P/D Router |
| 主要数据通信 | Rank 间频繁传 Activation、Collective 或 Expert 数据 | 阶段切换时跨 Engine 传 KV Cache,Engine 内仍可能有 TP/PP 通信 |
| 主要目的 | 模型单机放不下、使用更多 GPU 加速一个副本 | 分别优化 TTFT 与 ITL、隔离长 Prompt 对 Decode 的干扰 |
| 扩缩方式 | 增加完整 RayCluster 副本;改变 Rank 数通常需要重建并重新加载模型 | Prefill、Decode Pool 可以按各自负载独立扩缩 |
| 故障影响 | 任一必要 Rank 故障可能让整个模型副本不可服务 | Prefill/Decode 或 KV 交接失败会影响请求阶段,还要清理孤儿 KV |
四种常见组合可以快速判断架构:
| 组合 | 是否合理 | 典型场景 |
|---|---|---|
| 单机 vLLM,共置 P/D | 是,默认起点 | 模型与 SLO 单机可满足 |
| Ray 多机,共置 P/D | 是 | 模型单机放不下,但还不需要阶段池化 |
| 单机/单节点 P Pool + D Pool | 是 | 模型单实例可容纳,但希望隔离 TTFT/ITL 并独立扩缩 |
| 多机 Ray P Pool + 多机 Ray D Pool | 可以,但最复杂 | 超大模型且确实需要 P/D,网络、Connector 和运维能力成熟 |
不要因为已经用了 Ray 就自然引入 P/D。vLLM 当前官方文档明确把 P/D 的主要价值描述为分别调优 TTFT/ITL、控制尾部 ITL,并提醒它不会自动提高原始吞吐。平台层可能通过独立配比获得更高的 SLO Goodput 或利用率,但必须让收益覆盖 KV 传输、双份权重、额外 Router 和故障面的成本。
参考:vLLM Disaggregated Prefilling、NixlConnector Usage Guide、NixlConnector Compatibility Matrix
6. Prefill 与 Decode 为什么不同¶
| 阶段 | 计算特征 | 主要资源压力 | 关键 SLO |
|---|---|---|---|
| Prefill | 一次处理输入 Token,可高度并行 | FLOPS、输入长度 | TTFT |
| Decode | 逐 Token 生成,反复读取权重/KV | HBM 带宽、同步、并发 | TPOT/ITL |
在共置模式中,同一组 GPU 在两类任务之间共享资源。负载不均时可能出现:
- 长 Prompt 阻塞交互 Decode;
- Prefill 峰值与 Decode 容量无法分别扩展;
- 不同硬件无法各自发挥优势;
- Queue 和 Batch 互相影响。
7. P/D 分离架构¶
Client
→ Router / Frontend
→ Prefill Pool
→ 生成 KV Cache
→ 通过 NIXL/UCX/RDMA/其他 Connector 传输
→ Decode Pool
→ 继续生成并流式返回
收益来源:
- Prefill 与 Decode 独立扩缩;
- 使用不同 GPU 型号或并行配置;
- 分别调 Batch、并发和 SLO;
- 更好隔离长 Prompt 对 Decode 的影响;
- 在足够规模下提高利用率和 Goodput。
新增成本:
- KV 传输延迟和带宽;
- Peer 发现和连接管理;
- 双池容量平衡;
- 取消、故障和孤儿状态;
- 发布、回滚和版本兼容;
- 更多组件和可观测边界。
8. 什么时候不应该 P/D 分离¶
- 单机或少量 GPU 已满足 SLO;
- 请求短、KV 传输成本接近或超过收益;
- 网络没有稳定的高带宽低延迟能力;
- Prefill/Decode 流量比例稳定且共置效率已很好;
- 团队还没有完整的基准、Trace 和故障处理;
- 模型/引擎/Connector 组合没有生产支持;
- 冷启动和发布复杂度比 GPU 节省更重要。
P/D 分离是规模优化,不是部署 LLM 的入门前置条件。
9. KV 传输路径¶
必须明确:
- KV 格式、Block 大小、Dtype 和布局;
- Prefill/Decode 引擎和版本是否完全一致;
- 谁发起传输,Push 还是 Pull;
- Peer 如何发现和认证;
- 使用 GPU Direct、RDMA、TCP 还是共享存储;
- KV 在发送端何时释放;
- Decode 失败后如何清理;
- 请求取消如何传播;
- 传输超时和重试是否安全;
- KV 是否包含敏感 Prompt 信息。
一次模型或引擎升级可能改变 KV 布局,不能让新旧 Worker 任意互连。
10. llm-d¶
llm-d 是面向 Kubernetes 的分布式 LLM 推理架构,围绕:
- InferencePool 和 Endpoint Picker;
- vLLM/SGLang 等模型服务;
- Prefix/KV-aware Routing;
- KV Cache Indexing 和 Offload;
- P/D 分离;
- Flow Control;
- Kubernetes Deployment、Prometheus 和 Gateway 集成。
它适合希望使用 Kubernetes 原生 API 构建可组合推理数据面的团队。生产选型要固定 llm-d、Gateway Extension、Engine、Connector 和 CRD 版本。
11. NVIDIA Dynamo¶
Dynamo 提供 Frontend、Router、Planner、Worker 和分离式推理能力,可组合 vLLM、SGLang、TensorRT-LLM 等 Backend,并通过 NIXL 等机制传输 KV。
适合:
- NVIDIA 平台的大规模分布式推理;
- 需要经过配方验证的 P/D、KV Routing、Expert Parallel;
- 希望通过
DynamoGraphDeployment等资源表达组件图; - 需要在部署前进行拓扑和容量规划。
需要管理 etcd/NATS 等发现或消息依赖、Dynamo CRD/Operator、Runtime 镜像和 Backend 兼容。
参考:NVIDIA Dynamo Disaggregated Serving
12. AIBrix 之外还有哪些选择¶
先区分三层,避免把推理引擎、Kubernetes 编排组件和完整推理控制面当作同类产品:
平台控制面:AIBrix / llm-d / KServe / Ray Serve / Dynamo
集群编排层:Kubernetes / RBG / LeaderWorkerSet / KubeRay
推理执行层:vLLM / SGLang / TensorRT-LLM
一个平台经常同时采用三层组件。例如 KServe 负责服务生命周期,LeaderWorkerSet 表达跨节点副本,vLLM 执行模型计算;它们不是互相替代的三个产品。
| 项目 | 主要定位 | 多机多卡与分离式推理能力 | 更适合的场景 |
|---|---|---|---|
| AIBrix | Kubernetes LLM 推理控制面 | Gateway、模型感知路由、Autoscaling、LoRA、KV Cache 和 P/D 等能力 | 希望建设包含流量、模型和弹性管理的通用推理平台 |
| RBG(RoleBasedGroup) | 多角色、带状态推理工作负载编排 API | Router/Prefill/Decode 角色依赖、稳定发现、角色级扩缩、Leader/Worker 和协调更新;不实现请求路由或 KV 数据路径 | 希望在 SGLang、Dynamo、Mooncake 或自研 Runtime 之上使用独立编排层;与 AIBrix 最应直接对比的是 StormService/RoleSet |
| llm-d | Kubernetes 原生分布式推理栈 | InferencePool/EPP、Prefix/KV-aware Routing、KV 索引与卸载、P/D 分离 | 重点优化大规模请求调度、KV 命中率和分离式推理,可作为 AIBrix 的重点对标对象 |
| KServe LLMInferenceService | 模型服务 CRD 和生命周期控制面 | 通过 LeaderWorkerSet 表达跨节点副本,支持 Tensor/Data/Expert Parallelism,并组合 Gateway 和 Autoscaler | 已有 KServe,希望统一模型服务 API、发布和弹性治理 |
| NVIDIA Dynamo | NVIDIA 高性能分布式推理框架 | Frontend、Router、Prefill/Decode Pool、KV-aware Routing、NIXL/RDMA 数据路径 | NVIDIA GPU 和高速网络完备,优先追求 P/D、KV 传输和极限性能 |
| Ray Serve LLM + KubeRay | 可编程分布式应用与服务平台 | 跨节点 TP/PP/EP、P/D 分离、模型感知路由和副本弹性 | 已使用 Ray Data/Train/Jobs,希望把数据、训练、评测和推理放在同一运行时 |
| vLLM Production Stack | vLLM 官方 Kubernetes 生产部署栈 | 多 Serving Engine、Router、Prefix/KV-aware Routing、P/D、KEDA、LoRA 和监控 | 已确定使用 vLLM,希望以较小平台成本快速上线 |
| SGLang 与其 Router/Model Gateway | 高性能推理引擎及路由能力 | 多节点并行、Radix Cache、P/D 分离和多种路由策略 | 重视 SGLang 引擎能力,并愿意自行组合 Kubernetes 生命周期和治理组件 |
| LeaderWorkerSet | 多 Pod 组成一个逻辑副本的 Kubernetes API | 统一创建、扩缩和更新 Leader/Worker Pod 组 | 给 KServe、llm-d 或自研控制面提供多机副本编排;它不是完整推理平台 |
12.1 选型结论¶
- 寻找与 AIBrix 定位最接近的开源方案:优先评估 llm-d;
- 已有 KServe 平台:使用 KServe LLMInferenceService + LeaderWorkerSet;
- NVIDIA GPU、RDMA 和拓扑条件成熟:测试 Dynamo + TensorRT-LLM/vLLM;
- 数据处理、训练和推理已经大量使用 Ray:选择 KubeRay + Ray Serve LLM;
- 想先让 vLLM 生产化,不急于建设统一控制面:从 vLLM Production Stack 起步;
- 需要独立于 Gateway 的多角色生命周期 API:评估 RBG;若已经采用 AIBrix 全栈,先比较 StormService,避免两个控制器同时拥有一批 Pod;
- 需要自研企业推理平台:可组合 Gateway API + llm-d Router/EPP + KServe/LWS + vLLM/SGLang,但必须明确每个资源只有一个生命周期和扩缩控制器。
参考:RBG、llm-d Architecture、KServe LLMInferenceService、Ray Serve LLM、vLLM Production Stack、SGLang。RBG 与 AIBrix/Higress 的详细边界和 sr1 实测见 RBG 多角色推理编排;SGLang Router 的 CPU 控制链实测见 SGLang Model Gateway CPU 实战。
13. 双池容量规划¶
分别测量:
Prefill 需求 ≈ 输入 Token 到达率 / 单 Prefill Worker 的有效 Token/s
Decode 需求 ≈ 输出 Token 到达率 / 单 Decode Worker 的有效 Token/s
还要加入:
- 长短 Prompt 分布;
- KV 传输并发和带宽;
- 单 Worker 故障冗余;
- 峰值与目标利用率;
- 模型/Cache 预热;
- 拒绝和排队预算。
两个 Pool 的 Autoscaler 不能只看自身局部队列。Prefill 扩得过快会淹没 Decode,Decode 过剩又会空等 KV。
14. 发布与版本¶
一个分离式版本至少包括:
- 模型 Artifact;
- Prefill Runtime 和参数;
- Decode Runtime 和参数;
- KV Connector/NIXL/UCX 版本;
- Router/EPP;
- Gateway 和 CRD;
- GPU Driver、CUDA/ROCm;
- 网络和 RDMA 配置。
Canary 最安全的方式是建立一整套新 Pool,而不是让新 Prefill 随机连接旧 Decode。
发布流程:
- 创建新版本 Prefill/Decode Pool;
- 通过兼容性和 KV 传输测试;
- 预热模型和连接;
- Shadow 无副作用流量;
- 按租户/请求稳定 Canary;
- 比较质量、TTFT、TPOT、Goodput 和成本;
- 停止旧 Pool 新请求;
- Drain 后回收。
15. 故障语义¶
| 故障 | 处理目标 |
|---|---|
| Prefill Worker 失败 | 请求可安全重试或快速失败,不产生无主 KV |
| Decode Worker 失败 | 已输出流式请求可识别终止,不重复副作用 |
| KV 传输超时 | 清理双方状态,记录链路和 Request ID |
| Router/EPP 失败 | 数据面回退或高可用实例接管 |
| Cache Index 失效 | 回退非 Cache-aware 路由 |
| 节点 Drain | 先移除 Endpoint,再停止新配对 |
| 新旧版本不兼容 | 发布门禁阻止跨版本连接 |
| 网络分区 | 超时、隔离和恢复不会重复请求 |
16. 可观测性¶
必须能从一次请求看到:
指标:
- Prefill/Decode 各自队列、Batch 和 Token/s;
- KV 传输字节、时间、失败和重试;
- Peer 数、连接建立和断开;
- TTFT 中路由、排队、Prefill、传输分解;
- TPOT 和 Decode Batch;
- 孤儿 KV、取消和清理;
- Pool 扩缩容、Ready 和版本;
- RDMA/NIC/GPU/CPU 指标。
17. 安全¶
- KV Cache 可能包含可还原的用户上下文,按敏感数据处理;
- Prefill 与 Decode 之间使用网络身份、加密或受控数据平面;
- 不同租户的 KV Index 和 Cache 访问边界明确;
- Worker 不对公网暴露;
- Router 不能把请求送到未授权模型/Adapter;
- 调试日志不记录原始 KV、Prompt 或凭据;
- 多网卡/RDMA 端口通过网络隔离和节点策略保护。
18. 上线清单¶
- 已证明单机/共置模式无法更简单地满足目标。
- 一个多机副本由 LWS/控制器整体创建、调度和发布。
- 副本内部集中、不同副本跨故障域分散。
- KV 格式、Connector、引擎和模型版本完整锁定。
- P/D 两个 Pool 使用联合容量模型和保护机制。
- 请求取消、Worker 失败和 KV 超时经过演练。
- 发布不会让新旧不兼容 Worker 随机配对。
- Trace 能分解路由、Prefill、KV 传输和 Decode。
- Cache Index/Router 故障时能安全降级。
- KV Cache 的隐私、网络和租户隔离经过评审。
延伸阅读¶
- LeaderWorkerSet
- llm-d
- llm-d Disaggregated Serving
- NVIDIA Dynamo Disaggregated Serving
- TensorRT-LLM Disaggregated Serving
- KServe LLMInferenceService
多地域场景应优先在每个集群部署完整推理栈,由全局 Gateway 选择集群,再由集群内 Router/EPP 选择模型副本;TP/PP、P/D 和 KV 传输原则上留在低延迟网络域。详见:Kubernetes 跨集群与大规模 GPU。