llm-wiki wiki · analysis 2026-10-03

本页回答“谁拥有哪一层职责,以及控制面如何把容量变成可接流量的 endpoint”。vllm / sglang 是执行引擎,dynamo 组织分布式 runtime,llm-d / aibrix 提供范围不同的 serving 与控制能力;这些层不能当成同类替代品。组合选择见 llm-serving-engine-selection-map。

请求执行的统一入口是 llm-inference,P/D 与 KV 交接见 disaggregated-serving,选点与异步信号见 inference-routing。本页只展开 Kubernetes 控制面及就绪传播,避免重复维护请求/KV 流程图。

当前上游核验(2026-10-03)

下表是 2026-10-03 对官方 GitHub release、固定 tag 源码及官方文档的直接核验。发布日期为 GitHub API 的 UTC 日期;release 标签与 latest/dev 文档分别记录,不推定二者完全一致。frontmatter 中的 Source 页面保留旧分析时点,其调用路径和配置不能自动外推到今天。

项目 核验版本与日期 当前观察及直接官方证据 使用边界
vllm v0.30.0,2026-09-22 发布;latest docs checked 2026-10-03 V1 进程架构区分 API Server、Engine Core、GPU Workers 与条件启用的 DP Coordinator scheduler、local KV 与模型执行属于 engine;进程数及 connector 支持按部署版本核验
sglang v0.5.21,2026-10-02 发布 固定 tag 中存在 Scheduler、ModelRunner、RadixCache;同 tag P/D 指南描述 Mooncake/NIXL 集成 runtime 结构与 P/D backend 按版本和硬件限定,不等于全部特性可任意组合
dynamo v1.5.0,2026-09-21 发布;dev docs checked 2026-10-03 架构文档分离 request、event、discovery 及控制连接;Planner 决策、Operator 收敛 worker 数 release 中的 backend 版本与独立引擎最新版分开;可模块化采用,不能假定所有 transport/缓存组件必选
llm-d v0.10.0,2026-09-29 发布;公开架构页仍标 v0.9 latest,checked 2026-10-03 Proxy/EPP、InferencePool、Model Server 为核心;dev 扩缩说明为 EPP metrics → KEDA Prometheus scaler → HPA release 已记录 WVA 指南废弃及 KV-cache 仓库迁入 router;旧 Source 保留迁移前边界
aibrix v0.7.0,2026-06-18 发布 release 明确多引擎、KV-centric P/D、Batch API 和 HA Gateway;Console、Batch API、Resource Manager/Cloud GPU 仍有 preview 提示 按组件与目标引擎版本判断成熟度,不能把 production 表述当成所有 API 稳定承诺

[!warning] Conflict
2026-10-03 核验时,llm-d v0.9 架构页仍并列 HPA/KEDA 与 WVA;dev 架构页已将 WVA 标为 deprecated,v0.10.0 release也确认 WVA 指南废弃并将仓库重命名为 llm-d-autoscaling。src-llm-d-workload-variant-autoscaler-architecture 与 llm-d-workload-variant-autoscaler 是历史设计参考,部署应核验目标 release 的扩缩路径,不能照搬旧 WVA 方案。

一句话分层

层 核心职责 对应项目或阅读入口
推理引擎 token 调度、模型执行、local KV、设备/节点内外并行 vllm、sglang;执行基础见 continuous-batching、paged-attention、radix-attention
分布式 serving runtime worker discovery、请求协调、P/D 组织、KV transfer 集成 dynamo,并对照 engine-native 集成
请求路由与 serving 控制 endpoint picking、入口策略、扩缩和部署生命周期的明确子集 llm-d、aibrix、Dynamo 的可选控制组件;见 inference-routing、model-serving-operator
异步任务与实验工具 job/file/queue/output、benchmark、故障模拟 batch-inference、llm-d-batch-gateway、llm-d-benchmark、llm-d-inference-sim
资源与设备基础设施 集群位置、GPU 分配、拓扑、健康和容量 SkyPilot、k8s-gpu-device-stack、kubernetes

