跳转至

第6章 本地推理引擎的吞吐、延迟与部署边界


本地推理看起来像“把一个开放权重模型部署到 GPU 上”,进入生产后却会迅速变成容量、延迟和治理问题。客服摘要可能追求吞吐,前台助手关心首 Token,DataAgent 需要长上下文和结构化输出,代码助手又更依赖 Decode 速度。几类负载混在同一个服务池时,任何一种优化都可能伤到另一种任务。

本地推理的目标不是把模型跑起来,而是把模型变成可被统一网关治理、可测量、可限流、可替换和可回滚的服务能力。 单机速度只是其中一个指标。

6.1 本地推理服务位于哪里

本地推理引擎位于模型权重、GPU 资源和企业平台之间。它负责模型加载、请求调度、连续批处理、KV Cache、流式生成和服务协议,但不应直接承担租户、预算、审批和合规责任。业务应用也不应直接绑定 vLLM、SGLang 或其他引擎的私有参数,而应通过 LLM Gateway 使用稳定契约。

flowchart TD
    App["业务应用 / Agent Runtime / RAG / DataAgent"] --> Gateway["LLM Gateway<br/>认证 / 配额 / 路由 / 审计"]
    Gateway --> Router["模型路由<br/>任务类型 / 租户 / SLA"]
    Router --> Local["本地推理服务"]
    Router --> Cloud["外部模型 API<br/>兜底或高阶能力"]
    Local --> Engine["推理引擎<br/>vLLM / SGLang / LMDeploy / TGI / Ollama"]
    Engine --> Model["模型权重<br/>BF16 / FP16 / INT8 / INT4 / GGUF"]
    Engine --> Runtime["硬件资源<br/>GPU / CPU / NPU"]
    Local --> Obs["指标与日志<br/>TTFT / TPOT / 吞吐 / 显存 / 错误"]

图6-1:本地推理服务在企业平台中的位置

图6-1:本地推理服务在企业平台中的位置。来源:本书自绘。Alt text:分层图中部是本地推理服务,向上对接模型网关与各业务 Agent,向下占用 GPU 资源池,左右接入模型仓库与监控,标出它作为"模型能力供给层"的位置。

业务应用认识的是“能力与 SLO”,平台认识的是“模型服务池”,只有推理层需要认识具体引擎。 这个边界决定了以后从 Ollama 切到 vLLM、从 vLLM 增加 SGLang,业务代码是否需要跟着重写。

本地推理常见五种部署形态,它们对应不同负载和组织阶段,并非简单成熟度排序。

表6-1:单机、容器化、集群等推理部署形态的边界、优势与适用场景。来源:本书整理。

形态 典型工具 优势 主要限制 适用场景
单机交互运行 Ollama 上手快、试模型方便 缺少多租户和调度治理 个人验证、Prompt 实验
单机 HTTP 服务 Ollama API、LMDeploy 易接应用、成本低 并发与高可用有限 小团队工具、边缘节点
GPU 多卡服务 vLLM、SGLang、LMDeploy、TGI 连续批处理、并行、吞吐高 需要显存规划和监控 企业内部门户、客服、RAG
分布式推理集群 vLLM、SGLang、TGI 支持大模型和高并发 网络、调度与运维复杂 平台级模型服务
边缘轻量推理 Ollama 等 数据不出现场、网络依赖低 模型规模和上下文受限 门店助手、离线场景

上线前还应明确五类服务边界。

表6-2:模型、资源等各类服务边界必须回答的问题与平台要求。来源:本书整理。

边界 必须回答的问题 平台侧要求
模型边界 哪些模型、版本、量化格式允许上线 模型卡、License、评测和发布可追溯
请求边界 最大上下文、输出、工具调用范围 网关强制校验
租户边界 谁能调哪个模型、额度多少 认证、授权、限流、预算、审计
性能边界 TTFT、TPOT、吞吐、并发、超时 指标进入 SLO
数据边界 输入输出是否含敏感信息 脱敏、日志留存和出域策略明确

6.2 先理解 TTFT、TPOT 与吞吐

大模型推理至少要分开看 TTFT(Time To First Token)和 TPOT(Time Per Output Token)。TTFT 主要受排队、Prefill、输入长度和调度影响;TPOT 更受 Decode、并发批大小、显存带宽和采样策略影响。

