Prhub

#32120 [AMD][DI][CI] 8/N Add GLM-5.2 MXFP4 1P1D DI/CI recipes (base + MTP + DP8/EP8)

原始 PR 作者 Lzy17 合并时间 2026-08-07 13:56 文件变更 5 提交数 4 评论 1 代码增减 +382 / -0

执行摘要

MI355X 新增 GLM-5.2 MXFP4 四类 1P1D 夜测 recipe

让 AMD MI355X 的 nightly 以与 DeepSeek-V4、Kimi-K2.6 相同的方式覆盖 GLM MoE 模型线。PR 描述原文:Add AMD MI355X DI/CI nightly recipes for GLM-5.2 (MXFP4) 2-node 1P1D disaggregation, so the nightly exercises the GLM MoE line the same way it already covers DeepSeek-V4 and Kimi-K2.6。GLM-5.2 使用 GlmMoeDsaForCausalLM(DSA 稀疏注意力,sglang 自动选择后端)且内置 NextN MTP 头(num_nextn_predict_layers=1),无需外部草稿 checkpoint,适合纳入现有 1P1D basic tier 测试矩阵。

值得快速浏览以了解 AMD MI355X CI recipe 的结构与 launcher 路径约定,但无需精读,因为全部为配置变更。更值得关注的是被暴露的 DSA + NextN + DP-attention 崩溃 bug,建议跟踪其后续修复 PR,并留意 model_path 从 5.1 切换到 5.2 checkpoint 的跟进 PR。合并决策本身合理:3/4 腿验证通过且改动不触碰现有配置。

讨论亮点

该 PR 没有实质性的 review 评论,HaiShaw 直接批准(Approved,body 为空)。最有价值的技术讨论来自 PR 作者自述的 dp8ep8-mtp 崩溃分析,被定位为源码级缺陷而非 recipe 问题:

RuntimeError: Expected lengths.size(0) == B to be true, but got false in the DSA sparse-attention top-k indexer during the NextN draft forward, only when DP-attention and MTP are combined。调用栈为 deepseek_nextn.py:276 → deepseek_v2.py:1860 → forward_mla.py:384 → dsa_indexer.py:1998 → dsa_backend.py:315 → sgl_kernel/top_k.py:77 fast_topk_transform_fused。

结论:DP-attention 与 MTP 单独使用均正常(dp8ep8 = 0.945,MTP = 0.933),组合时 per-batch seqlens 未按 DP-padded NextN draft-extend batch 构建,属 DSA + NextN + DP-attention 的源码 bug,超出 recipe PR 范围,单独跟踪。作者明确要求不得将该腿视为通过。

实现拆解

  1. 新增 4 个 recipe 文件(scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/ 下):1p1d.yaml(TP8 1P1D 无 MTP)、1p1d-mtp.yaml(TP8 + 内置 NextN MTP)、1p1d-dp8ep8.yaml(DP-attention 8 + 窄 EP8)、1p1d-dp8ep8-mtp.yaml(DP8 + EP8 + NextN MTP)。每个文件声明 resources(prefill/decode 各 1 worker)、backend.sglang_config(TP/EP/DP)与 bench 段(并发扫描 + GSM8K accuracy gate,threshold 0.91)。
  2. model 块与通用 launcher 路径:4 个 recipe 均携带 model 块(SGLANG_USE_AITER=1 环境变量 + server_args),其存在与否决定 launch_mi355x.sh 走通用命令构建路径而非硬编码 DeepSeek-V4 分支。后者会无条件追加 --attention-backend,对 GLM 会报 expected one argument 错误。GLM 有 n_shared_experts=1,因此显式传入 --disable-shared-experts-fusion;attention_backend 故意不设置,让服务端对 GlmMoeDsaForCausalLM 自动选择 DSA 后端。
  3. nightly-configs.yaml 注册 4 个执行块:追加 glm52-fp4-mi355x[-mtp|-dp8ep8|-dp8ep8-mtp]-sglang,统一配置 model、model-prefix、runner=mi355x、precision=fp4、framework=sglang、multinode=true、disagg=true、seq-len 1k/1k 与搜索结果映射到上述 recipe 文件。model_path 指向 /it-share 上镜像的 amd/GLM-5.1-MXFP4 checkpoint(见风险)。
  4. 镜像与 MTP 修复依赖:recipes 引用 lmsysorg/sglang-rocm:v0.5.15.post1-rocm720-mi35x-20260722,该镜像包含 #30265(GlmMoeDsaForCausalLMNextN 类 + GLM 专属 Quark excludes / MTP layer-index remap),是 GLM NextN MTP 精度的前置修复。提交历史显示作者先修 launcher 启动问题、再升级镜像并完成 4 腿验证。
  5. 验证配套:在 MI355X 2 节点 1P1D 上以完整 GSM8K 1319 题 8-shot 验证,base 0.930、mtp 0.933、dp8ep8 0.945 均超过 gate 0.91;dp8ep8-mtp 在 DSA topk indexer 崩溃,作为已知源码 bug 单独跟踪。
