Skip to content

推理重要论文

DistServe:Prefill 与 Decode 分离

DistServe 将 Prefill 和 Decode 阶段解耦到不同 GPU 上,避免两阶段在同一设备上的资源争抢。

核心问题

在 LLM 推理中,Prefill 和 Decode 是两个计算特性截然不同的阶段:

特性PrefillDecode
计算类型计算密集型通信密集型
并行度高(整段 prompt)低(逐 token)
显存需求KV Cache 初始构建KV Cache 增量更新
适合并行策略张量并行数据并行

传统做法将两个阶段放在同一 GPU 上执行,导致相互争抢资源:Prefill 需要大量计算,Decode 需要频繁访问显存带宽,二者混跑会互相干扰,降低整体性能。

解决方案

DistServe 的做法:

  1. 将 Prefill 阶段分配到一组 GPU(Prefill 节点)
  2. 将 Decode 阶段分配到另一组 GPU(Decode 节点)
  3. 通过异步通信将 Prefill 阶段生成的 KV Cache 传输到 Decode 节点

效果

  • TTFT(Time To First Token)降低
  • TPOT(Time Per Output Token)降低
  • 整体吞吐量提升

实际应用效果:在 LLaMA-13B 模型上,DistServe 相比单 GPU 部署,TTFT 降低 2.1 倍,TPOT 降低 1.5 倍,吞吐量提升 1.8 倍。

SARATHI:Chunked Prefill 与 Decode 捎带

SARATHI 解决了不同长度 Prompt 导致的 Padding 冗余问题。

核心问题

传统 Prefill 阶段中,batch 内不同长度的 prompt 需要 padding 到相同长度,造成计算浪费。同时 Decode 阶段的请求在等待 Prefill 完成时处于空闲状态。

解决方案

  1. Chunked Prefill:将长 prompt 拆分为等长的 chunk,每个 chunk 都能充分利用算力,避免 padding 冗余。

  2. Decode 捎带:在 Prefill 处理 chunk 的间隙,将 Decode 阶段的请求"捎带"到空闲的 GPU 算力上并行处理,提升 GPU 利用率。

效果

  • 减少 padding 浪费
  • 提升 GPU 利用率
  • 降低整体推理延迟

实际应用效果:在 Mixtral-8x7B 模型上,SARATHI 相比传统 Prefill,GPU 利用率从 45% 提升至 85%,吞吐量提升 1.9 倍。

SGLang:RadixAttention 与前缀缓存

SGLang 引入 RadixAttention 机制,通过基数树(Radix Tree)管理 KV Cache 的前缀共享。

核心问题

在 RAG、多轮对话等场景中,不同请求往往共享相同的 prompt 前缀(如 system prompt、few-shot 示例)。传统做法为每个请求独立计算 KV Cache,造成大量重复计算。

解决方案

RadixAttention 利用基数树结构自动检测和缓存公共前缀:

  1. 将每个请求的 token 序列插入基数树
  2. 新请求到达时,在树上查找最长公共前缀
  3. 复用已缓存的 KV Cache,只需计算增量部分

效果

  • 长 system prompt 场景下推理速度显著提升
  • 多轮对话场景下 KV Cache 命中率高
  • 与 Continuous Batching 配合效果更佳

实际应用效果:在多轮对话场景下,SGLang 的 KV Cache 命中率可达 85%,推理速度提升 2.3 倍。

Mooncake:以 KV Cache 为中心的调度

Mooncake 以 KV Cache 为中心构建推理集群,通过全局调度优化资源利用。

核心思想

传统推理调度以请求为单位,Mooncake 将 KV Cache 作为一等公民:

  1. KV Cache 可在节点间迁移和复制
  2. 全局调度器统一管理 KV Cache 的位置和生命周期
  3. Prefill 和 Decode 节点通过高速网络共享 KV Cache

效果

  • 提升集群级 GPU 利用率
  • 降低请求排队延迟
  • 支持更灵活的弹性伸缩