对交互式助手,用户常能接受总生成稍长,却很难接受长时间没有首 Token;对离线摘要和批量标注,吞吐和单位成本比 TTFT 更重要。“tokens/s 更高”并不等于用户体验更好,平台必须按工作负载选择性能工作点。

图6-2:吞吐与延迟的取舍曲线

图6-2:吞吐与延迟的取舍曲线。来源:本书自绘。Alt text:横轴为并发吞吐、纵轴为单请求延迟的曲线,随批量增大吞吐上升但延迟也升高,曲线上标出"延迟敏感区"和"吞吐优先区"两段不同的工作点选择。

常见任务的关注点可以这样划分:

  • 在线客服、办公助手:TTFT、流式稳定性、P95/P99;
  • RAG 长上下文:Prefill、KV Cache、上下文压缩;
  • 批量摘要/评测:吞吐、GPU 小时、单位任务成本;
  • 代码生成:TPOT、长输出和格式稳定性;
  • DataAgent:结构化输出、正确性、重试成本,而不是单纯 Tokens/s。

多租户平台还必须关注尾延迟。一个超长上下文请求可能持有大量 KV Cache,让其他短请求排队;若短请求又永远优先,长任务可能饥饿。请求长度、最大输出、租户优先级和任务类型因此应进入调度与路由条件。

6.3 Prefill、Decode 与缓存:推理优化的共同底座

Transformer 推理大致分为 Prefill 和 Decode。Prefill 一次处理输入并写入 KV Cache;Decode 每一步生成新 Token 并持续读取、追加 KV Cache。

sequenceDiagram
    participant C as Client
    participant S as Scheduler
    participant M as Model Runtime
    participant K as KV Cache

    C->>S: prompt + generation config
    S->>M: Prefill input tokens
    M->>K: write KV Cache
    M-->>C: first token
    loop Decode until EOS or max_tokens
        S->>M: schedule active requests
        M->>K: read/write KV Cache
        M-->>C: stream next token
    end

输入越长,Prefill 越重;输出越长,Decode 越重;活跃请求越多,KV Cache 显存压力越大。因此优化要针对瓶颈位置,而不是把所有功能一起打开。

表6-3:连续批处理、缓存等优化机制的目标、思路与风险。来源:本书整理。

优化机制 解决的问题 基本思路 主要风险
连续批处理 固定 batch 等齐导致 GPU 空转 动态加入新请求、移除已完成请求 尾延迟与公平性
KV Cache 管理 长上下文和并发占满显存 分页、复用、压缩或卸载 碎片、复杂度或质量损失
PagedAttention 预分配和碎片浪费 用 block 管理 KV Cache 依赖引擎和 kernel
Prefix Caching 重复系统提示或长前缀 复用相同前缀 KV 命中率低时收益有限
张量并行 单卡放不下或吞吐不足 多 GPU 切分矩阵计算 通信开销
量化 权重/KV 占用过高 FP16/BF16 降到 FP8/INT8/INT4 质量退化
高效注意力内核 注意力访存开销大 优化 kernel 与显存访问 受硬件/驱动影响
推测解码 Decode 逐 Token 太慢 小模型草拟、大模型验证 接受率低会负收益
结构化输出约束 JSON/工具参数格式失败 grammar/schema 限制解码 约束过强影响表达

连续批处理是在线服务的基础能力,它提高 GPU 利用率,但调度器必须在吞吐和公平性之间取舍。KV Cache 则往往是长上下文并发的真正瓶颈:模型权重还没占满显存,几十个长请求的缓存已经足以触发排队或 OOM。

Prefix Caching 对企业 Agent 特别有价值,因为系统提示、工具 schema、安全规则和业务背景经常稳定复用。要提高命中率,应把稳定内容放在前缀,把时间、trace id、临时过滤条件等动态字段放到后缀。

量化和推测解码需要更谨慎。量化能释放显存和带宽,但必须对 SQL、代码、长上下文和安全拒答单独回归;推测解码更适合代码补全、固定模板摘要等稳定分布,不应默认作用于复杂推理。

