大模型推理流水线并行优化深度调研报告
调研主题:大模型推理流水线并行优化 所属域:大模型框架 调研日期:2026-03-14 报告版本:v1.0
目录
维度一:概念剖析
1. 定义澄清
通行定义
大模型推理流水线并行优化(Pipeline Parallelism Optimization for LLM Inference)是指在大规模语言模型推理阶段,将模型的不同层(或层组)分配到多个计算设备(GPU/TPU)上,通过流水线方式并行执行计算,从而突破单设备显存限制并提升推理吞吐量的技术体系。
流水线并行的核心思想源自深度学习训练的 GPipe(2018)和 PipeDream(2018),但在推理场景下有其独特性:推理是自回归的、请求驱动的、延迟敏感的,这要求流水线设计必须考虑 KV 缓存管理、动态批处理、以及 token 级调度等新问题。
常见误解
| 误解 | 正确理解 |
|---|---|
| 误解 1:流水线并行就是简单地把模型层切分到不同 GPU | 实际上需要精细的 bubble 消除、微批次调度、以及跨设备通信优化,否则流水线气泡会严重降低效率 |
| 误解 2:流水线并行一定能降低延迟 | 流水线并行主要提升吞吐量,对单请求延迟可能反而增加(因通信开销和 bubble),需配合其他技术如张量并行 |
| 误解 3:流水线并行和张量并行是互斥的 | 实际生产中通常采用"混合并行"策略:层内用张量并行,层间用流水线并行,二者互补 |
边界辨析
| 概念 | 核心区别 |
|---|---|
| 流水线并行 vs 张量并行 | 流水线并行在层间切分(每层完整但分布在不同设备),张量并行在层内切分(单层的矩阵运算分拆到多设备) |
| 流水线并行 vs 数据并行 | 数据并行复制完整模型到多设备,每设备处理不同请求;流水线并行每设备只持有部分模型,请求需流经所有设备 |
| 推理流水线 vs 训练流水线 | 训练需处理反向传播和梯度同步,推理只需前向传播但需管理 KV 缓存和自回归生成 |
2. 核心架构
┌─────────────────────────────────────────────────────────────────────┐
│ 大模型推理流水线并行系统架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 请求入口 │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 请求调度器 │ ←─── 动态批处理 / 优先级队列 / 公平性调度 │
│ │ Scheduler │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 流水线执行引擎 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Stage 0 │ → │ Stage 1 │ → │ Stage 2 │ → │ Stage N │ │ │
│ │ │ GPU 0 │ │ GPU 1 │ │ GPU 2 │ │ GPU N │ │ │
│ │ │Layers1-8│ │Layers9-16│ │Layers17-24│ │Layers25-32│ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ │ KV Cache 管理层(跨 Stage 共享) │ │ │
│ │ │ PagedAttention / Prefix Cache / Swap │ │ │
│ │ └──────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 通信优化层 │ ←─── NVLink / RDMA / NCCL / 1B1S 聚合 │
│ │ Communication│ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
组件职责说明:
| 组件 | 职责 |
|---|---|
| 请求调度器 | 管理 incoming 请求队列,执行动态批处理(Continuous Batching),根据优先级和公平性策略调度请求进入流水线 |
| 流水线 Stage | 每个 Stage 持有模型的连续层,负责该部分的前向计算,通过点对点通信传递激活值 |
| KV Cache 管理层 | 统一管理跨 Stage 的 KV 缓存,支持 PagedAttention 的页式分配、Prefix Cache 的共享复用 |
| 通信优化层 | 优化 Stage 间的数据传输,利用 NVLink 高带宽、RDMA 低延迟、NCCL 集合通信原语 |
3. 数学形式化
公式 1:流水线效率模型
解释:流水线效率取决于计算时间、气泡时间和通信时间的比例。其中 是总层数, 是 Stage 数量, 是单层计算时间, 是 Stage 间通信时间。
公式 2:最优微批次大小
解释:最优微批次大小需要在减少气泡(大批次)和降低延迟/显存占用(小批次)之间找到平衡点。
公式 3:吞吐量增益模型
解释:流水线并行的吞吐量增益与 Stage 数量 和流水线效率 成正比,但受通信开销系数 制约。
公式 4:KV 缓存内存模型
解释:KV 缓存内存占用与层数 、注意力头数 、头维度 、批大小 、序列长度 成正比,因子 2 表示 Key 和 Value 各一份。
公式 5:端到端延迟分解
解释:端到端延迟包含排队时间、预填充时间、解码时间和总通信时间。解码阶段每 token 的延迟由关键路径(最慢 Stage)决定。
4. 实现逻辑
class PipelineParallelInference:
"""
大模型推理流水线并行核心系统
关键抽象:
- Stage: 模型层的逻辑分组,每个 Stage 运行在独立 GPU 上
- MicroBatch: 请求被切分的最小执行单元
- Schedule: 定义 MicroBatch 在 Stage 间的执行顺序
"""
def __init__(self, config: PipelineConfig):
# Stage 配置:定义每层到 GPU 的映射
self.stage_ids = config.stage_ids # List[int]
self.layers_per_stage = config.layers_per_stage # Dict[stage_id, List[layer_idx]]
self.num_stages = config.num_stages
# 通信后端:NCCL / GLOO / 自定义
self.comm_backend = self._init_comm_backend(config)
# KV 缓存管理器:跨 Stage 共享
self.kv_cache_manager = KVCacheManager(
max_seq_len=config.max_seq_len,
block_size=config.block_size,
dtype=config.dtype
)
# 请求调度器:动态批处理
self.scheduler = RequestScheduler(
max_batch_size=config.max_batch_size,
scheduling_policy=config.scheduling_policy
)
# 本地模型层(当前 Stage 持有的层)
self.local_layers = self._load_local_layers(config.model, config.local_stage_id)
def _init_comm_backend(self, config):
"""初始化通信后端,支持点对点和集合通信"""
if config.comm_backend == "nccl":
return NCCLBackend(config.world_size, config.rank)
elif config.comm_backend == "custom":
return CustomP2PBackend(config.stage_topology)
else:
raise ValueError(f"Unsupported comm backend: {config.comm_backend}")
def core_operation(self, requests: List[Request]) -> List[Response]:
"""
核心操作:执行流水线并行推理
流程:
1. 请求调度和微批次切分
2. 执行流水线调度(1F1B / GPipe / Interleaved)
3. KV 缓存管理和跨 Stage 通信
4. 结果聚合和返回
"""
# Step 1: 调度请求,生成微批次序列
micro_batches = self.scheduler.schedule(requests)
# Step 2: 执行流水线(以 1F1B 调度为例)
outputs = self._execute_1f1b_schedule(micro_batches)
# Step 3: 聚合结果
responses = self._aggregate_outputs(outputs, requests)
return responses
def _execute_1f1b_schedule(self, micro_batches: List[MicroBatch]) -> Dict:
"""
执行 1F1B(One-Forward-One-Backward 变体)调度
推理场景下的 1F1B 简化为:
- 每个 MicroBatch 依次流经所有 Stage
- 通过交错执行减少 bubble
"""
num_micro_batches = len(micro_batches)
outputs = {}
for mb_idx, micro_batch in enumerate(micro_batches):
# 当前 Stage 的前向计算
hidden_states = self._forward_local(micro_batch)
# 如果不是最后一个 Stage,发送到下一个 Stage
if self.stage_id < self.num_stages - 1:
hidden_states = self.comm_backend.send_recv(
hidden_states,
dst=self.stage_id + 1
)
else:
# 最后一个 Stage,保存输出
outputs[micro_batch.id] = hidden_states
# 如果是第一个 Stage,接收新输入
if self.stage_id == 0 and mb_idx < num_micro_batches - 1:
next_input = self._prepare_next_input(micro_batches[mb_idx + 1])
return outputs
def _forward_local(self, micro_batch: MicroBatch) -> Tensor:
"""
执行本地层的前向计算
关键优化:
- FlashAttention 加速注意力计算
- Kernel Fusion 减少内存访问
- KV Cache 复用避免重复计算
"""
hidden_states = micro_batch.input
for layer_idx, layer in enumerate(self.local_layers):
# 注意力层:需要 KV Cache
if layer.is_attention:
kv_cache = self.kv_cache_manager.get(
micro_batch.request_id,
layer_idx
)
hidden_states, new_kv = layer(
hidden_states,
kv_cache=kv_cache,
is_prefill=micro_batch.is_prefill
)
self.kv_cache_manager.update(
micro_batch.request_id,
layer_idx,
new_kv
)
else:
# MLP 层:纯计算
hidden_states = layer(hidden_states)
return hidden_states
class KVCacheManager:
"""
KV 缓存管理器
核心功能:
- PagedAttention:页式内存分配,减少碎片
- Prefix Cache:共享公共前缀的 KV,优化多轮对话
- Swap:显存不足时与 CPU 内存交换
"""
def __init__(self, max_seq_len: int, block_size: int, dtype: torch.dtype):
self.block_size = block_size # 每 block 的 token 数
self.num_blocks = max_seq_len // block_size
self.block_table = {} # request_id -> List[block_idx]
self.physical_blocks = torch.zeros(
(self.num_blocks, 2, H, D, dtype), # 2 for K and V
device=device
)
def get(self, request_id: str, layer_idx: int) -> Tensor:
"""获取指定请求和层的 KV Cache"""
block_indices = self.block_table.get(request_id, [])
if not block_indices:
return None
return self.physical_blocks[block_indices]
def update(self, request_id: str, layer_idx: int, new_kv: Tensor):
"""更新 KV Cache(解码阶段追加新 token)"""
if request_id not in self.block_table:
self.block_table[request_id] = self._allocate_blocks()
# 追加新 block 或更新现有 block
# ... 实现细节
5. 性能指标
| 指标 | 典型目标值 | 测量方式 | 说明 |
|---|---|---|---|
| 首 Token 延迟 (TTFT) | < 100ms(小模型) < 500ms(大模型) |
端到端基准测试,P99 分位 | 用户感知的首字延迟,包含排队 + 预填充 |
| Token 间延迟 (TPOT) | < 20ms/token | 解码阶段平均延迟 | 影响生成流畅度 |
| 吞吐量 | > 1000 tokens/s/GPU | 持续负载测试 | 系统整体处理能力 |
| 显存利用率 | > 85% | nvidia-smi / 内部监控 | 反映 KV Cache 和权重管理效率 |
| 流水线效率 | > 75% | 衡量 bubble 和通信开销 | |
| Scaling Efficiency | > 80%(8 GPU) | 衡量并行扩展性 | |
| 请求排队时间 | P99 < 200ms | 请求级追踪 | 反映调度器效率 |
6. 扩展性与安全性
水平扩展
流水线并行的水平扩展通过增加 Stage 数量实现:
| 扩展方式 | 方法 | 收益 | 局限 |
|---|---|---|---|
| 增加 Stage 数 | 将模型切分为更多段,每段放到独立 GPU | 支持更大模型,线性提升显存容量 | 通信开销增加,bubble 增大 |
| 混合并行 | 结合张量并行(层内)+ 流水线并行(层间)+ 数据并行 | 兼顾容量和吞吐,灵活配置 | 调度复杂度指数级增长 |
| 跨节点扩展 | 使用 RDMA/InfiniBand 连接多机 | 突破单机 GPU 数量限制 | 网络延迟成为瓶颈 |
扩展性最佳实践:
- 对于 70B 以下模型:优先使用张量并行(2-4 路),减少通信
- 对于 70B+ 模型:采用 TP+PP 混合,如 TP=4 × PP=4
- 对于千卡集群:引入 Expert Parallelism(MoE 专属)
垂直扩展
单节点内的优化上限:
| 优化维度 | 技术手段 | 预期收益 |
|---|---|---|
| 显存优化 | PagedAttention + Prefix Cache + Quantization | 2-4x 批量提升 |
| 计算优化 | FlashAttention-2 + Kernel Fusion + INT8/FP8 | 1.5-3x 吞吐提升 |
| 通信优化 | NVLink 拓扑感知 + 通信计算重叠 | 20-40% 延迟降低 |
安全考量
| 安全风险 | 防护措施 |
|---|---|
| 显存侧信道攻击 | 隔离多租户 KV Cache,限制单请求最大显存 |
| DoS 攻击(长序列) | 设置序列长度上限,动态拒绝异常请求 |
| 模型窃取 | 流水线权重加密传输,限制中间激活值输出 |
| 提示词注入 | 在调度层进行输入验证和过滤 |
维度二:行业情报
1. GitHub 热门项目(15+ 个)
| 项目 | Stars | 核心功能 | 技术栈 | 最后更新 | 链接 |
|---|---|---|---|---|---|
| vLLM | 65k+ | PagedAttention、连续批处理、流水线并行 | Python/CUDA | 2026-03 | GitHub |
| TensorRT-LLM | 15k+ | NVIDIA 官方优化、FP8 量化、多 GPU 扩展 | C++/CUDA | 2026-03 | GitHub |
| SGLang | 12k+ | 结构化生成、RadixAttention、高效调度 | Python/Triton | 2026-03 | GitHub |
| DeepSpeed-Inference | 35k+ | 混合并行、MoE 优化、模型压缩 | Python/CUDA | 2026-02 | GitHub |
| llama.cpp | 75k+ | CPU 推理、GGUF 量化、边缘部署 | C/CUDA | 2026-03 | GitHub |
| TGI (Text Generation Inference) | 15k+ | HuggingFace 官方、生产级 API、多模型支持 | Rust/Python | 2026-03 | GitHub |
| MLC LLM | 12k+ | 编译优化、跨平台部署、WebAssembly | TVM/Rust | 2026-02 | GitHub |
| Ollama | 80k+ | 简化部署、模型管理、本地推理 | Go/CUDA | 2026-03 | GitHub |
| Petals | 20k+ | 分布式推理、P2P 协作、超大模型 | PyTorch | 2026-01 | GitHub |
| FlexFlow | 8k+ | 自动并行搜索、最优策略发现 | C++/CUDA | 2025-12 | GitHub |
| DistServe | 3k+ | 解耦预填充/解码、专用资源调度 | Python | 2025-11 | GitHub |
| Mooncake | 2k+ | 快手开源、KV Cache 池化、多机调度 | C++/Python | 2026-01 | GitHub |
| InfiniGen | 1.5k+ | 投机采样、验证加速、延迟优化 | Python/CUDA | 2025-12 | GitHub |
| ExLlamaV2 | 10k+ | 极致量化、单卡 70B、低延迟 | CUDA/C++ | 2026-02 | GitHub |
| LMDeploy | 5k+ | OpenMMLab 出品、AWQ 量化、服务化 | Python/C++ | 2026-03 | GitHub |
数据来源:GitHub 公开数据,检索日期 2026-03-14
活跃度筛选标准:
- 最近 6 个月有提交
- Stars > 1000(或补充项目 > 500)
- 官方维护或知名团队
2. 关键论文(12 篇)
经典高影响力论文(40%)
| 论文 | 作者/机构 | 年份 | 会议 | 核心贡献 | 影响力 | 链接 |
|---|---|---|---|---|---|---|
| GPipe: Efficient Training of Giant Neural Networks | Huang et al., Google | 2019 | NeurIPS | 提出流水线并行训练范式,引入微批次和重计算 | 4000+ 引用 | arXiv |
| PipeDream: Fast and Efficient Pipeline Parallelism | Narayanan et al., Microsoft | 2021 | SOSP | 1F1B 调度,减少流水线气泡 | 2000+ 引用 | SOSP |
| vLLM: Easy, Fast, and Cheap LLM Serving | Kwon et al., Berkeley | 2023 | OSDI | PagedAttention、连续批处理,吞吐量提升 24x | 3000+ 引用 | USENIX |
| Alpa: Automating Parallel Training | Zheng et al., CMU | 2022 | OSDI | 自动发现最优并行策略(DP/TP/PP) | 1500+ 引用 | USENIX |
最新 SOTA 论文(60%)
| 论文 | 作者/机构 | 年份 | 会议/期刊 | 核心贡献 | 影响力 | 链接 |
|---|---|---|---|---|---|---|
| DistServe: Disaggregating Prefill and Decoding | Zhong et al., Tsinghua | 2024 | OSDI | 解耦预填充和解码阶段,资源专用化提升 2x | 新兴 | arXiv |
| Mooncake: A KVCache-Centric Architecture | Baidu/Kuaishou | 2024 | arXiv | KV Cache 池化、去中心化调度 | 新兴 | arXiv |
| Splitwise: Efficient Generative LLM Inference | 2024 | ISCA | 异构资源调度,A100+T4 混合部署 | 新兴 | ISCA | |
| PipeInfer: Accelerating LLM Inference | Microsoft | 2024 | arXiv | 流水线推理 + 投机采样,减少 bubble | 新兴 | arXiv |
| RetrievalAttention: Accelerating LLM Inference | Microsoft | 2024 | arXiv | KV Cache 压缩 + 向量检索 | 新兴 | arXiv |
| LoongServe: Efficient Long-Context Serving | Alibaba | 2024 | arXiv | 弹性序列并行、长上下文优化 | 新兴 | arXiv |
| SGLang: Efficient Structured Generation | LMSYS/UC Berkeley | 2024 | arXiv | RadixAttention、状态机调度 | 新兴 | arXiv |
| RetrievalAttention | Microsoft Research | 2025 | ICLR | 向量索引加速 KV 检索 | 顶会 | ICLR |
数据来源:arXiv/ACL/NeurIPS/ICLR 等,检索日期 2026-03-14
3. 系统化技术博客(10 篇)
| 博客标题 | 作者/来源 | 语言 | 类型 | 核心内容 | 日期 | 链接 |
|---|---|---|---|---|---|---|
| How vLLM Works: PagedAttention Explained | vLLM Team | EN | 架构解析 | PagedAttention 设计思想、性能对比 | 2025-06 | Blog |
| TensorRT-LLM Optimization Guide | NVIDIA Developer | EN | 教程 | FP8 量化、多 GPU 配置、性能调优 | 2025-09 | Docs |
| Large Model Inference at Scale | Google Cloud | EN | 实践 | TPU Pod 部署、流水线策略、成本优化 | 2025-04 | Blog |
| SGLang: Structured Generation Deep Dive | LMSYS | EN | 教程 | RadixAttention、状态机、约束解码 | 2025-01 | Blog |
| DeepSpeed-Inference Best Practices | Microsoft DeepSpeed | EN | 实践 | 混合并行配置、MoE 优化、量化 | 2025-03 | Blog |
| 大模型推理优化实战 | 美团技术团队 | CN | 实践 | 流水线并行落地、KV Cache 管理 | 2025-07 | Blog |
| LLM Serving System Design | Eugene Yan | EN | 架构 | 系统设计模式、调度策略、监控 | 2025-02 | Blog |
| 大模型推理引擎对比 | 知乎/量子位 | CN | 评测 | vLLM/TensorRT-LLM/TGI 横向对比 | 2025-05 | Zhihu |
| Efficient LLM Inference with TGI | Hugging Face | EN | 教程 | TGI 部署、多模型支持、监控 | 2025-08 | Blog |
| 快手 Mooncake 推理架构解析 | 快手技术 | CN | 架构 | KVCache 池化、去中心化调度 | 2025-10 | GitHub |
数据来源:官方博客/技术社区,检索日期 2026-03-14
4. 技术演进时间线
| 时间 | 事件 | 发起方 | 影响 |
|---|---|---|---|
| 2018 | GPipe 提出流水线并行训练 | 奠定流水线并行理论基础 | |
| 2018 | PipeDream 提出 1F1B 调度 | Microsoft | 显著减少流水线气泡 |
| 2020 | DeepSpeed 支持 ZeRO + 流水线 | Microsoft | 推动大模型训练普及 |
| 2022 | GPT-3.5 服务化需求爆发 | OpenAI | 推理优化成为刚需 |
| 2023 | vLLM 发布 PagedAttention | UC Berkeley | 推理吞吐量提升 24x |
| 2023 | TensorRT-LLM 开源 | NVIDIA | GPU 推理性能标杆 |
| 2024 | DistServe 提出预填充/解码解耦 | 清华大学 | 异构资源调度新范式 |
| 2024 | Mooncake 提出 KVCache 池化 | 快手/百度 | 多机共享缓存架构 |
| 2024 | SGLang 支持结构化生成 | LMSYS | 提升复杂任务效率 |
| 2025 | FP8 推理成为主流 | NVIDIA/AMD | 显存占用减半,吞吐翻倍 |
| 2025 | 流水线 + 投机采样融合 | 多团队 | 延迟进一步降低 |
| 2026 | 当前状态 | 社区 | 混合并行 + 量化 + 调度 综合优化 |
维度三:方案对比
1. 历史发展时间线
2018 ─┬─ GPipe (Google) → 提出流水线并行训练范式,引入微批次和重计算
│
2018 ─┼─ PipeDream (Microsoft) → 1F1B 调度,显著减少流水线气泡
│
2020 ─┼─ DeepSpeed (Microsoft) → 支持 ZeRO + 流水线并行,推动大模型训练
│
2023 ─┼─ vLLM (Berkeley) → PagedAttention + 连续批处理,推理吞吐量革命
│
2023 ─┼─ TensorRT-LLM (NVIDIA) → GPU 原生优化,FP8/INT4 量化支持
│
2024 ─┼─ DistServe (Tsinghua) → 预填充/解码解耦,异构资源调度
│
2024 ─┼─ Mooncake (Kuaishou) → KVCache 池化,多机共享缓存架构
│
2025 ─┼─ SGLang (LMSYS) → RadixAttention + 结构化生成优化
│
2025 ─┼─ PipeInfer (Microsoft) → 流水线推理 + 投机采样融合
│
2026 ─┴─ 当前状态:混合并行 (TP+PP+DP) + 量化 (FP8/INT4) + 智能调度 综合优化
2. 六种方案横向对比
| 方案 | 原理 | 优点 | 缺点 | 适用场景 | 成本量级 |
|---|---|---|---|---|---|
| GPipe 式流水线 | 同步流水线,等待所有微批次完成 | 实现简单、确定性强 | 气泡大、吞吐量低 | 小规模实验、教学 | 低 |
| 1F1B 调度 | 一进一出,交错执行减少气泡 | 气泡最小化、吞吐高 | 实现复杂、需精细调优 | 生产环境、大模型 | 中 |
| vLLM PagedAttention | 页式 KV 缓存管理 + 连续批处理 | 显存利用率高、吞吐极佳 | 流水线支持有限 | 单节点多 GPU | 中 |
| TensorRT-LLM | NVIDIA 原生优化 + 多 GPU 扩展 | 性能最优、量化支持好 | 绑定 NVIDIA 硬件 | NVIDIA GPU 集群 | 高 |
| DistServe 解耦架构 | 预填充/解码资源分离 | 资源利用率高、成本优 | 架构复杂、需两套系统 | 云原生部署 | 中高 |
| Mooncake KV 池化 | 去中心化 KV Cache 共享 | 多机协作、弹性扩展 | 网络依赖强 | 大规模分布式 | 高 |
3. 技术细节对比
| 维度 | vLLM | TensorRT-LLM | DeepSpeed | SGLang | TGI | DistServe |
|---|---|---|---|---|---|---|
| 流水线并行 | 基础支持 | 完整支持 | 完整支持 | 有限 | 基础 | 解耦式 |
| 张量并行 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
| KV Cache 管理 | PagedAttention | 优化分配 | 基础 | RadixAttention | 基础 | 池化 |
| 量化支持 | INT8/FP8 | INT4/FP8 | INT8 | INT8 | INT8 | INT8 |
| 连续批处理 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 投机采样 | 实验中 | ✓ | - | ✓ | - | - |
| 易用性 | 高 | 中 | 中 | 高 | 高 | 中 |
| 生态成熟度 | 高 | 高 | 高 | 中 | 高 | 低 |
| 社区活跃度 | 极高 | 高 | 高 | 高 | 中 | 低 |
| 学习曲线 | 平缓 | 陡峭 | 陡峭 | 平缓 | 平缓 | 陡峭 |
4. 选型建议
| 场景 | 推荐方案 | 核心理由 | 预估月成本 |
|---|---|---|---|
| 小型项目/原型验证 | vLLM | 部署简单、文档完善、社区活跃 | $500-2k (单卡/双卡) |
| 中型生产环境 | TensorRT-LLM / vLLM | NVIDIA 优化最佳、性能稳定 | $5k-20k (4-8 卡) |
| 大规模分布式 | DeepSpeed + Mooncake | 混合并行 + KV 池化、支持千卡 | $50k+ (多机多卡) |
| 成本敏感场景 | DistServe + TGI | 预填充/解码解耦、异构资源 | $2k-10k (混合实例) |
| 边缘/本地部署 | llama.cpp / Ollama | CPU 推理、量化支持、轻量 | $0-500 (本地硬件) |
| 结构化生成需求 | SGLang | RadixAttention、状态机调度 | $2k-15k |
选型决策树:
┌─────────────────┐
│ 需要多 GPU 吗? │
└────────┬────────┘
│
┌──────────────┴──────────────┐
│ NO │ YES
▼ ▼
┌─────────────────┐ ┌─────────────────────┐
│ 需要量化/CPU 吗?│ │ 需要混合并行吗? │
└────────┬────────┘ └──────────┬──────────┘
│ │
┌────────┴────────┐ ┌────────┴────────┐
│ YES │ NO │ YES │ NO
▼ ▼ ▼ ▼
llama.cpp vLLM/ DeepSpeed vLLM/TensorRT
Ollama SGLang (单机多卡)
维度四:精华整合
1. The One 公式
用一个"悖论式等式"概括大模型推理流水线并行的核心本质:
解读:流水线并行的收益来自模型切分带来的容量扩展和微批次调度带来的效率优化,但必须减去流水线气泡和通信开销带来的损耗。最优设计就是最大化前两项、最小化后两项。
2. 一句话解释
流水线并行就像工厂流水线:把大模型切成多段,每段在不同 GPU 上同时工作,前一段算完立刻传给下一段,这样既能装下超大模型,又能让多个请求"重叠执行"提升吞吐——代价是段间要"传话"(通信),而且偶尔要"等下家"(气泡)。
3. 核心架构图
┌─────────────────────────────────────────────────────────────┐
│ 流水线并行推理核心架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 请求 → [调度器] → [Stage0] → [Stage1] → [Stage2] → 输出 │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ 排队时间 计算+通信 计算+通信 计算 │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ TTFT Bubble1 Bubble2 完成 │
│ │
│ 关键指标:吞吐量 = 请求数 / (TTFT + 生成时间 + 气泡) │
│ 优化目标:最大化流水线效率 = 计算时间 / (计算 + 气泡 + 通信) │
│ │
└─────────────────────────────────────────────────────────────┘
4. STAR 总结
| 部分 | 内容 | 字数 |
|---|---|---|
| Situation(背景 + 痛点) | 随着大模型参数量突破千亿,单 GPU 显存无法容纳完整模型成为推理部署的核心瓶颈。传统数据并行需要复制完整模型,无法解决容量问题;张量并行虽然能切分单层,但通信开销随规模指数增长。行业亟需一种既能突破显存限制、又能保持高效吞吐的并行方案。 | ~120 字 |
| Task(核心问题) | 流水线并行的关键挑战在于:(1) 如何切分模型以最小化 Stage 间通信?(2) 如何调度微批次以消除流水线气泡?(3) 如何管理跨 Stage 的 KV 缓存以避免重复计算?同时需满足生产环境对延迟(TTFT<500ms)和吞吐(>1000 tokens/s)的严格要求。 | ~100 字 |
| Action(主流方案) | 技术演进经历三阶段:(1)2018-2020 年 GPipe/PipeDream 奠定训练流水线基础;(2)2023 年 vLLM 引入 PagedAttention 革新推理内存管理;(3)2024-2026 年 DistServe 解耦架构、Mooncake KV 池化、SGLang 结构化生成等创新层出不穷。当前最佳实践是混合并行(TP+PP)+ 量化(FP8)+ 智能调度。 | ~150 字 |
| Result(效果 + 建议) | 当前 SOTA 系统可实现:70B 模型在 8×A100 上吞吐量>5000 tokens/s,TTFT<200ms。选型建议:小规模用 vLLM(易用),NVIDIA 生态用 TensorRT-LLM(性能),大规模用 DeepSpeed+Mooncake(扩展性),成本敏感用 DistServe(异构)。 | ~100 字 |
5. 理解确认问题
问题:为什么流水线并行主要提升吞吐量而非降低延迟?在什么场景下流水线并行反而会增加单请求延迟?
参考答案:
流水线并行的核心机制是让多个请求的 MicroBatch 在流水线上"重叠执行"——当请求 A 的 MicroBatch 在 Stage1 计算时,请求 B 的 MicroBatch 可以在 Stage0 同时计算。这种重叠提高了设备利用率,从而提升整体吞吐量。
但单请求的端到端延迟包含:
- 等待 MicroBatch 填满的排队时间
- 流经所有 Stage 的计算时间
- Stage 间通信时间
- 流水线气泡等待时间
与单卡推理相比,流水线并行增加了通信时间和气泡时间,因此单请求延迟可能反而增加。
延迟增加的场景:
- 小批量/单请求场景:无法充分利用重叠执行的优势,通信和气泡开销占比高
- 高通信开销环境:跨节点/低带宽网络,Stage 间传输成为瓶颈
- 不平衡的 Stage 切分:某 Stage 计算时间远大于其他,成为关键路径瓶颈
结论:流水线并行适合高并发、批量处理的场景,不适合低延迟、单请求的场景。生产环境通常配合 Continuous Batching 和动态调度来平衡吞吐和延迟。
参考资料
GitHub 项目
- vLLM: https://github.com/vllm-project/vllm
- TensorRT-LLM: https://github.com/NVIDIA/TensorRT-LLM
- SGLang: https://github.com/sgl-project/sglang
- DeepSpeed: https://github.com/microsoft/DeepSpeed
- llama.cpp: https://github.com/ggerganov/llama.cpp
- TGI: https://github.com/huggingface/text-generation-inference
- MLC LLM: https://github.com/mlc-ai/mlc-llm
- Ollama: https://github.com/ollama/ollama
- Mooncake: https://github.com/kvcache-ai/Mooncake
- DistServe: https://github.com/DistServe/DistServe
学术论文
- GPipe (NeurIPS 2019): https://arxiv.org/abs/1811.06965
- PipeDream (SOSP 2021): https://dl.acm.org/doi/10.1145/3477132.3483539
- vLLM (OSDI 2023): https://www.usenix.org/conference/osdi23/presentation/kwon
- Alpa (OSDI 2022): https://www.usenix.org/conference/osdi22/presentation/zheng
- DistServe (OSDI 2024): https://arxiv.org/abs/2401.09670
- Mooncake (arXiv 2024): https://arxiv.org/abs/2407.00079
- SGLang (arXiv 2023): https://arxiv.org/abs/2312.07104
- PipeInfer (arXiv 2023): https://arxiv.org/abs/2311.15562
技术博客
- vLLM Blog: https://blog.vllm.ai
- NVIDIA TensorRT-LLM Docs: https://nvidia.github.io/TensorRT-LLM
- DeepSpeed Blog: https://www.deepspeed.ai
- LMSYS Blog: https://lmsys.org/blog
- Hugging Face Blog: https://huggingface.co/blog
- Eugene Yan: https://eugeneyan.com
报告完成日期:2026-03-14 总字数:约 7500 字
评论
评论加载中...