文件 模块 状态 重要度
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d-mtp.yaml CI 配置 added 5.14
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d.yaml CI 配置 added 5.13
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d-dp8ep8.yaml CI 配置 added 4.7
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d-dp8ep8-mtp.yaml CI 配置 added 5.14
scripts/ci/slurm/nightly-configs.yaml 夜测注册 modified 4.46

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

dp8ep8-mtp 腿在 DSA topk indexer 崩溃 正确性

PR 描述记录了崩溃调用栈:deepseek_nextn.py:276 前向 → deepseek_v2.py:1860 → forward_mla.py:384 → dsa_indexer.py:1998 forward_cuda → fast_topk_transform_fused(assert lengths.size(0)==B)。DP-attention 与 MTP 单独使用均正常,组合时 per-batch seqlens 未按 DP-padded NextN draft-extend batch 构建。

结论:判定为 DSA + NextN + DP-attention 组合的源码级 bug,非 recipe 配置问题,超出本 PR 范围,单独跟踪;该腿保留在 recipes 中但不得视为通过。 · 已识别待源码修复

风险与影响

  1. dp8ep8-mtp 腿已知崩溃但已合入:该 recipe 与 nightly 块保留在仓库中且标记为不通过,若后续 nightly 自动执行该块将持续报红,可能被当作已知失败忽略,从而掩盖同路径上的新回归。
  2. checkpoint 命名与内容不一致:recipe/block 命名跟踪 GLM-5.2 模型线,但 model_path 指向磁盘上唯一的 amd/GLM-5.1-MXFP4 镜像;若 5.2 checkpoint 的 MoE 布局或 DSA 行为与 5.1 不同,验证结果会产生误导,作者已声明 5.2 checkpoint 落地后需重定向。
  3. 依赖特定 nightly 镜像:镜像 20260722 包含 #30265 修复,是 MTP 精度前提;镜像更新或回退会直接影响这 4 个腿的结果,且没有自动化断言校验镜像内容。
  4. 纯配置无源码断言:没有针对 recipe 结构或 launcher 路径的测试,未来 launch_mi355x.sh 的行为变更(如通用路径分支调整)可能悄悄破坏这些 recipe。
  5. 硬件环境假设:ib_devices rdma0-3、端口号、MORI 网络拓扑为特定集群假设,环境变化时 recipe 需要人工同步。

影响范围限于 CI/nightly 基础设施:为 AMD MI355X 分解式推理新增 GLM MoE 模型线覆盖,使 nightly 与 DeepSeek-V4、Kimi-K2.6 矩阵对齐,可更早捕获 GLM-5.2 在 ROCm 平台的精度与性能回归。对运行时、用户 API 无影响。对团队而言,新增 4 个执行块会占用 nightly GPU 资源,其中 1 个腿当前必然失败,需要运维侧按已知失败处理。整体影响程度为中低,价值在于覆盖缺口与后续源码 bug 的跟踪线索。

dp8ep8-mtp 已知崩溃未修复 checkpoint 命名与内容不一致 依赖特定 nightly 镜像版本 纯配置变更无自动化断言

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论