表6-4:不同工作负载的主要瓶颈与应优先采取的优化。来源:本书整理。

工作负载 主要瓶颈 优先优化 不宜优先追求
在线客服问答 首 Token、短请求并发 连续批处理、流式、Prefix Cache 超长上下文
RAG 长上下文 Prefill、KV Cache 检索压缩、分页 KV、前缀复用 盲目提高 max_model_len
批量摘要 吞吐、成本 大 batch、量化、离线队列 极低 TTFT
代码补全 TPOT、格式 推测解码、低温、专用模型 大而泛的模型
DataAgent / NL2SQL 结构化输出、正确性 guided decoding、任务评测、工具校验 只看 Tokens/s

优化前先明确瓶颈属于排队、Prefill、KV、Decode 还是业务下游;否则“性能优化”很容易优化错层。

6.4 vLLM、SGLang、LMDeploy、TGI 与 Ollama 怎么选

主流引擎的差异不能归结为“谁 benchmark 更快”。企业应先看模型族、硬件、在线/离线负载、结构化输出、API 兼容以及团队是否具备底层调优能力。

表6-5:vLLM、SGLang、LMDeploy、TGI、Ollama 的定位、优势与适用场景。来源:本书整理。

引擎 核心定位 典型优势 更适合的企业场景
vLLM 通用高吞吐 Serving PagedAttention、连续批处理、OpenAI 兼容、生态活跃 通用模型服务、RAG、Agent 平台默认候选
SGLang 结构化生成和复杂 LLM 程序运行时 RadixAttention、结构化输出、程序化生成 Agent、多轮工具调用、JSON 密集任务
LMDeploy 大模型部署工具链 TurboMind、量化、中文开源模型生态 Qwen 等模型快速部署与评测
Hugging Face TGI HF 生态生产推理服务 仓库/Tokenizer/部署链一致 深度使用 Hugging Face 的团队
Ollama 本地模型管理和开发体验 拉取和运行简单 原型、个人助手、边缘低并发

vLLM 通用性强,常作为企业默认候选;SGLang 值得在共享前缀、复杂结构化输出和多轮生成场景单独压测;TGI 的价值是 Hugging Face 生态一致性;LMDeploy 对中文开放模型和量化实践友好;Ollama 更适合作为验证和边缘工具,不应被当作完整企业推理平台。

表6-6:按决策条件选择推理引擎的首选方向与原因。来源:本书整理。

决策条件 首选方向 原因
快速把开放模型变成生产 HTTP 服务 vLLM 或 TGI API 成熟,生态资料多
深度依赖 Hugging Face TGI 模型、Tokenizer、部署流程一致
结构化输出与复杂 Agent 程序多 SGLang / vLLM guided decoding 更重视约束解码和前缀复用
边缘、消费级 GPU、离线节点 Ollama 部署轻、模型管理简单
中文模型快速部署和量化评测 LMDeploy / vLLM 结合模型族和团队经验

平台不需要押注一个“永远最快”的引擎,而需要让多个 backend 在同一网关契约下可测量、可替换。

6.5 接入统一网关的最低条件

推理服务至少应提供稳定的模型名、消息、生成参数、租户、trace id、超时、流式开关和结构化输出契约。例如:

{
  "model": "qwen3-32b-instruct",
  "messages": [
    {"role": "system", "content": "你是一家多业务线企业内部助手。"},
    {"role": "user", "content": "总结本周客服投诉的三个主要原因。"}
  ],
  "tenant": "retail-customer-service",
  "stream": true,
  "timeout_ms": 30000,
  "generation": {"temperature": 0.2, "max_tokens": 1024},
  "response_format": {
    "type": "json_schema",
    "schema_name": "complaint_summary"
  }
}

进入统一网关前,应至少通过以下检查:

  • 模型 License、权重来源、量化方式、版本可追溯;
  • 业务不直连裸引擎,统一经过 Gateway;
  • 压测覆盖短请求、高并发、长上下文、批量和结构化输出;
  • 指标至少包含 TTFT、TPOT、tokens/s、队列、显存、KV Cache、错误率;
  • 网关限制输入/输出 Token、超时、租户额度和并发;
  • 模型/引擎升级具备灰度和回滚;
  • 调试日志、审计日志和敏感内容留存有清晰区分。

