模型部署与推理优化

推理引擎格局:vLLM、SGLang、TensorRT-LLM 与 llama.cpp

kp-020核心20 分钟06-推理服务

一句话定义

推理引擎把前几模块的技术(分页 KV、连续批处理、量化 kernel、投机解码)打包成可部署的系统,主要流派按"生态易用 vs 极致性能"与"服务端 vs 端侧"分成 vLLM/SGLang、TensorRT-LLM、llama.cpp 三大阵营。

为什么重要

选引擎是部署的第一决策:它决定了你能用的量化格式、调度行为、可调参数乃至排错工具链。多数团队的正确路径是"vLLM/SGLang 起步、瓶颈明确后局部换专用方案、端侧另走 llama.cpp/MLC",而不是一开始就赌某一家。

前置知识

  • kp-001(两条优化主线与部署形态划分)。
  • 听过 kp-014(PagedAttention)与 kp-021(连续批处理)的机制名即可,不需要先精通——本页只做系统级对比。

核心概念与流派

  • vLLM:以 PagedAttention(kp-014)起家,Python 生态、模型覆盖最广、社区最大,默认推荐的生产基座;调度与显存参数清晰(kp-022)。
  • SGLang:以 RadixAttention(前缀树式 KV 复用)为特色,多轮对话/结构化输出场景强,路由器组件提供前缀感知负载均衡(衔接 kp-023)。
  • TensorRT-LLM:NVIDIA 官方,编译期把模型编成极致 kernel(in-flight batching、FP8),单卡性能上限高;代价是构建链重、新模型支持滞后、绑定 NVIDIA。
  • llama.cpp:C++ 实现的 CPU/混合推理代表,GGUF 格式(kp-026),macOS/端侧/离线场景事实标准。
  • 其他值得知道的名字:TGI(Hugging Face)、LMDeploy、MLC-LLM(WebGPU/端侧编译)、Orca(学术奠基,迭代级调度出处)。

历史脉络与流派

服务端引擎的两大流派:"Python 灵活派"(vLLM/SGLang,快速支持新模型、社区驱动)与 "编译极致派"(TensorRT-LLM,手工 kernel + 编译图,性能上限高但灵活度低)。端侧则是"零依赖 C++ 派"(llama.cpp、MLC)。三派共享同一批底层论文思想——分页、批处理、量化——只是工程取舍不同。

原理与机制

引擎之间的差异在原理层只有三个变量:显存管理策略(分页 vs 预留)、调度粒度(迭代级 vs 请求级)、kernel 来源(手写/编译生成 vs 通用库)。所谓流派之争,就是这三个变量的取舍组合:Python 灵活派用通用 kernel 换取新模型的覆盖速度,编译极致派用构建时间换单卡性能上限,端侧 C++ 派则为带宽受限设备重新手写全部关键路径。

图示

            服务端                          端侧
 易用  ┌ vLLM ──── SGLang ┐            ┌ llama.cpp ┐
       │  (PagedAttention) │ (RadixAttn)│  (GGUF)   │
 极致  └ TensorRT-LLM ────┘            └ MLC-LLM ──┘
        (编译期 kernel, NVIDIA 专属)

实例或案例

同一 7B W4A16 模型的选型推演:自建 API 服务、模型更新频繁 → vLLM;多轮对话为主且前缀高度重复 → SGLang 前缀复用加成;追求单卡极限吞吐且模型固定、全 NVIDIA → TensorRT-LLM 编译;要跑进客户内网无 GPU 机器 → llama.cpp。四个答案对应四种真实团队。

常见误区

  • "公开 benchmark 数字可以直接搬":数字对版本、kernel、量化格式、batch 策略极敏感,必须用自己的负载画像(kp-002 口径)复测。
  • "一个引擎通吃所有模型":新模型的支持排队与算子兼容是常态,上线前验证目标模型在该引擎的成熟度。
  • "引擎差异数倍":成熟引擎在同配置下吞吐差距常见 10–40%,真正数倍差距多来自配置与部署形态(批处理、量化、投机)而非引擎本身。

自测题

  1. vLLM 与 SGLang 的标志性技术分别是什么?

要点:PagedAttention 分页 KV;RadixAttention 前缀树 KV 复用。

  1. TensorRT-LLM 的取舍是什么?

要点:编译期极致性能 vs 构建链重、模型支持滞后、绑定 NVIDIA。

  1. 为什么不能直接引用公开跑分做容量规划?

要点:跑分对版本/配置/负载敏感;容量数字必须来自自有负载的压测。

与其他知识点的关系

本页是 kp-014/kp-021 等机制的系统级载体;kp-022 展开 vLLM 参数;kp-025/kp-026 是端侧两兄弟的展开;kp-029 决策树的"服务端分支"以本页为起点。

延伸阅读

PagedAttention 与 SGLang 两篇论文分别代表两大服务端引擎的核心思想,合读可覆盖服务端引擎的主要设计空间。

#vLLM#SGLang#TensorRT-LLM#llama.cpp#引擎选型