A4 · Kubernetes Serving 控制面

flowchart TB
    subgraph CTRL["Control plane:期望与异步收敛"]
        Intent["模型 / SLO / 拓扑意图"]
        Config["CRD / Deployment / 平台配置"]
        Decide["Autoscaler / Planner / HPA:计算并写入目标"]
        Desired["已持久化 workload /scale 或平台角色池目标"]
        Reconcile["Operator / workload controllers:收敛 Pods"]
        Keda["KEDA:读取外部指标并配置与拥有 HPA"]
        Intent -.-> Config
        Config -.-> Decide
        Decide -.-> Desired
        Desired -.-> Reconcile
        Keda -.-> Decide
    end
    subgraph WORK["Worker lifecycle"]
        Pool["Worker pools / Pod startup"]
        Load["Model load / warmup"]
        Ready["Readiness:模型已可服务"]
        Engine["Ready engine workers / local KV"]
        Pool -.-> Load
        Load -.-> Ready
        Ready -.-> Engine
    end
    Discover["Endpoint discovery / EndpointSlice / registry"]
    subgraph REQ["Request plane:接入、选点与执行"]
        Client["Client"]
        Proxy["Gateway / Frontend"]
        Picker["Router / EPP:endpoint decision"]
        Client --> Proxy
        Proxy -->|"咨询选点"| Picker
        Picker -->|"返回 endpoint"| Proxy
        Proxy -->|"转发请求 / stream"| Engine
    end
    subgraph EVENT["Event / metrics plane:异步观察"]
        Metrics["Queue / token backlog / SLO / GPU metrics"]
        KV["KV events / locality index"]
    end
    Reconcile -.-> Pool
    Config -.-> Discover
    Ready -.-> Discover
    Discover -.-> Picker
    Engine -.-> Metrics
    Proxy -.-> Metrics
    Engine -.-> KV
    Metrics -.-> Decide
    Metrics -.-> Keda
    Metrics -.-> Picker
    KV -.-> Picker

图注:这是 Kubernetes 部署的逻辑职责图,实线代表请求/选点交互,虚线代表异步控制、生命周期推进或信号。假设 readiness 检查覆盖模型可服务状态,endpoint 发现再把该状态传播给选点方。HPA 根据指标计算副本目标并写入 workload 的 /scale;workload controllers 再收敛 Pods。平台 Planner 也可写自己的角色池目标,由 Operator 转换并执行。图中是候选控制路径,每个目标只应有一个扩缩写入者。

不要从图中推断 Dynamo、llm-d、AIBrix 实现同一组框或能直接互换。Dynamo 的 Planner/Operator 控制连接、llm-d 的 EPP/KEDA/HPA 组合、AIBrix 的 Gateway/controller/runtime 组件拥有不同接口和对象。InferencePool/HTTPRoute 是配置与发现契约,Proxy/Frontend 才承接连接;EPP 咨询不要求 token stream 穿过 EPP 进程。控制权、信号时效及故障边界见 model-serving-operator、inference-routing。

S3 · 扩缩与就绪传播时序