不同服务池还应登记支持的模型族、上下文、结构化输出、错误语义和已验证任务。网关据此把客服摘要路由到吞吐池,把 DataAgent 路由到结构化输出更稳的池,把敏感租户路由到私有池,而不是只按模型名转发。

6.6 发布证据与故障诊断

推理服务上线不能只保留一张压测截图。可复现的服务版本 + 真实负载边界 + 业务质量回归 + 明确回滚路径,才构成上线证据。

服务版本应至少记录:

  • 模型 Revision / 权重 digest、Tokenizer;
  • 推理引擎和镜像版本;
  • GPU 类型、数量和显存;
  • 量化格式、上下文上限、batch/并行参数;
  • 网关路由和灰度范围;
  • P95/P99 TTFT、TPOT、错误率和显存峰值;
  • 结构化输出、RAG、DataAgent、安全拒答等业务回归样本;
  • fallback、回滚目标和观察窗口。

故障诊断应沿真实请求链路拆解,而不是先重启模型。首 Token 慢时依次看网关排队、路由、引擎队列、Prefill、上下文长度和 KV Cache;流式输出中断时检查代理超时、客户端断连、网关重试和引擎错误码;结构化输出失败时区分模型自由生成、guided decoding、schema 版本和工具校验。

降级也必须按风险分层:低风险摘要可转异步队列;普通问答可切小模型或外部兜底;DataAgent、财务、合同和高风险工具调用不能“随便降级到一个能回答的模型”,应进入可解释错误、人工复核或稍后重试。每次降级都应进入 Trace。

容量变更同样按发布处理。新增副本、改量化、调整 KV Cache、batch、上下文或 speculative decoding,都可能同时改变性能和输出质量。变更前后应使用同一批短问答、长上下文、结构化 JSON、工具参数、拒答和高并发任务做回放,避免出现“压测更快、业务更差”。

6.7 运行台账、复审与责任边界

本地推理成为共享基础设施后,需要一份轻量但长期可用的运行台账。发布侧记录模型、引擎、硬件、参数、评测与回滚;运行侧记录请求量、延迟分位数、队列、错误类型、结构化输出失败、人工退回和降级。这样 DataAgent 质量下降时,团队才能判断问题来自模型、量化、schema、网关路由还是资源拥塞。

原始 Prompt 和输出不必永久保存。企业应区分:长期保存的结构化元数据、脱敏摘要,以及只在短窗口保留的原始内容。运行证据的目标是解释事实,不是无限收集文本。

开源模型还必须明确责任:模型团队负责权重来源、评测和能力边界;平台团队负责服务稳定、资源、路由和回滚;安全合规负责 License、数据来源和风险样本;业务 owner 确认任务适配性。推理框架、CUDA、驱动和算子升级也应进入同一发布门禁。

可以把开放模型分成实验、内部低风险和生产三类。生产模型要求 License、样本、镜像、路由、降级和退役材料齐备。周期复审则检查版本是否仍维护、评测是否覆盖新增任务、SLO/成本是否偏离基线、回滚目标是否仍可启动。服务越接近基础设施,越不能让“当时为什么这么配”只存在于个人记忆中。

本章小结

本地推理不是模型部署动作,而是模型能力供给层。 应用通过 LLM Gateway 使用稳定契约,平台按租户、任务、SLO、风险和成本把请求分配到合适的服务池。交互任务关注 TTFT,长上下文关注 Prefill 与 KV Cache,批量任务关注吞吐和成本,DataAgent 还要保护结构化输出和工具调用质量。

vLLM、SGLang、LMDeploy、TGI、Ollama 各有适用边界,没有一个引擎能替代平台治理。真正成熟的推理服务,应在业务高峰、容量调整、模型升级和引擎替换时仍能回答:请求去了哪里、为什么排队、何时降级、怎样回滚。

参考文献

Kwon, W. et al. (2023). Efficient Memory Management for Large Language Model Serving with PagedAttention. SOSP.

vLLM. (n.d.). Documentation.

SGLang. (n.d.). Documentation.

Hugging Face. (n.d.). Text Generation Inference documentation.

NVIDIA. (n.d.). TensorRT-LLM documentation.