6.4 vLLM 与 TGI 对比:实现差异与工程取舍


文档摘要

6.4 vLLM 与 TGI 对比:实现差异与工程取舍 同样是基于 PagedAttention 思想的 LLM 推理引擎,vLLM(UC Berkeley)与 TGI(Hugging Face)却走出了不同的工程路线。理解二者的差异,不仅是为了选型,更是为了看清 LLM 推理优化的两种哲学。 6.4.1 两大主流 LLM 推理引擎 LLM 推理引擎是「高效交付层」最活跃的赛道。基于第 6.3 节讲的 PagedAttention 思想(或类似机制),目前主流的引擎有: vLLM:UC Berkeley 出品,PagedAttention 的发明者,开源生态标杆。 TGI(Text Generation Inference):Hugging Face 出品,与 HF 生态深度集成。

6.4 vLLM 与 TGI 对比:实现差异与工程取舍

同样是基于 PagedAttention 思想的 LLM 推理引擎,vLLM(UC Berkeley)与 TGI(Hugging Face)却走出了不同的工程路线。理解二者的差异,不仅是为了选型,更是为了看清 LLM 推理优化的两种哲学。

6.4.1 两大主流 LLM 推理引擎

LLM 推理引擎是「高效交付层」最活跃的赛道。基于第 6.3 节讲的 PagedAttention 思想(或类似机制),目前主流的引擎有:

  • vLLM:UC Berkeley 出品,PagedAttention 的发明者,开源生态标杆。
  • TGI(Text Generation Inference):Hugging Face 出品,与 HF 生态深度集成。
  • TensorRT-LLM:NVIDIA 出品,追求极致 NVIDIA 硬件优化。
  • SGLang:UC Berkeley 出品(与 vLLM 同源),强调结构化生成与 RadixAttention。
  • DeepSpeed-FastGen:微软 DeepSpeed 团队的推理引擎,Dynamic Splitfuse 的发明者。

其中 vLLM 与 TGI 是社区最广为讨论、最常见的两个开源选择。本节聚焦二者对比。

6.4.2 vLLM:高性能、纯 Python、生态标杆

vLLM 由 UC Berkeley 的 Sky Computing Lab 开源(2023 年),论文《Efficient Memory Management for Large Language Model Serving with PagedAttention》成为 LLM 推理优化的奠基之作。

vLLM 的核心特点:

  • PagedAttention 发源地:原创的分页显存管理(6.3 节)。
  • 纯 Python + CUDA kernel:核心逻辑用 Python,关键 kernel 用 CUDA 手写。
  • OpenAI 兼容 API:默认提供 /v1/chat/completions 端点,与 OpenAI SDK 无缝兼容。
  • 广泛的模型支持:支持 HuggingFace 上几乎所有主流 LLM(Llama、Qwen、Mistral、DeepSeek 等)。
  • 社区活跃:GitHub star 数十万级,issue 与 PR 响应快,迭代极快。
  • 丰富的特性:Prefix Caching、量化(AWQ/GPTQ/FP8)、Speculative Decoding、LoRA 多租户、张量并行等。
# vLLM 启动伪代码(示意) from vllm import LLM llm = LLM(model="meta-llama/Llama-3-8B-Instruct", tensor_parallel_size=1, enable_prefix_caching=True) outputs = llm.generate(["Hello, how are you?"])

6.4.3 TGI:HuggingFace 原生、Rust + Python

TGI(Text Generation Inference) 由 Hugging Face 开发,是 HF 推理云(Inference Endpoints)的底层引擎。

TGI 的核心特点:

  • HF 生态原生:与 transformers、tokenizers、Hub 深度集成,新模型上线快。
  • Rust + Python 混合:网络层与调度用 Rust(高性能),模型逻辑用 Python。
  • PagedAttention 实现借鉴 vLLM:TGI 在 2023 年借鉴 vLLM 的 PagedAttention 思想,集成到自己的 FlashAttention 路径中。
  • Continuous Batching:实现 inflight batching,与 vLLM 类似。
  • 量化与张量并行:支持 GPTQ/AWQ/EETQ 量化、张量并行。
  • OpenAI 兼容 API:也提供兼容端点。