sequenceDiagram
    participant M as Metrics / EPP queue / SLO
    participant K as KEDA 可选指标适配
    participant D as Autoscaler / Planner / HPA
    participant A as Workload scale / 平台角色池目标
    participant C as Operator / workload controllers
    participant P as New worker Pod
    participant L as Model loader
    participant E as Endpoint discovery
    participant R as Gateway / Router
    alt llm-d 的 KEDA 与 HPA 路径
        M-->>K: 提供 EPP 外部指标
        K-->>D: 配置与拥有 HPA 并提供评估后的指标
    else Planner 或其他 autoscaler 路径
        M-->>D: 观察排队、负载与 SLO 偏差
    end
    D->>D: 根据指标与策略计算期望容量
    D-->>A: 持久化 workload /scale 或平台角色池目标
    A-->>C: watch / reconcile 目标变化
    C-->>P: 收敛 workload 并等待调度后的 Pod 启动
    Note over D,R: Scale-up lag 从采样与决策持续到 endpoint 可路由
    R->>R: 现有容量承载流量并执行有界队列与 load shedding
    P->>L: 加载模型并执行 warmup
    alt 模型加载成功且 readiness 通过
        L-->>P: 模型可服务
        P-->>E: 发布 Ready endpoint
        E-->>R: endpoint 集合更新
        R->>P: 新请求变为 routable
        P-->>M: 发布新容量指标
    else 模型加载失败或超时
        L-->>P: 加载失败
        P-->>C: NotReady / failure 状态
        P-->>E: 不发布或撤销 Ready endpoint
        E-->>R: 传播不可用状态
        C-->>D: 容量缺口与失败反馈
        R->>R: 按预算排队、拒绝或选择健康 endpoint
    end

图注:这是一次扩容的逻辑时序,虚线表示异步状态/信号传播,横向距离不表示时长。假设所选 autoscaler、部署控制器和 discovery 能形成反馈闭环;GPU 容量不足、镜像拉取失败还可能让 Pod 在加载模型前停滞,同样不能计入可服务容量。

HPA 位于决策与目标写入侧:它计算 desired replicas 并更新目标 workload 的 /scale,不负责创建或收敛 Pods;Operator 与 Deployment 等 workload controllers 负责后续执行。平台 Planner 可改写自己的角色池目标,再由 Operator 收敛。在 llm-d 路径中,KEDA 的 Prometheus scaler 读取 EPP 信号,KEDA 配置并拥有 HPA、向其提供外部指标,HPA 执行副本决策。见 Kubernetes HPA、KEDA 概念与 llm-d dev 扩缩说明。这里聚焦非零副本扩容,KEDA 的零副本激活路径需另按配置核验。

不要从图中推断期望副本增加即等于可用容量增加,或 Ready 保证后续每次请求成功。采样窗口、决策周期、GPU provisioning、镜像/权重下载、warmup 和发现传播均进入 scale-up lag;有界队列、admission/load shedding 必须显式配置。缩容需停止新选点、排空在飞请求,再终止 worker,不能简单反转扩容箭头。容量与 goodput 见 llm-serving-performance,重试、取消和 draining 见 llm-serving-reliability。readiness/EndpointSlice 语义见 Kubernetes Pod 生命周期。

横向对比

按主要层比较职责;“拥有请求路径”指直接参与请求执行或选点,“local KV”指引擎内布局、分配和有效性,区别于外部 index/transfer/storage。成熟度列记录可核验版本与限制,不是性能或生产质量排名。

