执行摘要
- 一句话:MI355X 新增 GLM-5.2 MXFP4 四类 1P1D 夜测 recipe
- 推荐动作:值得快速浏览以了解 AMD MI355X CI recipe 的结构与 launcher 路径约定,但无需精读,因为全部为配置变更。更值得关注的是被暴露的 DSA + NextN + DP-attention 崩溃 bug,建议跟踪其后续修复 PR,并留意 model_path 从 5.1 切换到 5.2 checkpoint 的跟进 PR。合并决策本身合理:3/4 腿验证通过且改动不触碰现有配置。
功能与动机
让 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 测试矩阵。
实现拆解
- 新增 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)。
- 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 后端。
- 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(见风险)。
- 镜像与 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 腿验证。
- 验证配套:在 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 配置;类别 infra;类型 infrastructure): TP8 + 内置 NextN MTP 的 recipe,展示 model 块、mtp 段与 accuracy gate 的完整配置,是理解通用 launcher 路径的代表文件。
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d.yaml(模块 CI 配置;类别 infra;类型 infrastructure): 基础 TP8 1P1D recipe,是所有变体的模板,也是验证通过(GSM8K 0.930)的第一个腿。
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d-dp8ep8.yaml(模块 CI 配置;类别 infra;类型 infrastructure): DP-attention 8 + 窄 EP8 拓扑,验证通过(0.945),与 DeepSeek-V4 dp8ep8 腿同构。
scripts/ci/slurm/recipes/mi355x-fp4/glm52/1k1k/1p1d-dp8ep8-mtp.yaml(模块 CI 配置;类别 infra;类型 infrastructure): DP8 + EP8 + NextN MTP 组合腿,当前因 DSA topk 崩溃无法通过,是暴露源码 bug 的关键线索。
scripts/ci/slurm/nightly-configs.yaml(模块 夜测注册;类别 infra;类型 infrastructure): nightly 执行注册中心,追加 4 个 GLM-5.2 块,将 recipe 映射到模型、精度与搜索空间。
关键符号:未识别
评论区精华
该 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 范围,单独跟踪。作者明确要求不得将该腿视为通过。
- dp8ep8-mtp 腿在 DSA topk indexer 崩溃 (correctness): 判定为 DSA + NextN + DP-attention 组合的源码级 bug,非 recipe 配置问题,超出本 PR 范围,单独跟踪;该腿保留在 recipes 中但不得视为通过。
风险与影响
- 风险:
- dp8ep8-mtp 腿已知崩溃但已合入:该 recipe 与 nightly 块保留在仓库中且标记为不通过,若后续 nightly 自动执行该块将持续报红,可能被当作已知失败忽略,从而掩盖同路径上的新回归。
- checkpoint 命名与内容不一致:recipe/block 命名跟踪 GLM-5.2 模型线,但 model_path 指向磁盘上唯一的 amd/GLM-5.1-MXFP4 镜像;若 5.2 checkpoint 的 MoE 布局或 DSA 行为与 5.1 不同,验证结果会产生误导,作者已声明 5.2 checkpoint 落地后需重定向。
- 依赖特定 nightly 镜像:镜像 20260722 包含 #30265 修复,是 MTP 精度前提;镜像更新或回退会直接影响这 4 个腿的结果,且没有自动化断言校验镜像内容。
- 纯配置无源码断言:没有针对 recipe 结构或 launcher 路径的测试,未来 launch_mi355x.sh 的行为变更(如通用路径分支调整)可能悄悄破坏这些 recipe。
- 硬件环境假设: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 镜像版本, 纯配置变更无自动化断言
关联脉络
- PR #30265 [AMD] Fix GLM-5.2 MTP Quark excludes: PR body 明确引用:镜像 20260722 包含该修复(GlmMoeDsaForCausalLMNextN 类 + Quark excludes / MTP layer-index remap),是 GLM NextN MTP 精度与可用性的前置依赖。
- PR #33935 Clean GLM-5.2 NVFP4 cookbook: 同为 GLM-5.2 模型线的配套文档变更,说明 GLM-5.2 在仓库中的功能落地脉络。
- PR #32466 [AMD] Enable gfx1250 sgl-kernel builds: 同为 AMD 平台基础设施变更,与 MI355X 系列 CI 覆盖同属 AMD 夜间测试建设方向。
参与讨论