1987 字
约 6 分钟
7
S23-J24 · 分布式推理:布局与 PD 分离

适用读者:要决定"单实例多卡还是多副本"、要评估 PD 分离是否划算的人。
前置:S23-J18、J19、J22(并行、通信、容量)。
覆盖旧文:A-4342 §9.1–§9.2(计算与状态的分布 + PD 分离与资源配比,438 点)→ 438 点。
扩展点:E-S23-085(PD 交接:1.125 GiB / 25 GB/s = 48.3 ms)、E-S23-086(MLA 把 8K 状态压到 549 MiB → 23.0 ms)、E-S23-087(A100 与 H20 的强弱正好相反)、E-S23-088(同构 PD 分离吞吐反而低 7%:3.50 vs 2.83 req/s)、E-S23-089(分离买的是延迟稳定性,不是吞吐)。
上一篇:S23-J23 · 压缩、卸载与推测解码
下一篇:S23-J25 · AFD、专家放置与 KV 分布。


1. 一句话结论

同构硬件上做 PD 分离,吞吐会掉 7%。 八张 A100:共置 3.05 req/s,拆成 3 张 P + 5 张 D 只有 2.83 req/s(min(3.50, 2.83))。但分离换来的是"decode 每步稳定在 55 ms"——它买的是尾延迟稳定,不是吞吐。

出处:AI Infra 教材 §9.1–§9.2(id 4342)。

共置:一张卡既 prefill 又 decode → 一次 0.86 s 的 prefill 让所有在途请求停摆
分离:P 池专做输入、D 池专做生成 → 两池按整数张卡划分,能力必须匹配

2. 四种组织方式(§9.1)

组织 谁跟谁协作 适合解决
① 多卡协作 8 卡共同执行一个完整实例 容量、单请求延迟
② 完整副本 每个副本独立完成整次推理 吞吐(按请求分工)
③ PD 分离 P 池做输入、D 池做生成 阶段资源不匹配、尾延迟
④ AF 分离 注意力侧 / 前馈侧分开 异构设备、专家计算(J25)

术语层次:设备(GPU/NPU/CPU)→ 进程(rank)→ 实例(多进程协作)→ 副本(能独立完成推理)。

判据:"实例"解决单请求,"副本"解决总吞吐,"分离"解决阶段错配。 三者不是替代关系。


3. PD 交接的代价(E-S23-085、E-S23-086)

GQA:  V_KV = 2·n·L·h_kv·d_h·b        (Qwen3-8B:每 token 144 KiB)
MLA:  V_KV = n·L·(d_c + d_r)·b       (DeepSeek-V3:每 token 68.6 KiB)
状态格式 8K 上下文 25 GB/s 传输 50 GB/s 传输
GQA(Qwen3-8B) 1.125 GiB 48.3 ms 24.2 ms
MLA(DeepSeek-V3:61 层、d_c=512、d_r=64) 549 MiB 23.0 ms 11.5 ms
加 5 μs 启动与同步:48.3 ms 几乎不变(固定开销占万分之一)

判据:PD 交接是大消息(MB–GiB 级),所以提带宽有用、减固定开销没用——这和 AF 逐层交接(小消息、每层一次)正好相反。


4. P 与 D 需要不同的卡(E-S23-087)

卡 BF16 稠密算力 显存带宽 显存 有效(取 50%)
A100 80GB SXM 312 TFLOP/s 2,039 GB/s 80 GB 156 TFLOP/s、1,020 GB/s
H20 SXM5 96GB 148 TFLOP/s 4,096 GB/s 96 GB 74 TFLOP/s、2,048 GB/s

同一请求(8192 输入、batch 32)在两个阶段的实测模型值:

阶段 工作量 受限项 A100 H20
prefill 8192 133.6 TFLOPs,权重只读一次 算力 0.856 s(9,570 tok/s) 1.81 s(4,540)
decode 一步(ctx 8,704,batch 32) 读 15.1 GB 权重 + 41.1 GB KV,0.65 TFLOPs 带宽 55.1 ms(18.1 步/s,580 token/s) 27.4 ms(36.5 步/s,1,166 token/s)
A100 的 prefill 快一倍多;H20 的 decode 快一倍 —— 强弱恰好相反
batch 32 生成到最后:KV 43.5 GB + 权重 ≈ 59.9 GB,两卡都容得下

判据:这就是 PD 分离的物理动机:P 要算力,D 要带宽。 用同一张卡同时干两件事,必然有一半能力闲置。

效率取 50% 的含义:MFU 与 MBU 都按 0.5 计——一半能力没变成模型计算(补齐零行、未重叠通信),一半是可以去掉的主机开销(逐 kernel 提交、重建通信组)。


