引言
随着大语言模型(LLM)从实验室走向生产环境,推理部署成为决定服务质量和运营成本的关键环节。一个高效的推理系统不仅需要榨取硬件的每一分算力,还要在延迟、吞吐量和成本之间找到最佳平衡。本文深入剖析当前主流的 LLM 推理框架——vLLM、TensorRT-LLM 和 SGLang,揭示其核心原理、架构差异和适用场景。
1. LLM 推理的核心挑战
LLM 推理本质上是一个内存带宽受限(memory-bound)的操作。以 13B 参数模型为例,仅加载 FP16 权重就需要约 26GB 显存,而每个 token 的推理过程需要访问全部权重,计算强度(Arithmetic Intensity)极低。
关键指标包括:
- TTFT(Time To First Token):用户从发送请求到收到第一个 token 的时间,直接影响交互体验
- TPOT(Time Per Output Token):相邻两个输出 token 之间的间隔,决定生成流畅度
- 吞吐量(Throughput):单位时间处理的 token 数或请求数,决定服务容量
- 显存效率:KV Cache 管理直接决定了能并发服务的请求数量
2. KV Cache 与 PagedAttention
传统推理系统中,每个请求预先分配一块连续的显存空间存放 KV Cache。这种静态分配方式导致严重的内存碎片和显存浪费——研究表明,平均有 60%-80% 的显存被闲置。
vLLM 提出的 PagedAttention 借鉴了操作系统的虚拟内存分页机制:
- 将 KV Cache 分割为固定大小的 block(如 16 个 token 一组)
- 每个请求维护一个 block 表,记录逻辑 block 到物理 block 的映射
- 类似 OS 的页表机制,物理 block 不必连续
- 支持 Copy-on-Write,使 beam search 等场景下共享前缀的 KV Cache
这一创新将显存利用率从约 20%-40% 提升至接近 100%,在相同硬件上可承载数倍的并发请求。
3. Continuous Batching 与调度优化
传统的 Static Batching 等待凑够一批请求才开始推理,新请求即使只需一个 decode step 也要等整批完成。Continuous Batching(又称 iteration-level scheduling)在每个 decode step 后都可以插入新请求、移除已完成请求,极大提升了 GPU 利用率。
vLLM 的调度策略包括:
- Preemption:当显存不足时,低优先级请求被换出(swap out)到 CPU 内存
- Swapping:GPU⇌CPU 显存的数据传输以 block 为单位进行
- Priority-based scheduling:基于请求优先级和截止时间的智能调度
4. 并行策略:从张量并行到流水线并行
大模型的推理离不开多 GPU 协作。主要并行策略包括:
- Tensor Parallelism(TP):将权重矩阵切分到多个 GPU,每个 GPU 计算部分结果后通过 AllReduce 通信。适用于单机多卡,通信在 NVLink 高速总线上进行
- Pipeline Parallelism(PP):将模型按层分配到不同 GPU,形成流水线。适合多机推理,但存在 pipeline bubble 效率问题
- Sequence Parallelism:将序列维度切分,与张量并行结合减少通信开销
- Expert Parallelism:MoE 模型中专有,不同的专家放置在不同 GPU 上
5. TensorRT-LLM:NVIDIA 的全栈优化
TensorRT-LLM 是 NVIDIA 官方推出的 LLM 推理优化库,深度整合了 TensorRT 编译优化和 CUDA kernel 定制:
- Graph Compilation:将模型计算图编译为高度优化的 TensorRT engine,融合算子、消除冗余内存拷贝
- In-flight Batching:类似 Continuous Batching 的动态批处理
- Custom Kernels:针对 FlashAttention、GEMM 等核心操作提供高度优化的 CUDA kernel
- FP8/INT4 量化:硬件级低精度推理,H100 上实现 2x 吞吐提升
- Disaggregated Serving:Prefill 和 Decode 阶段分离部署,避免两阶段的资源争抢
TensorRT-LLM 的优势在于极致的 NVIDIA 硬件利用效率,代价是编译部署流程相对复杂。
6. SGLang:结构化生成的革新
SGLang(Structured Generation Language)由 UC Berkeley 提出,其核心创新在于将 RadixAttention 与结构化生成统一:
- RadixAttention:将已计算的 KV Cache 存储在 Radix Tree 中,自动复用多个请求之间的公共前缀(如 system prompt),在多轮对话场景下实现 3-5x 的加速
- 受限解码(Constrained Decoding):原生支持 JSON Schema / 正则表达式约束,保证输出格式正确,减少重试开销
- Prefix Caching:自动缓存高频 prefix 的 KV Cache,减少重复计算
- Compressed FSM:将正则约束编译为压缩有限状态机,实现高效的并行约束检查
SGLang 在多轮对话、工具调用和结构化输出场景中表现卓越。
7. 量化推理:精度与效率的平衡
量化是降低显存占用和提升推理速度的关键技术:
- PTQ(训练后量化):GPTQ 基于二阶信息的逐列量化;AWQ 激活感知量化,保护重要权重通道;GGUF/GGML 面向 CPU 推理的分层量化格式
- 量化感知训练(QAT):在训练过程中模拟量化误差
- 硬件级低精度:FP8(H100)、FP4(Blackwell)等原生格式支持
8. 端到端推理服务架构
一个生产级 LLM 推理服务通常包含以下组件:
- Load Balancer:请求分发,支持基于前缀哈希的亲和性调度
- API Server:OpenAI 兼容的 /v1/chat/completions 接口
- Scheduler:请求排队、优先级管理、抢占调度
- Engine Worker:实际的 GPU 推理执行
- KV Cache Store:分布式显存管理,支持跨节点的缓存共享
- Observability:TTFT/TPOT 监控、队列深度、显存利用率等指标
9. 选型建议与性能对比
- vLLM:快速上手、模型兼容性优先。支持绝大多数 HuggingFace 模型,A100×2 上 Llama-70B 吞吐 ~2000 tokens/s
- TensorRT-LLM:极致 NVIDIA 硬件性能。FP8 量化下吞吐 ~4000 tokens/s,P99 TTFT ~150ms
- SGLang:多轮对话密集场景。RadixAttention 前缀缓存带来 3-5x 吞吐提升
- llama.cpp:CPU 推理 / 边缘设备,GGUF 格式在消费级硬件运行 7B/8B 模型
结语
LLM 推理部署是一个快速演进的领域。从 PagedAttention 到 Continuous Batching,从 TensorRT 编译优化到 RadixAttention 前缀共享,每一项创新都在推动着推理效率和成本的边界。理解这些底层原理,才能在实际业务中做出最优的技术选型。
随着 Blackwell 架构的普及、MoE 模型的盛行以及设备端推理的兴起,推理技术栈将继续分化,向着更专用、更智能、更绿色的方向演进。

发表评论 取消回复