实际应用效果:在 128 卡集群上,Mooncake 相比传统调度,GPU 利用率提升 35%,请求排队延迟降低 60%。

其他重要工作

论文核心贡献
FlashAttentionIO 感知的精确注意力算法,通过分块计算减少 HBM 访问
PagedAttention借鉴 OS 虚拟内存管理 KV Cache,消除显存碎片
TensorRT-LLMNVIDIA 优化推理引擎,集成多种 kernel 优化
DeepSpeed-FastGenSplitFuse 技术,将 Prefill 和 Decode 统一为微批次调度

核心贡献对比

论文优化目标核心技术适用场景效果提升
DistServePrefill/Decode 解耦异步通信高并发服务TTFT 降低 2.1×
SARATHIPrefill 效率Chunked Prefill + Decode 捎带长 prompt 场景吞吐量提升 1.9×
SGLang前缀缓存RadixAttention多轮对话/RAG推理速度提升 2.3×
Mooncake集群调度KV Cache 中心化调度大规模集群GPU 利用率提升 35%
FlashAttention注意力计算分块计算 + IO 感知通用计算速度提升 2-4×
PagedAttention显存管理虚拟内存分页通用并发能力提升 2-4×

实际应用效果对比

方案延迟优化吞吐量优化显存优化实现复杂度适用规模
DistServeTTFT↓60%, TPOT↓30%吞吐量↑80%大规模集群
SARATHI整体延迟↓40%吞吐量↑90%中等规模
SGLang首 token 延迟↓55%吞吐量↑130%KV Cache↓70%中等规模
Mooncake排队延迟↓60%吞吐量↑35%大规模集群
FlashAttention计算延迟↓50-75%吞吐量↑100-300%显存↓60-80%通用
PagedAttention无直接优化吞吐量↑100-300%显存利用率↑通用

选型建议

按场景选型

  1. 高并发在线服务

    • 首选 DistServe + PagedAttention
    • 适合:聊天机器人、API 服务
    • 效果:低延迟、高吞吐
  2. 长 prompt 场景

    • 首选 SARATHI + FlashAttention
    • 适合:RAG、Agent、文档处理
    • 效果:高效处理长输入
  3. 多轮对话场景

    • 首选 SGLang + Continuous Batching
    • 适合:客服、助手、交互式应用
    • 效果:高缓存命中率
  4. 大规模集群部署

    • 首选 Mooncake + 张量并行
    • 适合:企业级服务、云平台
    • 效果:高资源利用率

按模型规模选型

  1. 小模型(< 7B)

    • FlashAttention + PagedAttention
    • 可单卡部署,注重吞吐量
  2. 中等模型(7B-30B)

    • FlashAttention + PagedAttention + Continuous Batching
    • 单卡或双卡部署,平衡延迟和吞吐量
  3. 大模型(> 30B)

    • DistServe + 张量并行 + PagedAttention
    • 多卡部署,注重延迟优化

组合优化建议

  1. 基础优化(必须):

    • FlashAttention:优化注意力计算
    • PagedAttention:优化显存管理
    • GQA:减少 KV Cache 大小
  2. 场景优化(推荐):

    • Continuous Batching:提升吞吐量
    • Prefix Caching:复用公共前缀
    • 量化:降低显存占用和计算量
  3. 高级优化(可选):

    • DistServe:Prefill/Decode 解耦
    • SGLang:RadixAttention
    • Mooncake:集群级调度

最佳实践

  1. 分阶段优化

    • 先优化 Prefill 阶段(TTFT)
    • 再优化 Decode 阶段(TPOT)
    • 最后优化整体吞吐量
  2. 监控驱动

    • 建立完善的监控体系
    • 根据监控数据持续优化
    • 定期评估优化效果
  3. 成本效益

    • 评估优化投入产出比
    • 优先选择收益高的优化
    • 避免过度优化
  4. 持续迭代

    • 关注最新研究成果
    • 及时应用新技术
    • 保持技术领先性