# TGI 启动伪代码(Docker 风格示意) docker run ghcr.io/huggingface/text-generation-inference:latest \ --model-id meta-llama/Llama-3-8B-Instruct \ --num-shard 1

6.4.4 二者的实现差异

虽然都基于 PagedAttention 思想,vLLM 与 TGI 在实现哲学上有显著差异:

维度 vLLM TGI
出身 UC Berkeley 学术 + 创业 HuggingFace 商业云
语言 Python + CUDA Rust + Python
架构 单进程多 worker 多进程(Router + Shards)
调度器 集中式 scheduler 分布式 router 分发
PagedAttention 发明者,原创实现 借鉴 vLLM,集成到 FlashAttention
模型支持 广(HF Hub 几乎全部) 广(HF 亲生)
OpenAI API 默认 默认
量化 AWQ/GPTQ/FP8 GPTQ/AWQ/EETQ
LoRA 多租户 支持 支持
社区迭代 极快(周级) 快(周-月级)
生产部署 KServe/Ray Serve 集成 HF Inference Endpoints 原生

调度器架构差异

vLLM 用集中式调度器:一个 scheduler 进程统一决定 batch 成员、KV Cache 分配、何时切换 Prefill/Decode。这种设计简单、控制精细,但 scheduler 可能成为瓶颈(单点)。

TGI 用分布式 router + shard:一个 Rust 写的 router 负责网络与负载均衡,把请求分发到多个 shard(每个 GPU 一个 shard)。每个 shard 独立处理分配到的请求,router 协调。这种设计更分布、更易横向扩展,但协调成本高。

💡 判读:调度器架构差异反映了两种扩展哲学。vLLM 的集中式在单节点(几张 GPU)下效率最高、控制最精细;TGI 的分布式在多节点大集群下更易扩展。对于大多数单节点 LLM 部署,vLLM 的集中式调度更直接。

6.4.5 CUDA Graph:减少 CPU 开销

二者都使用了 CUDA Graph(CUDA 图) 来减少 CPU 调度开销。

LLM 推理的每一步都要 launch 多个 CUDA kernel,每个 launch 都有 CPU-GPU 通信开销。Decode 阶段每步只算少量 token,CPU launch 的开销可能占总耗时显著比例。

CUDA Graph 把一组 kernel 调用预录制为「」,运行时一次性 launch 整个图,大幅减少 CPU 开销。这对 Decode 阶段(kernel 多但每个小)尤其有效。

维度 无 CUDA Graph 有 CUDA Graph
CPU launch 次数 多(每 kernel 一次) 少(整图一次)
Decode 阶段加速 基线 显著(10%-30%)
灵活性 高(动态形状) 中(需固定形状)

vLLM 与 TGI 都针对 Decode 阶段启用了 CUDA Graph,是二者性能接近的原因之一。

6.4.6 性能对比:谁更快?

vLLM 与 TGI 的性能对比,社区有大量 benchmark,但结论因模型、硬件、负载而异。一些公认的经验:

场景 表现
单节点、单 GPU、LLaMA 系列 vLLM 通常略快(PagedAttention 原生优化更深)
多节点、大规模集群 TGI 分布式 router 可能更易扩展
Prefix Caching 重度场景(RAG) vLLM 默认开启,表现更好
新模型首发支持 TGI 因 HF 亲生,有时更快
量化推理(GPTQ/AWQ) 二者接近
极致 NVIDIA 优化 TensorRT-LLM 才是王者

⚠️ 现实提醒:LLM 推理引擎的性能 benchmark 是「最容易做手脚的地方」——不同的 batch 策略、输入长度分布、预热方式、测量口径,都能让结果差几倍。看 benchmark 一定要看具体设置,不要轻信「A 比 B 快 X 倍」的笼统结论。建议在自己的实际负载上做对比。

6.4.7 工程取舍:除了速度,还要看什么?

生产选型不能只看吞吐数字,还要考虑多个工程维度:

易用性与文档

  • vLLM:文档完善、社区活跃、问题易找到答案。OpenAI 兼容 API 上手快。
  • TGI:文档完善、HF 官方支持。Docker 部署友好。

