引言

随着大语言模型(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 模型的盛行以及设备端推理的兴起,推理技术栈将继续分化,向着更专用、更智能、更绿色的方向演进。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部