项目 Primary layer Owns request path? Owns local KV? P/D role Control-plane role Maturity / evidence date Best fit Avoid-if Next verification
vllm Engine 是,API/engine execution 是,KV blocks 与 scheduler engine 角色与 connector 实例执行协调,不包办 fleet v0.30.0 + V1 latest docs,2026-10-03 建立目标模型/硬件的可测基线 目标模型或硬件不支持关键要求 模型质量、batching、CPU 配额、TTFT/ITL、connector
sglang Engine/runtime 是,服务进程与执行 是,RadixCache/KV pools 版本限定的 Mooncake/NIXL 等集成 实例/并行组协调 v0.5.21 tag,2026-10-03 前缀复用或执行特性匹配负载 目标特性组合尚无硬件验证 prefix 分布、特性共存、P/D timeout/cancel
dynamo Distributed runtime 是,Frontend/Router/worker 协作 底层 engine 拥有,外围索引/传输按组件 组织 aggregated 或分离 worker pools Planner 决策、Operator 收敛等可选模块 v1.5.0 + dev docs,2026-10-03 多节点协调有实测收益 普通副本达标,或网络/KV 成本抵消收益 高采用成本,核对 backend pins、transport、故障与 goodput
llm-d K8s routing/serving stack 是,Proxy + EPP,engine 执行 否,engine 拥有,生态提供索引/offload 路由与 sidecar 协调,依 engine 契约 InferencePool 发现与 EPP metrics,扩缩配 KEDA/HPA release v0.10.0 / docs v0.9 与 dev,2026-10-03 需要 inference-aware endpoint picking 普通 LB 达标或不能运维 Gateway/EPP 中到高成本,验证 Gateway/GAIE、组件矩阵、WVA 迁移与陈旧信号
aibrix Serving/control plane 是,Gateway plugins 与 PD 路由 engine 拥有,外围 KV substrate/connector 集成 多引擎路由与角色编排 controllers、autoscaling、model/adapter lifecycle v0.7.0,2026-10-03,部分模块 preview 多项明确的 fleet 运维需求 控制器重叠或 preview API 不能接受 按组件计成本,验证引擎适配、CRD 升级、HA 状态与 replica 所有权
SkyPilot 资源控制面 资源选择不逐请求执行,Serve 子系统另计 否 部署/供给底层 worker 云/K8s/Slurm 资源与任务生命周期 README,checked 2026-10-03,内部细节取旧 Source 跨集群资源位置与容量选择 单集群已满足资源管理需求 云凭据/配额、启动时延、恢复与现有 scheduler 分工
k8s-gpu-device-stack 设备基础设施 否 否 提供设备、网络与拓扑约束 GPU 分配、驱动、健康、观测 Kubernetes GPU 指南,checked 2026-10-03 上述项目的 GPU 运行底座 试图用设备插件解决 token 调度或缓存路由 驱动/镜像、隔离、NUMA/NVLink/RDMA、健康与真实可分配容量

架构交叉矩阵

共同设计问题 分工与接口 深入阅读
KV 复用 engine 验证身份/布局,routing 使用 locality signal,transfer/offload 处理搬运与存储 paged-attention、radix-attention、kv-cache-offload
请求与 GPU 工作组织 endpoint 选点和 engine 内 batch 调度独立,通过队列与缓存状态相互影响 inference-routing、continuous-batching
P/D 池与容量 engine connector、网络和角色池编排共同定义可用组合 disaggregated-serving
多 variant allocation 历史 WVA 的成本/容量思想仍可研究,采用要核验废弃状态 llm-d-workload-variant-autoscaler
Batch / benchmark / simulator 异步任务、可复现实验和无 GPU 控制面测试各有边界 llm-d-batch-gateway、llm-d-benchmark、llm-d-inference-sim

核心设计轴

  1. KV 所有权与身份:引擎决定 local KV 是否有效,外部索引给出可能命中的线索。跨 worker/存储层复用还需模型版本、token 前缀、布局和失效契约,见 kv-cache-offload。
  2. 执行与编排边界:引擎可跨设备/节点并行;runtime 处理实例间请求协作;Kubernetes 控制器收敛期望状态与容量。跨节点并行本身不意味着必须引入 Dynamo,见 llm-inference。
  3. P/D 资源形态:角色比例、拓扑、KV transfer 与独立扩缩需共同决定。不能从“prefill 计算密集、decode 访存敏感”的概括直接得出部署答案,见 disaggregated-serving。
  4. 复用与排队权衡:热 prefix worker 可能过载;cache-hit 高不保证 TTFT/ITL 达标。路由信号要有时效,评估最终达标的请求量,见 inference-routing、llm-serving-performance。
  5. 设备与容量约束:GPU sharing、拓扑、权重和 KV 占用改变可分配容量;request autoscaling、Pod 调度与节点供给有不同周期,见 k8s-gpu-device-stack。

项目工程剖面

vllm:可测量的执行基线