模型支持

  • 二者都支持主流模型,但新模型上线的优先级不同。HF 自家模型(如 Mistral 系列)有时 TGI 先支持;社区热度高的模型(如 Llama 系列)vLLM 支持快。

部署方式

  • vLLM:常通过 KServe、Ray Serve、Sky Serve、独立容器部署。与 K8s 集成灵活。
  • TGI:常通过 HF Inference Endpoints(HF 自己的云)、Docker、KServe 部署。

社区与生态

  • vLLM:社区更大、迭代更快、第三方工具(如 SkyPilot、OpenLLM)多。
  • TGI:HF 生态原生、与 Hub/transformers/PEFT 集成深。

商业与开源

  • 二者都是 Apache 2.0 开源,无商业限制。

6.4.8 选型决策

给一个选型决策树:

💡 选型经验

  • 不确定时选 vLLM——社区最大、迭代最快、特性最全、文档最完善,是当前最稳的默认选择。
  • 重度 HF 生态(频繁用 Hub 模型、PEFT 微调、HF 推理云)→ TGI
  • NVIDIA H100/H200 追求极致TensorRT-LLM(NVIDIA 硬件原生优化)。
  • 结构化生成、复杂 prompt 流程SGLang(RadixAttention 与结构化输出)。

6.4.9 推理引擎之外:完整推理平台

最后强调,vLLM/TGI 只是「推理引擎」,要构建完整的「推理平台」还要叠加(回顾 6.1 节):

组件 作用
网关 API Gateway、Istio、Envoy 流量入口、鉴权、限流
服务框架 KServe、Ray Serve 服务治理、扩缩、流量切分
推理引擎 vLLM、TGI、TRT-LLM 模型加载、批处理、显存优化
模型仓库 HF Hub、模型注册中心 模型版本管理
监控 Prometheus、Grafana 指标采集与可视化
扩缩容 KEDA、HPA 自动伸缩

一个典型的生产 LLM 推理平台是「KServe(服务框架)+ vLLM(推理引擎)+ KEDA(扩缩容)+ Prometheus(监控)」的组合。vLLM 只占其中一层,但它是最核心的「推理性能决定层」。

6.4.10 第 6 章小结与第 7 章预告

到这里,第 6 章完成了「高效交付层」的基础:

  1. 模型服务化架构(6.1):KServe/Triton/Ray Serve 三大框架,分层组合。
  2. KV Cache 困境(6.2):LLM 推理为什么慢——序列增长、碎片、两阶段不对称。
  3. PagedAttention(6.3):分页显存管理,吞吐提升 10-20 倍。
  4. vLLM vs TGI(6.4):两大主流引擎的工程取舍。

这四块构成了 LLM 推理优化的「基础包」。第 7 章将在此基础上讲更高级的优化:Chunked Prefill、量化、Speculative Decoding、PD 分离——把推理性能推向新的高度。

本节小结

  • vLLM(UC Berkeley)与 TGI(HuggingFace)是基于 PagedAttention 思想的两大主流 LLM 推理引擎。
  • vLLM 是 PagedAttention 发源地,纯 Python + CUDA,集中式调度,社区最活跃。
  • TGI 与 HF 生态深度集成,Rust + Python 混合,分布式 router,HF Inference Endpoints 原生。
  • 架构差异:vLLM 集中式 scheduler(单节点效率高)、TGI 分布式 router(多节点易扩展)。
  • 二者都用 CUDA Graph 减少 CPU launch 开销,性能接近,benchmark 因场景而异。
  • 选型:不确定选 vLLM(默认);重度 HF 生态选 TGI;NVIDIA 极致选 TensorRT-LLM;结构化生成选 SGLang。
  • 生产部署是分层组合:网关 + 服务框架(KServe)+ 推理引擎(vLLM)+ 模型仓库 + 监控 + 扩缩容。
  • vLLM/TGI 只是推理平台的一层,但是最核心的性能决定层。

第 6 章完结。下一章《第 7 章 高性能推理服务(二):批处理、量化与 Speculative Decoding》将讲清更高级的推理优化。


发布者: 作者: 灏天文库 转发
评论区 (0)
U