跳转至

并行切分下的 KV 形态

部署维度之二:当模型被 TP / PP / SP / EP 切到多卡多节点时,KV 也跟着被切——切的方式不同,搬运代价、聚合代价、与 prefix cache 的兼容度都不同。

1. 四种主流切法

切分维度 缩写 KV 沿哪个维度切 通信代价
张量并行 TP head 维度 All-Reduce/All-Gather per layer
流水并行 PP layer 维度 微批之间的激活传递
序列 / 上下文并行 SP / CP sequence 维度 Attention 计算时的 K/V 交换
专家并行 EP (MoE)专家维度 与 KV 关系间接

2. TP(Tensor Parallelism)下的 KV

怎么切:每张 GPU 持有 \(H_{kv}/N\) 个 KV head(\(N\) 是 TP size)。 - TP=8 + GQA(8) → 每卡 1 个 KV head - TP=4 + MHA(64) → 每卡 16 个 KV head

对系统的影响:

  • KV 总量不变,但每卡只有 KV 的 1/N——整卡 HBM 压力下降
  • decode 时每卡只算自己负责 head 的 attention,不需要跨卡通信 KV 本身(但有 q/o 张量的 All-Reduce)
  • prefix cache 可以逐卡独立维护:每卡的 KV 段是自己负责 head 的,互不干扰

与 GQA 的边界:当 \(\text{TP size} > H_{kv}\) 时,每卡分不到一个完整 head——必须复制 KV head 或调整 TP/GQA 配比。例如 GQA(8) 模型不能跑 TP=16(除非用其他切分方式辅助)。

3. PP(Pipeline Parallelism)下的 KV

怎么切:模型沿 layer 维度被切到 \(S\) 个 stage,每个 stage 持有自己 stage 的 KV。

对系统的影响:

  • 每个 stage 的 KV 是完整 token 序列在该 stage 几层的 K/V
  • decode 时每步生成的 token 需要顺序穿过所有 stage,KV 写入也按 stage 顺序发生
  • prefix cache 可以逐 stage 独立维护

问题:

  • PP 的"气泡"问题在 decode 阶段尤其严重——每步只有一个 token 在流水
  • 因此纯 PP 几乎不用于 decode,更多是 prefill 时配合大模型权重加载
  • decode 阶段通常退回 TP

4. SP / CP(Sequence / Context Parallelism)下的 KV

怎么切:序列被切成 \(C\) 段,每张卡负责一段 token 的 K/V。

典型场景:长上下文(128K+),单卡 KV 装不下时强制开启。

两种主流实现:

方案 思路 代表
Ring Attention 各卡按 ring 拓扑轮转传递 K/V,每卡看到所有 K/V arXiv:2310.01889
Striped/Loongtrain 不规则切分让负载更均衡 LoongTrain 等

对 KV 的影响:

  • 单卡只持有自己段的 K/V → 容量上限被切除
  • decode 时每生成一个 token 都需要看到所有段——要么 ring 通信要么集中聚合
  • prefix cache 复杂:跨段命中需要重新切分对齐

何时启用:单请求 KV 超过单卡容量上限。8K-32K 一般 TP 足够;超过 128K 通常上 SP/CP。

5. EP(Expert Parallelism)

MoE 模型中,专家被分布到不同 GPU。EP 与 KV 的关系是间接的:

  • KV 来自 attention,与 expert 选择无关
  • 但 expert 路由会把同一 token 在不同层路由到不同 GPU → 跨卡的激活传递增加
  • KVCache 本身仍按 TP/SP/PP 规则切分

主要影响是 EP 增加了 all-to-all 通信,间接挤压了 KV 传输的带宽预算。

6. 切分组合:实际部署的拓扑

工业部署里几乎都是多种切分组合:

典型组合 适用场景
TP=8 单机 8 卡,最常见的 70B 模型部署
TP=8 × DP=4 多副本数据并行扩展吞吐
TP=8 × PP=2 跨节点超大模型
TP=8 × SP=4 长上下文推理(如 128K+)
TP=4 × EP=8 MoE 模型部署

7. 各切分下 KV 的搬运、聚合、通信代价

切分 KV 主要通信开销 频率
TP 不直接搬 KV,但每层 attention 后 q/o all-reduce 每层每步
PP KV 不跨 stage 流动,但 token 激活跨 stage 传递 每步
SP/CP 每步要在 ring 上传一遍 KV(或 K/V 摘要) 每步
EP 与 KV 间接(all-to-all 占带宽) 每个 MoE 层

8. PD 分离下的 TP 不对称问题

PD 分离 中,Prefill 节点和 Decode 节点的 TP 配置可以不同:

  • Prefill 用 TP=8(高算力)
  • Decode 用 TP=4 或 TP=2(节省资源)

KV 在两端的 head 切分布局不一致,直接传输无法用,必须做KV reshape:

Prefill TP=8: 每卡 1 个 KV head           Decode TP=4: 每卡 2 个 KV head
[H0] [H1] [H2] [H3] [H4] [H5] [H6] [H7] → [H0H1] [H2H3] [H4H5] [H6H7]

这一 reshape 在传输路径上做(pre-send 还是 post-receive),是各引擎实现差异较大的地方。

9. 切分对 prefix cache 的影响

不同切分下 prefix cache 的"独立性":

切分 各卡 prefix cache 跨卡命中需要
TP 独立 无(每卡是不同 head)
PP 独立 无(每 stage 是不同 layer)
SP/CP 不独立 需要跨段哈希对齐
多副本 DP 独立但重复 需要 cache-aware routing 才能跨副本命中(见 路由)

SP/CP 的 prefix cache 是开放问题——目前主流引擎对长上下文 + cache 复用的组合支持都不算成熟。

关联章节

版本历史

版本 日期 说明
v0.1 2026-05-14 框架搭建