Repository navigation
GLM-5.3 6000D:7K 多前缀稳态优化补丁与复现记录 - #28
fivechenxi wants to merge 14 commits into
Conversation
|
已补充 5 个独立提交,最新 HEAD
内容在 复现:旧 Router 对 P 的 HTTP 200 SSE 错误没有及时联动,mock 客户端超时;C32 共享前缀在默认阈值下全部进入单 DP。 验证:
边界:这不是新的 7K 性能或完整精度验收;路由均衡不等于 token-budget admission。GPQA 长循环仍未归因,下一步按同题、同采样、固定 P/DP、C1 对比保留的 RS+DCP2 基线与优化版,结果另报。未将未验证的 A/B 辅助脚本、内部地址或请求内容提交到 PR。 |
InputSP 通信量分析:当前实现按标准模型增加 12.5%,需要补充性能归因基于 head 统计口径
改前:TP2 AllReduce + CP4 AllGather旧路径只 gather hidden_states;更新后的 residual 保持 CP-local,不参与 CP4 AllGather。CP 组分别是 改后:TP2 ReduceScatter + TP8 AllGather + residual TP2 AllGather
因此: 前两个 collective 的替换本身在该模型下通信量持平;增加的部分来自恢复完整 CP-local residual。不能因为 AR 换成 RS,就将这项优化描述为减少总通信量。 例如 16K chunk、CP4、hidden=6144、BF16: 这是每层该边界的通信量。代码另外还有 residual slice 的 +5.3% 需要怎样的证据解释InputSP 确实将每 rank 的 residual + RMSNorm 处理行数减半,但没有减少 attention/MoE GEMM。结合额外 residual gather 和复制,净收益需要实际 profile 归因。 当前 README 记录了配对 P 测试约 +5.3%,归档中未见 InputSP 的原始 profiler trace 或这几个算子的前后耗时分解;整套优化后的 7K 结果也不能用于单项归因。更多 payload 并不必然更慢,但仅凭当前材料无法确认收益主要来自 Norm/显存访问,还是 collective 分组、算法或有效带宽变化。 建议补充同 shape、同负载下的 baseline/candidate 数据:
本评论只做源码和理论字节数核算,未重新执行 GPU 性能测试。 |
InputSP 社区调研:持续分片 residual,以及通信与 GEMM 融合补充前面的 InputSP 通信量分析。以下状态核对于 2026-10-19,本 PR 对照版本为 社区已经有同类 SP 实现,但尚不能将其收益或适用范围直接套到当前 GLM-5.3 NVFP4、CP4×attention-TP2 的局部 hook。值得借鉴的两个方向是:让 residual 的分片布局延续到后续层,或者将通信与相邻 GEMM 融合。两者都需要扩大集成范围。 1. SGLang sgl-project#30915:LayerNorm SP,已合并PR #30915 于 2026-09-01 合并,实现 它将 row-parallel AllReduce 拆为 ReduceScatter / AllGather,让 Norm 与 residual 在分片 token 上处理,并通过整个 SP 区域的布局管理延续这种状态。线性层在需要完整输入时 gather;支持条件下,使用 torch symmetric-memory 的 GEMM+ReduceScatter、AllGather+GEMM 融合路径。 这与 #28 的局部 InputSP 有一处关键差别:中间边界无需每次将 residual 聚合回原来的复制布局,因而不会天然带上当前 hook 的那次额外 residual TP2 AllGather。标准纯 TP SP 的 RS+AG 与原 AR 在带宽模型下通信量相同;这个结论不能直接套到本 PR 的混合 CP/TP 数据流。 PR 报告的 Qwen3-8B、16K prefill 结果:
这是比“SP 理论上更快”更有用的对照:在该 B200 配置中,融合才是主要收益来源,单独改写 RS/AG 没有稳定明显收益。 这是社区报告结果,本轮没有复测。 适用范围也要区分:合并时主要支持 Qwen3 dense;截至核对的 当前实现,允许列表为 Qwen3 dense 与 Muse Spark,仍没有 GLM DSA。配置检查 还限制 attention-DP、speculative 等组合。因此不能在当前配置上仅打开这个开关。也不能把 B200/BF16 的融合收益直接外推到 6000D/SM120/NVFP4。 2. vLLM:DeepSeek V3.2 的模型内 SP当前 DeepSeek V3.2 NVIDIA 模型实现 使用如下数据流: 它显式适配了 MoE 的分片输入,residual 继续跨层保留分片,在这个边界没有额外 residual AllGather。模型入口/出口、padding、辅助 hidden states 等也配套处理;不是只替换一个 Norm 前后的通信函数。 版本注意:搜索结果里常见的 3. SGLang sgl-project#44034:SP + 复制 MoE,尚未合并PR #44034 当前 OPEN,针对 Qwen3.5 MoE 的小 TP、长 prefill 场景:
PR 报告 2×B200、TP2、约 60K prompt 的 TTFT 从约 420 ms 降到 383 ms,约 −8.6%;同时付出完整专家权重显存和 decode 性能退化的代价。 它说明了另一种真正减少通信的办法,但需要复制模型权重,并明确排除 attention CP/DP 等组合,不是当前 GLM TP8 配置可直接套用的选项。 对 #28 的集成建议
可考虑两个独立候选,并分别测量:
当前 hook 为保持下游原接口而恢复 residual,是局部实验的取舍;若希望去掉额外通信,或获得社区融合路径的收益,应作为新的核心集成与验收工作。以上为源码和公开 PR 调研,没有新增 GPU 性能结论。 |
完整 KV + PCP4:建议补充容量/并发边界与 CP0-only 发送负载评估基于 head 1. 固定显存预算下,可容纳的 token 数会下降LayerSplit 开启时,每卡主要保存约 1/4 层的完整 KV/index,加上远端层 scratch;关闭后每卡保存全部层。因此下降的是同样显存预算能容纳的 token 容量/独立前缀工作集,不是缓存字节占用变小。 README 已报告完整 KV 约多占 4.7 GiB/rank,但归档没有列出 LayerSplit on/off 在相同 2. 现有 P 容量大致能承载什么?config.json 记录:每个 P 为 DP1、PCP4/attention-TP2, 这些 token 容量在各卡上是对应的缓存副本,不能乘以 8 当作不同 token 的容量。按历史 7K 负载的一个共享前缀粗算: 这是忽略其他存活 KV、预留与页对齐等开销的静态驻留上界,不是实测 C4 上限,也不等于 max_running_requests=64 能同时放下 64 条长请求。P 会在传输结束后解除该请求的缓存锁,未锁定缓存可被驱逐;P 无需为所有仍在 D 生成的请求持续保留锁定的完整 KV。所以端到端 inflight 数不能直接等同于 P 同时驻留的请求数。 3. 当前“够用”的证据范围两轮 7K 验收 使用四组固定可复用前缀、四个 P,3.40 req/s;README 记录每个 P 每轮 518 条准确的 73728-cached/8192-fresh 请求。4144/4144 完成、零错误,队列检查通过。这支持该前缀放置、到达率和有限时间窗口内容量与调度足以运行。 但以下证据仍缺少:
后续 recovery 的 C32/四 DP 均衡与强制 retraction 是恢复/路由正确性验证,配置和目的不同,不能替代 P 的独立长前缀容量测试。P 侧关闭 LayerSplit 也不会直接缩小 D 的 DCP pool;两侧瓶颈应分别观测。 4. CP0-only 确实会集中源端负载窄拓扑许可 要求关闭 LayerSplit 且不启用 all-CP transfer;rank mapping 此时只选择 P 的 CP rank 0。 在当前 P PCP4×attention-TP2、D attention-TP2 的配置中,CP0 是两张对应 attention-TP 卡(通常 P rank0/1),不是只有一张 GPU,也不是 D 只使用一个 DP。它们的本地显存成为相应 KV 的源,gather/pack 后再发送;其他 CP 的缓存副本不承担这条来源路径。
在层大小近似相同、分工均匀等理想条件下,活跃源卡每请求处理的层数据量可接近原来的 4 倍;这不代表总 RDMA payload 变成 4 倍,也不意味着传输耗时必然变成 4 倍。实际还取决于 NIC/PCIe 拓扑、pack kernel、传输线程并发和计算重叠。 因此完整 KV 带来的收益,可能同时伴随 CP0 的 HBM 读取、gather/pack GPU 工作、PCIe/NIC 流量及发送队列集中。现有 +10.9% 的 P 代理结果包含交接,但没有提供逐源 rank 的利用率/字节数,尚不足以证明 CP0 在更高负载下仍有余量。 另外,P 命中 73728 tokens 不等于 PD 只发送 8192 tokens;实际传输跨度还取决于 D 的可复用前缀。请分别记录 P 命中、D 命中与实际 KV/index 传输字节数。 建议补充的评估
结论:当前记录支持“四个固定热前缀”的已测运行点;完整 KV 对更大独立前缀工作集和更高发送并发的容量/负载代价,建议作为独立验收项补齐。本评论为源码、配置和已有验收记录分析,未执行新的 GPU 压测。 |
PCP 按 token/page 分片保存 KV:社区已有直接相关工作,建议作为完整 KV / CP0-only 的替代候选调研日期:2026-10-19。本 PR 对照 head: 核心想法:D 最终需要得到未命中部分所需的全部层、全部 token KV(在 DCP 下可以分布于多个 D rank),并不要求先由 P 的 CP0 持有并发送全部数据。除了保留完整副本、按请求轮换发送 CP,也可以让 P 沿 token/page 维度持久分片,由各 owner 直接发送自己的数据。 1. 社区已经做到了哪些部分?最直接的参考是 SGLang 的
不能将“这些基础 PR 已合并”理解成“GLM-5.3 + MTP + PCP4 → DCP2 已可直接开启”。截至核对的 main 另外,#43778:HiCache with KV sharding 当前 OPEN,方案仍拒绝 L3;不能沿用当前未分片缓存的备份/恢复假设。 2. 社区的实现方式:持久分片,计算时临时聚合以四个 shard 为例,每张卡保存所有层中自己拥有的那部分 token/page: 这与 LayerSplit 的“每张卡保存一部分层的全部 token”不同,也与当前“每张卡保存全部层、全部 token”不同。 社区已合并的 pool 方案在 prefill attention 前,将所需 cached prefix 从各 owner AllGather 到按层复用的 scratch,和当前 chunk 拼成 attention 可读取的视图;支持提前一层预取,并复用 scratch。DSA pool 方案也聚合 index K/scale。 因此,持久 KV 分片不等于 attention 无需跨卡 KV 通信。 它能减少长期缓存副本、提高同预算下的逻辑容量,并分散来源;但相较当前 full-KV 本地读取,会重新引入前缀 gather、scratch 显存和同步成本。社区另有 #44029:Zero-SM KV gather(OPEN)尝试降低 gather 对计算资源的干扰,这也说明该成本仍需要优化。其硬件/NCCL条件需在 SM120 上单独核对。 不要把 PCP 的计算分片直接等同于物理缓存 ownership:interleave PCP 可能按 token 位置分配计算,而社区 KV ownership 按逻辑页地址分配并携带 rotation metadata。应复用明确的页映射规则,保证 prefix 命中、续接、驱逐和回收都遵守同一个 ownership。 3. 针对本 PR 的建议方案建议比较两个不同规模的候选: A. 完整副本 + 每请求选择来源 CP
B. 持久 KV 按页分片 + 各 owner 直接向 D 发送
这是“完整副本轮换来源”之外的容量方案,需要更大的集成工作;两者不应混为同一个开关。 4. 成本模型与验收按页分片后的容量收益应扣除 prefix scratch、index scratch、draft pools、pack buffers 和 workspace;不能直接宣称每卡容量精确增加四倍。全套传输字节数也取决于 D 的已有前缀命中与 index/draft 的复制需求。 建议在相同显存预算、真实 GLM-5.3 NVFP4/FP8 KV、MTP 配置下对照:
分别测独立长前缀与共享热前缀、冷/热请求、并发与突发流量;记录逻辑 token 容量、最小 free tokens、各来源 pack/发送量、前缀 gather 时间、PD 传输延迟和端到端 TTFT/吞吐。正确性至少覆盖页边界/复用、各 CP→DCP 映射、index/draft 数据、分块与取消、回收恢复;启用 HiCache/L3 前再完成对应支持。 结论:社区已有按 token/page 持久分片的直接实现基础,方向值得评估;当前还不是 GLM-5.3 PCP4/MTP→DCP2 的即用方案。它有机会缓解 full-KV 容量代价和 CP0 来源集中,但不能预先认定比当前本地完整缓存读取更快。 本评论为社区源码/PR调研与设计建议,未实施改动或新增 GPU 验证。 |
有界打包提交需要补充明确的单项收益;暂不推进双 buffer针对提交 目前代码机制是清楚的:原路径已经有固定大小、预注册的 pack buffer;本提交在一次数据装不下时分块复用,避免退回大量不连续的小块 RDMA。它没有减少必须传输的 KV 字节数,而是用 GPU gather/复制及多轮同步发送,换取更少、更大的传输块。 但 README 目前没有给出这个提交独立的性能收益。字节复制、边界和失败停止的回归能证明对应逻辑,不能代替性能对照;整套优化后的 7K 结果也不能归因到这一项。建议补充以下证据后,再判断是否值得正式集成。 1. 先证明实测负载确实使用了这条路径新分支仅在开关开启且
2. 相同配置下,仅切换本提交的 A/B保持模型、拓扑、量化、队列数、pack buffer 容量、缓存状态及其他优化不变:
至少给出容量内、刚超过容量、数倍容量,以及连续/碎片页的代表用例,记录样本数和波动。 3. 把收益与新增成本分开量化请列出前后对照:
4. 显存成本请按每个源 GPU 报告列出 worker/queue 数、单 buffer 大小、总注册 buffer 显存及峰值临时分配。区分基线已有的 pack buffer 成本与本提交新增的临时开销:本提交复用旧 buffer,不应误记成新增一整套 buffer,但这些常驻资源仍会影响可用 KV 容量和并发。 本轮先保持单 buffer 方案,暂不推进双 buffer 或扩大 buffer 预算。 双 buffer 可能重叠 pack 与传输,但额外显存会进一步挤压 KV pool;在现有 commit 的收益和瓶颈尚未量化前,不应继续叠加这项复杂度。 希望最终补一张单项对照表,给出明确结论:哪些请求规模/页布局下改善多少,哪些情况持平或退化,以及对应显存预算。当前评论是要求补齐性能证据,不是在否定已有正确性回归或预先断言该优化无效。 |
|
还有一个问题需要确认,kv layersplit是之前pr #25 优化的一个重要手段,这个分析关闭了,要参考下之前分析为什么要开启,确认关闭真的有收益。 |
|
已逐条核对上述评论,提交
详情见本PR |
概要
整理 6000D GLM-5.3 NVFP4 最新已验证优化,单独叠加在 #25 分支,不改写 #25/#26/#27。8 个独立提交,所有新增文件位于
benchmark/glm53_pd_7k/。这是固定运行版本的增量研究补丁包,不是把这些修改自动启用到当前核心源码,也不是新的完整镜像。 实测 P 是 v0.5.19/Torch 2.13,D 是 v0.5.17/Torch 2.11 + legacy overlays。每个运行文件 patch 有严格 pre/post SHA;不能直接覆盖当前 #25 后续 L3 修复或任意 release。
提交划分
.so。既有 RS、DCP/索引池能力分别依赖 #26/#27,不重复计入单项收益。未纳入失败的 MoE tactic、FI 0.7 MLA、FP8 wire 等候选。未包含地址、账号、凭据、私有镜像、真实请求或环境部署脚本。
已有端到端验收
本次重新执行的验证
0bcd822377da7b5718e674eaf9c870d349424dd1上检查和往返通过。审阅入口:
benchmark/glm53_pd_7k/README.md。check_sources.py只读且 fail-closed。保留原始研究 hook 是为了字节可追溯,未将实验日志/控制文件轮询混入核心源码。