V1 的 API/Engine Core/GPU worker 分工要求部署同时为 tokenization/调度保留 CPU。工程研究入口是 scheduler token budget、local KV block 管理及模型/attention backend 支持;旧版代码剖面见 src-vllm-architecture,当前进程边界见 V1 文档。采用成本集中于镜像、权重、并行和特性组合,模型支持列表不能承诺目标 SLO。

sglang:执行路径与前缀复用

当前 Scheduler、ModelRunner、RadixCache 源码见核验表;src-sglang-architecture 保存早期 HTTP/TokenizerManager/Scheduler/DetokenizerManager 与 forward mode 剖面。prefix reuse、chunking、speculative decoding 和 P/D 应组合验证,避免外推单项优化收益。v0.5.21 P/D 指南限定 backend、安装与拓扑配置。

dynamo:模块化分布式协作

工程重点是 worker membership、信号延迟、KV transfer、Planner 与 Operator 的所有权。v1.5.0 release列出的 engine 依赖为 vLLM v0.28.0、SGLang v0.5.18,并记录 backend 已知限制;不能把本页所有独立最新版直接拼成已验证栈。

KVBM 已在 Dynamo v1.5.0 被标为 deprecated,计划在 v1.6.0 移除;host/disk 分层 offload 用户应迁向 engine-native KV offloading。KV Cache Runner(KVCR)是针对跨节点 KV 共享的独立早期项目,release 明确它不替代 KVBM。上述状态来自 v1.5.0 release 的废弃与迁移说明。src-dynamo-architecture 保留整体架构与 cache offload 的历史快照,kv-cache-offload 中的项目映射也需按这一版本边界解读。

llm-d:Gateway/EPP 与 Kubernetes serving 组合

Proxy 负责连接与流,EPP 选 endpoint,InferencePool 表达后端集合,Model Server 执行。v0.10.0 release记录 KV-cache 仓库迁入 router、WVA 指南废弃及组件版本表;src-llm-d-architecture、src-llm-d-router-architecture、src-llm-d-kv-cache-architecture 反映早期仓库划分。迁移需核对镜像、chart、CRD 和插件配置,不能只升级总项目 tag。

aibrix:多引擎 fleet 的组合式运维

v0.7.0 release让比较范围覆盖多引擎、P/D、Batch 与 HA Gateway,但组件成熟度并不一致。按需采用 Gateway、controller、AI Runtime 或 KV 能力,并明确 adapter 生命周期、状态恢复及副本写入权。旧剖面见 src-aibrix-architecture,serving API 边界比较见 src-k8s-serving-stack-comparison。

基础设施参照:资源位置与设备能力

SkyPilot 的当前 README描述统一 Kubernetes、Slurm 与云资源入口;Source 中 Task/Dag/Resources、Optimizer 等细节属于原分析版本。src-k8s-gpu-device-plugins-stars 和 k8s-gpu-device-stack 组织 device plugin、GPU Operator、DRA/CDI、sharing 与 observability 的阅读路径;具体驱动/API 兼容性需独立核验,资源与设备层均不能替代 token 执行。

核心难点

选型与下一步验证

组合、avoid-if 与迁移成本见 llm-serving-engine-selection-map。本页没有同模型、同硬件、同 SLO 的跨项目实测,因此只给职责和验证顺序,不给性能排名。

  1. 用 llm-d-benchmark、inference-perf 和 llm-d-inference-sim 统一 workload 与故障场景,分别测基线、路由和扩缩收益。
  2. 按 release 核验 EPP/KEDA/HPA 路径及 WVA 迁移,建立与历史 Source 的配置差异清单。
  3. 结合 kueue、karpenter、lws、jobset 测量 GPU 不足、模型冷启动和 worker group readiness 时间线。
  4. 对 Gateway/EPP、P/D worker、KV 通道做故障注入,记录流式输出前后的取消、重试、超时和 draining 语义。

尚需补齐 engine/connector KV 身份与布局兼容矩阵、在飞请求恢复边界、GPU sharing/拓扑对 goodput 的影响。更多候选见 llm-d-kubernetes-sigs-candidate-map。