LLM Serving / 推理引擎选型地图
选型从 workload 和 SLO 开始:先确定在线/批处理、输入输出分布、缓存重复与失败预算,再确认模型/硬件适配、engine、部署形态、routing/control plane 和运维约束。不存在统一最优栈;每层都应以真实负载的收益和运行成本决定是否加入。职责与控制面时序见 llm-inference-serving-project-map。
当前上游核验(2026-10-03)
以下 release 经官方 GitHub API 核验,日期为 UTC 发布日;文档观察以 2026-10-03 为准。旧 Source 保留原分析时点,不能用旧组件图或 latest 文档替代目标 release 的兼容矩阵。
| 项目 | 观察到的版本 | 本次选型证据与限制 |
|---|---|---|
| vllm | v0.30.0,2026-09-22 | V1 latest 架构,checked 2026-10-03:API Server / Engine Core / GPU Workers 分进程,CPU 与 GPU 都需容量验证 |
| sglang | v0.5.21,2026-10-02 | Scheduler、ModelRunner、RadixCache;P/D 集成受版本/backend 约束 |
| dynamo | v1.5.0,2026-09-21 | dev 架构,checked 2026-10-03:模块化 request/event/discovery 与控制连接;该 release 的 vLLM/SGLang pins 与独立最新版不同 |
| llm-d | v0.10.0,2026-09-29;架构文档仍显示 v0.9 latest | dev 扩缩路径,checked 2026-10-03:EPP metrics → KEDA/HPA,WVA deprecated;release 记录 WVA 指南废弃与组件迁移 |
| aibrix | v0.7.0,2026-06-18 | 多引擎、P/D、Batch、HA Gateway 均进入比较范围;Console、Batch API、Resource Manager/Cloud GPU 保留 preview 提示 |
[!warning] Conflict
WVA 旧设计见 llm-d-workload-variant-autoscaler。2026-10-03 的 llm-d dev 文档明确 WVA deprecated,v0.10.0 release确认指南废弃,但 v0.9 架构页仍并列 WVA 与 HPA/KEDA。新部署应核验目标 release 的 EPP/KEDA/HPA 配置,旧 Source 不作为当前默认方案。
F4 · Workload / SLO-first 选型决策树
flowchart TD
Work["记录 workload:模型、请求分布、租户与突发"] --> Mode{"在线还是批处理?"}
Mode -->|"在线 / streaming"| Online["TTFT / ITL / P99 / 成功率预算"]
Mode -->|"批处理 / 离线"| Batch["完成期限 / 成本 / 吞吐与重试预算"]
Online --> Profile["上下文与输出长度分布 / prefix 重复 / 多模态"]
Batch --> Profile
Profile --> Target["确定 goodput 与容量目标,保留对应延迟约束"]
Target --> HW{"模型 / 量化 / 硬件与拓扑是否支持?"}
HW -->|"未确认"| Support["先验证模型正确性、显存、互联和候选 backend"]
Support --> Engine
HW -->|"已确认"| Engine["同 workload 验证 vLLM / SGLang / 其他 engine"]
Engine --> Shape{"共置 engine 副本能满足目标?"}
Shape -->|"是"| Agg["Aggregated baseline / 必要的模型并行"]
Shape -->|"否且瓶颈有证据"| Dist["比较 P/D 或 distributed runtime 与 engine-native 集成"]
Agg --> K8s{"需要 Kubernetes 路由或控制能力?"}
Dist --> K8s
K8s -->|"普通服务足够"| Plain["普通 Service / Gateway 或已有入口"]
K8s -->|"需要 inference-aware picking"| Route["评估 llm-d / 已有路由组件"]
K8s -->|"需要 fleet lifecycle 或扩缩"| Control["评估 AIBrix / Dynamo 控制模块 / 已有 controllers"]
Plain --> Validate["验证 GPU 容量、运维所有权、成本、故障与 benchmark"]
Route --> Validate
Control --> Validate
Validate --> Decision{"满足 SLO / 成本 / 可靠性门槛?"}
Decision -->|"是"| Adopt["采用最小充分组合并保留回滚路径"]
Decision -->|"否"| Profile
图注:箭头表示收集证据的评估顺序,不是运行时调用。假设模型质量与 API 语义已列入门槛;在线与 batch 混合时应分别测量并验证隔离。TTFT/ITL 主要约束交互请求,batch 还看完成期限与单位成本,见 batch-inference、llm-serving-performance。
不要从图中推断分支互斥、某项目必选,或 P/D 一定修复吞吐/延迟问题。llm-d、AIBrix、Dynamo 有职责重叠,可在接口明确时组合;每个副本目标必须只有一个写入者。P/D 收益需覆盖 KV transfer、网络拓扑与故障成本,见 disaggregated-serving;本页不指定统一最优 engine 或 stack。
决策输入与通过条件
| 顺序 | 必须记录的输入 | 通过条件与下一步 |
|---|---|---|
| Workload | 在线/离线、到达率与突发、模型/量化、上下文与输出分布、prefix 重复、多模态、LoRA | 可回放代表性请求,不能只用平均长度或单条 demo |
| SLO | TTFT/ITL 分位数、成功率、deadline、goodput、成本上限 | 固定统计窗口、负载和超时/拒绝计数口径,见 llm-serving-performance |
| Hardware / topology | GPU/显存、CPU、NUMA/NVLink/RDMA、模型存储与配额 | 模型正确运行,通信与冷启动可测,见 k8s-gpu-device-stack |
| Engine | 模型/量化、scheduler/KV、并行、API、输出正确性 | 同环境比较 vllm、sglang 与适用的其他 engine;continuous-batching 按负载调优 |
| Distributed shape | 单副本瓶颈、模型并行、共置副本、P/D 与 KV transfer | 实测显示收益才增加分离/runtime,见 llm-inference、disaggregated-serving |
| Routing / control plane | locality/load 信号、发现、扩缩、adapter lifecycle、批任务 | 明确状态 owner,验证 readiness 与路由传播,见 inference-routing |
| Operations | 发布/回滚、监控、值班、配额、状态依赖、隔离、故障预算 | 演练冷启动、过载、worker/网络失败与 draining,见 llm-serving-reliability |
选项目时比较同一层
| 候选 | Best fit | Avoid-if | 采用 / 迁移成本 | 下一步核验 |
|---|---|---|---|---|
| vllm | 目标模型/硬件可用,需要执行与 API 基线 | 必需模型、量化或 backend 特性未支持 | 低到中;镜像、权重、API、并行与监控;换 engine 需重验输出和缓存行为 | TTFT/ITL/goodput、CPU 配额、显存、稳定性与 paged-attention |
| sglang | prefix reuse 或执行特性在目标流量上有收益 | 关键模型/硬件或高级特性组合未验证 | 低到中;重新调参和输出回归,P/D backend 增加复杂度 | radix-attention 命中收益、chunking/speculation 共存、尾延迟和取消 |
| dynamo | 多节点 worker 协作、P/D 或 KV routing 值得集中协调 | 共置副本达标,或网络/运维成本超过收益 | 高;worker 集成、runtime、状态/传输、Planner/Operator 与观测 | 固定 backend pins,比较 aggregated/P/D,测试 transfer、failure 与 readiness |
| llm-d | K8s 上需要 Gateway API、EPP、InferencePool 与智能路由 | 普通 Service/LB 足够,或缺 K8s/Gateway 运维条件 | 中到高;CRD/chart/Proxy/EPP 兼容及旧插件、WVA/KV-cache 迁移 | release 组件矩阵、信号时效、KEDA/HPA 所有权、fallback 与实际收益 |
| aibrix | 路由、扩缩、model/adapter lifecycle 或多引擎 fleet 缺口明确 | 所需能力已有 owner,或 preview API 不能接受 | 中到高;按组件引入 controller/CRD/runtime,确认状态迁移与回滚 | engine 支持版本、HA 状态同步、controller 恢复、Batch/Console 成熟度 |
不同层不能组成 engine 单选题。引擎先通过模型与 SLO 验收,外围层再处理其边界之外的问题;GPU 基础设施是所有组合的运行条件。跨云/K8s/Slurm 资源位置需求可另评估 SkyPilot,当前范围见官方 README。
组合方案
| 模式 | 组成 | Best fit | Avoid-if | Adoption cost | 下一步核验 |
|---|---|---|---|---|---|
| 最小 engine service | vllm 或 sglang + 普通 Service/Gateway | 单集群普通副本已达标 | 已测出 KV-aware routing、P/D 或 lifecycle 缺口 | 低;engine、镜像、模型、监控与入口 | 冷/热缓存回放、P99/goodput、升级和实例故障 |
| K8s 智能路由 | engine + llm-d Proxy/EPP/InferencePool | KV/负载/模型信号改善选点 | 收益不足以覆盖额外组件与信号维护 | 中到高;入口、CRD、EPP 与扩缩集成 | 对照普通 LB,测陈旧信号、扩缩传播及 EPP 故障 |
| Distributed runtime | engine + dynamo 的所需模块 | P/D 或 worker 协作对 SLO 有实测收益 | 带宽/backend 约束不满足,或普通副本足够 | 高;worker pools、transport、可选状态与控制模块 | 按 pins 验证 KV transfer、取消、角色扩缩与网络故障 |
| Inference operations platform | engine + 选定 aibrix 组件 | fleet、autoscaling 或多引擎运维缺口明确 | 与已有 Gateway/autoscaler/operator 重复管理状态 | 中到高;组件级 CRD、runtime 与状态恢复 | reconciliation、升级/回滚、HA 与 replica ownership |
| 异步 batch 服务 | engine + llm-d-batch-gateway 或 AIBrix Batch 等任务层 | 需要任务提交/查询/取消、文件 I/O 与 deadline 管理 | 只需本地离线执行,或 API 成熟度不符要求 | 中到高;持久队列、任务状态、结果、幂等与调度 | batch-inference 生命周期、重试、完成时限及在线流量隔离 |
组合是候选设计,不代表任意版本交叉兼容。Dynamo v1.5.0的引擎依赖与本页独立 release 不同,AIBrix v0.7.0的 Batch API 仍有 preview 提示。混合平台前,逐项确认 request ownership、KV 契约、扩缩写入权、状态后端和升级顺序。
采用前的最小证据包
保留模型与 engine/container 版本、硬件/拓扑、输入输出长度分布、到达过程、缓存冷热状态、并行/batch 参数以及 benchmark 原始结果。同一目标下同时报告 goodput、TTFT/ITL 分位数、拒绝/错误率、GPU 成本与扩容滞后;切换 engine 或外围组件时只改变被比较变量。
上线门槛包括 API/输出回归、冷启动、超时与取消、worker/Gateway/网络故障、缩容排空、升级回滚和多租户隔离。可复用 llm-d-benchmark、inference-perf 与 llm-d-inference-sim;模拟器只能验证覆盖的控制面行为,不能证明 GPU 性能。指标方法见 llm-serving-performance,故障验收见 llm-serving-reliability。