Skip to content

自托管 LLM 推理:vLLM 与 SGLang ​

2026 年生产级 LLM 推理的事实标准是三引擎:vLLM、TensorRT-LLM、SGLang。公开并发基准测试中扩展性良好的只有 vLLM 与 SGLang。TensorRT-LLM 用锁定 NVIDIA 换峰值性能。一句话定位:推理引擎的本质,是把"生成一个 token"的边际成本压到最低。vLLM(v0.30.0,2026-09-22 发布)靠 PagedAttention 赢吞吐。SGLang(v0.5.20,2026-09-18 仍在发版)靠 RadixAttention 赢前缀复用。

面试价值:这是区分"会调 API"与"懂推理服务化"的分水岭题,核心考点是 KV cache、批调度与显存账。Token 侧基础先看 LLM基础-Token上下文与幻觉。

1 为什么自托管:API 与自有 GPU 的决策框架 ​

先亮作者的真实答案:个人项目全走智谱 API。对话用 glm-4.5-air、视觉用 glm-4v-flash、文本解析用 glm-5.3,月成本可控。而一台像样 GPU 的月固定成本(租金/折旧 + 运维时间)远高于这份账单。自托管不是技术信仰,是一笔要算的账:

维度走 API自托管推理
成本模型按 token 计费,随用量线性涨GPU 固定成本,边际成本趋零
数据边界数据出域,靠合同约束权重与数据全在内网
运维零引擎 + 驱动 + 监控 + 容量规划全自担
模型选择平台上架的模型任意开源权重,可微调可量化
时延控制共享池,受配额与限流影响独占算力,TTFT 可控

决策框架三问:

  • 成本交叉点:把 API 月账单与"GPU 折旧/租金 + 人力运维"画成两条曲线。token 用量过了交叉点,自托管才更便宜。企业规模化推理(日亿级 token)几乎必然越线。个人与早期产品几乎必然没越线;
  • 数据边界:医疗、金融、涉密场景"不能出域"一票定夺,不用算账;
  • 时延与可控性:要独占算力压首 token 时延、要部署微调后的私有权重、要离线/专有环境交付。这些 API 给不了。

一句话:个人/早期走 API,规模化或强合规再自托管,而自托管的第一课是选引擎。

2 vLLM 核心:PagedAttention + continuous batching ​

推理服务的吞吐瓶颈几乎总在显存。KV cache(注意力缓存,来龙去脉见 LLM基础-Token上下文与幻觉)随序列增长。传统推理框架按请求的最大序列长度连续预留显存。这产生大量内部碎片(序列没用满)与外部碎片(预留区不连续),实测利用率常年不到一半。显存浪费 = 装不下并发 = 吞吐损失。

