适用读者:要决定"单实例多卡还是多副本"、要评估 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. 自测
- Qwen3-8B 8K 上下文 KV 多大?25 GB/s 下交接多久?
- DeepSeek-V3 的 MLA 状态 8K 多少?比 GQA 少多少?
- A100 与 H20 在 prefill / decode 上各强多少?
- 8 张 A100 同构,共置与 3P/5D 分离的吞吐各多少?
答案
- 1.125 GiB;48.3 ms。
- 549 MiB(68.6 KiB/token × 8192);约为 GQA 的 48%。
- prefill:A100 0.856 s vs H20 1.81 s(快 2.1 倍);decode:H20 27.4 ms vs A100 55.1 ms(快 2 倍)。
- 共置 3.05 req/s;分离 2.83 req/s。
11. 下一篇
S23-J25 · AFD、专家放置与 KV 分布 —— 把分界切到层内:注意力与前馈/专家分开会怎样,专家副本与负载均衡怎么定,KV 放在哪一级、请求路由到哪台机器。