5. 配比:整数划分的浪费(E-S23-088)

共置(8 张 A100,每卡都做 P 和 D):

每请求占用 0.856(P) + 1.764(D)= 2.62 GPU·秒
8 卡 → 8 / 2.62 ≈ 3.05 req/s

分离(3 张 P + 5 张 D):

池 卡数 能力 提供的吞吐
P 3 9570 tok/s/卡 3.50 req/s
D 5 每请求 1.764 GPU·s 2.83 req/s
合计 8 — min = 2.83 req/s
3.05 → 2.83 = 低 7%
每个请求消耗的 GPU 秒不变 → 同构分离不提高吞吐,整数划分还让能力闲置

判据:PD 分离的收益必须来自"两种卡不同"或"延迟要求",不能来自"分开了更专业"这种直觉。

5.1 分离到底买到了什么(E-S23-089)

指标 共置 分离
decode 步间隔 被 0.86 s 的 prefill 打断(≈错过 16 个 55 ms 步) 稳定 55 ms
打断频率(2.5 req/s、8 卡) 每卡平均每 3.2 s 一次 无
TTFT prefill 0.86 s prefill + KV 交接(48 ms 级)
吞吐 3.05 req/s 2.83 req/s

判据:分离是用 7% 吞吐换"稳定间隔"。 对交互式应用(流式输出、语音),间隔抖动比平均吞吐更影响体验。


6. 收益边界(§9.2.4 的判据归纳)

条件 PD 分离划算 不划算
硬件 P/D 用不同型号(算力强 / 带宽强) 同构卡
负载 长输入 + 长输出,阶段耗时差距大 短请求,两阶段占比接近
延迟 需要稳定 token 间隔 只看总吞吐
粒度 能以"整卡"近似匹配两池能力 卡数少(划分粒度粗,浪费大)

7. 可复算(实测)

$ cd /root/博客运营官/blog-v2 && python3 tools/s23_book_calc.py | tail -9
PD 交接(8K 上下文)
  GQA: 1.125 GiB → 25 GB/s 48.3 ms;50 GB/s 24.2 ms
  MLA: 0.536 GiB → 25 GB/s 23.0 ms;50 GB/s 11.5 ms
  prefill 8192 tok @A100: 0.856 s(9566 tok/s)
  prefill 8192 tok @H20: 1.805 s(4537 tok/s)
  decode batch32 @A100: 55.1 ms(18.1 步/s,581 token/s)
  decode batch32 @H20: 27.4 ms(36.4 步/s,1166 token/s)
配比: 共置 2.62 GPU·s/请求 → 8/2.62 = 3.05 req/s
  分离 3P/5D: min(3.50, 2.83) = 2.83 req/s(低 7%)

8. 前提与边界

结论 成立条件 不成立时
交接 48.3 ms 整份 KV 直传、25 GB/s 分块/流水交接 → 可重叠
A100 强在 P 按 0.5 效率取有效值 实际 MFU 更高 → 重算
分离吞吐 −7% 同构卡、整数划分 异构卡 → 可能显著提升
稳定 55 ms D 池不接 P 的工作 P 池溢出抢占 → 重新抖动

9. 常见误区

误区 纠正
"PD 分离一定更快" 同构卡上吞吐 −7%
"交接开销可忽略" 1.125 GiB / 25 GB/s = 48.3 ms
"减启动开销能加快交接" 固定开销占万分之一,要提带宽
"所有卡都一样,随便分" A100 强 P、H20 强 D
"分离提升吞吐" 它买的是间隔稳定

10. 自测

  1. Qwen3-8B 8K 上下文 KV 多大?25 GB/s 下交接多久?
  2. DeepSeek-V3 的 MLA 状态 8K 多少?比 GQA 少多少?
  3. A100 与 H20 在 prefill / decode 上各强多少?
  4. 8 张 A100 同构,共置与 3P/5D 分离的吞吐各多少?
答案
  1. 1.125 GiB;48.3 ms。
  2. 549 MiB(68.6 KiB/token × 8192);约为 GQA 的 48%。
  3. prefill:A100 0.856 s vs H20 1.81 s(快 2.1 倍);decode:H20 27.4 ms vs A100 55.1 ms(快 2 倍)。
  4. 共置 3.05 req/s;分离 2.83 req/s。

11. 下一篇

S23-J25 · AFD、专家放置与 KV 分布 —— 把分界切到层内:注意力与前馈/专家分开会怎样,专家副本与负载均衡怎么定,KV 放在哪一级、请求路由到哪台机器。

S23-J24 · 分布式推理:布局与 PD 分离
https://www.clxhxhhr.top/posts/5551/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。