PagedAttention 借操作系统的虚拟内存分页思想。KV cache 切成固定大小的 block(如 16 个 token 一块),逻辑上连续、物理上离散,块表维护映射。按需分配、用多少占多少,浪费压到接近零。同前缀的请求(beam search、并行采样)还能共享物理块,写时复制。

 传统连续预留:                       PagedAttention:
 seq A [####--------------]          块表: A -> [7][12][3][9]
        ^按最大长度预留,实际用一半      seq B -> [7][5][21]    <- 首块与 A 共享
 seq B [############-------]         按块分配,无需连续,碎片~0

continuous batching(连续批调度):静态 batching 要等一批里最长的请求生成完才能换批,短请求全程陪跑。连续批调度把调度粒度降到每次迭代(生成一步)。某请求生成完立刻出批、新请求立刻插入,GPU 始终满批运行。两者叠加:同一张卡可服务的并发数与总吞吐成倍提升。

其他关键词:tensor parallel / pipeline parallel 多卡切分。量化加载(FP8/GPTQ/AWQ)。以及对 MoE 稀疏模型的支持(fused MoE kernel 与专家并行)——这决定了它能不能跑 2026 年的国产旗舰开源模型。生态位:OpenAI 兼容 API 开箱即用;NVIDIA/AMD 之外,Google 已于 2026-10-20 发布 vLLM 的 TPU 生产级引擎。

bash
# 典型启动:多卡张量并行 + FP8 权重,直接暴露 OpenAI 兼容 API
vllm serve <模型路径或仓库> \
  --tensor-parallel-size 2 \
  --quantization fp8 \
  --max-model-len 32768

3 SGLang 核心:RadixAttention 与约束解码 ​

SGLang 的两个杀手锏:

  • RadixAttention:把所有请求的 KV cache 挂在一棵基数树(radix tree)上,节点是"前缀段"。新请求先沿树匹配,命中部分直接复用现成 KV,不必重算 prefill。收益场景极其明确:多轮对话(system prompt + 历史轮次逐轮变长但前缀不变)。Few-shot 大提示词、Agent 反复读同一份工具说明。前缀命中一次,省的是一整段 prefill 的计算与 TTFT;
  • 结构化输出约束解码:把 JSON Schema / 正则 / 语法约束编译成状态机。生成每一步屏蔽不合法 token 的 logits,从根上保证输出可解析。对比"生成后校验失败重试"既省 token 又稳时延。与 结构化输出工程-Pydantic与LLM 的 schema 定义层正好上下游衔接。

与 vLLM 的差异化一句话:vLLM 是通用默认解,SGLang 在"前缀复用密集 + 约束输出密集"的 Agent / 多轮负载上更强。两边在互相靠近——vLLM 也有自动前缀缓存(automatic prefix caching)。SGLang 的吞吐与量化支持也在追平。差异在"默认好不好"与"上限高不高"。版本侧:SGLang v0.5.20(2026-09-18)仍在高频发版;Google 同样在 2026-10-20 给了 SGLang TPU 生产级引擎。

4 选型决策表 ​

维度vLLMSGLangTensorRT-LLM
定位通用默认解前缀复用 + 约束解码NVIDIA 闭源,极致性能
总吞吐高高;多轮/同前缀场景更高峰值最高(需逐模型编译 engine)
TTFT良前缀命中时显著更低优
多轮前缀复用有(自动前缀缓存)核心强项(RadixAttention)一般
结构化输出支持核心强项(约束解码成熟)支持
硬件NVIDIA/AMD,2026-10 起 TPUNVIDIA/AMD,2026-10 起 TPU仅 NVIDIA
运维成本低,开箱即用低,开箱即用高:编译构建、版本绑定

选型口诀:默认 vLLM;Agent 多轮 + JSON 输出密集选 SGLang;锁定 NVIDIA、愿意吃编译运维换极致 SLA 才上 TensorRT-LLM。佐证:2026 年公开并发基准测试中扩展性良好的仅 vLLM 与 SGLang 两家。

5 国产开源模型部署要点:显存账与量化 ​

2026 年的旗舰开源模型清一色 MoE 稀疏架构:

  • GLM-5:2026-02-12 发布,MIT 协议,总参数 ~744B / 激活 ~40B,已迭代至 GLM-5.3;
  • Qwen3.5:2026-02 发布,原生多模态智能体路线,已演进 3.6 → 3.8;
  • DeepSeek-V4 系:2026-04 起陆续发布。

部署前先算三笔账(社区用「总参数-A激活参数」命名模型,如 30B-A3B,A 就是下面第二条账):

总显存   ≈ 权重 + KV cache + 激活与运行时开销
权重     ≈ 参数量 × 每参数字节        (BF16=2 / FP8=1 / INT4=0.5)
KV cache ≈ 2(K/V) × 层数 × KV头数 × head_dim × 每元素字节 × 上下文token数 × 并发数

(GQA 架构下 KV 头数远小于注意力头数,这行公式是长上下文能商用的原因之一。)

AxxB 激活结构的意义:MoE 把成本从"计算"搬到了"显存与互连"——

  • 算力账看激活参数:每 token 只过激活的那部分参数。FLOPs 与同规模激活量的稠密模型同量级,解码吞吐可观;
  • 显存账看总参数:全部专家的权重必须整体装进显存(或做 offload),起步就是多机多卡 + 专家并行的规模。这正是个体与小团队走 API 的根本原因(回到第 1 节的账);自托管请选同家族的中小尺寸模型。以 GLM-5 的权重账为例:
 GLM-5 权重显存(仅权重,未含 KV cache 与运行时):
   BF16 : 744B × 2 字节    ≈ 1.49 TB   -> 多机多卡 + 专家并行起步
   FP8  : 744B × 1 字节    ≈ 744  GB   -> 单机 8 卡级才能装下
   INT4 : 744B × 0.5 字节  ≈ 372  GB   -> 量化换显存的极限档

量化选择的三条经验:

  • 首选 FP8 权重:新卡原生支持,精度损失小,显存直接减半;
  • INT4/AWQ/GPTQ 再省一半显存,但长上下文与 MoE 路由对低比特更敏感,先过质量评估再上生产;
  • KV cache 也可量化(FP8 KV),长上下文高并发场景收益显著。

6 生产清单:监控指标与多实例 ​

两家引擎都自带 OpenAI 兼容接口与 Prometheus /metrics。指标先挂到一次请求的生命周期上看,口径就统一了:

 到达 ──► 排队 ──► prefill(并行,吃满算力)──► decode(逐 token)──► 完成
                      │                        │
                      └ TTFT:首 token 时延      └ TPOT:后续每 token 的间隔
 排队段变长 = 实例过载;TTFT 长 = prefill 慢或队列深;TPOT 长 = decode 慢(批过大/算力不足)

落到仪表盘上就是这几项:

指标含义信号价值
TTFT首 token 时延prefill 能力 + 队列深度;Agent 链路延迟感受的大头
TPOT/ITL逐 token 时延解码速度,决定长输出的延迟感受
总吞吐 tokens/s全局出词速率容量规划的核心数
前缀/KV 命中率缓存健康度SGLang 场景尤其:命中率跌 = 成本涨
排队数 / 运行并发过载信号限流与扩容依据
GPU util / 显存水位硬件层排除"卡没喂饱"或"显存将爆"

多实例与负载均衡:

  • 多副本 + 网关:横向扩实例,轮询/最少连接起步;
  • 前缀感知路由:把相同前缀(同租户、同 system prompt)的请求粘到同一实例,让 radix/前缀缓存真正命中。这层路由的收益常大于多加一台机器;
  • 过载保护:引擎侧设最大并发与队列上限,超限快速失败优于无限排队;滚动发布时先 drain 再摘流量。

面试追问链 ​

  • 为什么要自托管?→ 数据边界 / 成本交叉点 / 时延与私有权重;个人项目为什么反着选?→ API 月账单远低于 GPU 固定成本,没过交叉点;
  • vLLM 为什么快?→ PagedAttention 把显存利用率从不到一半提到接近满 → 装得下更多并发 → continuous batching 让 GPU 满批运行;
  • PagedAttention 解决什么问题?→ KV cache 的碎片浪费;怎么做?→ 固定 block 分页 + 块表映射,逻辑连续物理离散,还能共享前缀块;
  • continuous batching 与静态 batch 的区别?→ 调度粒度从"一批"降到"一次迭代",完成即出、新请求即入;
  • RadixAttention 是什么?→ 基数树组织的全局 KV cache 前缀复用;什么负载收益最大?→ 多轮对话、Few-shot、Agent 同前缀;
  • 结构化输出怎么保证合法?→ 约束解码:schema 编译成状态机屏蔽非法 token,而不是生成后校验重试;
  • MoE 模型部署,算力看什么、显存看什么?→ 算力看激活参数,显存看总参数;
  • 744B 的 GLM-5 为什么个人玩不动?→ 权重显存账 BF16 约 1.5 TB,多机多卡起步;
  • 生产监控盯哪几个数?→ TTFT / TPOT / 总吞吐 / 前缀命中率;
  • 三引擎怎么选?→ 默认 vLLM;Agent 多轮 + 结构化输出 SGLang;NVIDIA 极致 SLA 上 TensorRT-LLM。

面试官视角小结 ​

这道题分层明显:能报出两个引擎名字只是及格。讲清 PagedAttention 与 continuous batching、RadixAttention 与约束解码,说明读过原理。能现场算显存账(权重 × 每参数字节 + KV cache 公式)、点破 MoE「算力看激活、显存看总量」。说出前缀感知路由与 TTFT/TPOT 监控口径,是有生产经验的信号。

最高级的回答反而是清醒的克制。能论证"我们为什么走 API 不自托管"(没过成本交叉点、744B 的显存账不成立)。这说明工程判断先于技术炫技。引擎版本会过时,决策框架不会。上下文与幻觉基础见 LLM基础-Token上下文与幻觉,schema 工程见 结构化输出工程-Pydantic与LLM。

2026-10 新增(2026 技术栈补全)。